Java基础

Java基础

  • 目录:
    image-20251202210311223

注释

书写注释是一个非常好的习惯!平时写代码一定要注意规范!

Java的注释有三种:

  1. 单行注释:

    //我是注释
    
  2. 多行注释:可以注释一段文字,/* 注释 */

    /*
    我是多行注释
    我是多行注释
    我是多行注释
    我是多行注释
    */
    
  3. 文档注释:与JavaDoc联合使用,/** 注释 */

    /**
    *@Description HelloWorld
    *@Author Judy
    */
    

标识符

Java所有的组成部分都需要名字。类名、变量名和方法名都被称为标识符

(一)关键词

屏幕截图 2025-11-25 201107

(二)标识符注意要点:

  1. 标识符的首字符:必须以字母(A-Z或者a-z),美元符号($),下划线(_)

  2. 除了首字符之外,可以是字母(A-Z或者a-z),美元符号($),下划线(_),或数字的任意组合

    • 合法标识符举例:age, $salary, _value, _1_value
    • 非法标识符举例:123abc, -salary, #abc
  3. 不能用关键词作为变量名或方法名

  4. 标识符是大小写敏感

  5. 可以使用中文作为标识符,但是非常不建议!(拼音也很low)

    image-20251125202826412


数据类型

1.强类型语言:要求变量的使用严格符合规定,所有变量都必须先定义后才能使用!

2.弱类型语言

Java的数据类型分成两大类:

  • 基本类型(primitive type):数值类型(整数,浮点数);字符类型(char);布尔类型(占1位)

    image-20251125215219919

    补充知识:

    1. 位(bit):是计算机内部数据存储的最小单位
    2. 字节(byte,用B表示):是计算机中数据处理的基本单位
    3. 关系:1 B = 8 bit
    4. 1024B=1KB,1024KB=1MB,1024MB=1GB,1024GB=1TB
    5. 字符:指计算机中使用的字母、数字、字(可以是单个汉字)和符号
  • 引用类型(reference type):类;接口;数组

public class Demo02 {
    public static void main(String[] args) {
        //八大基本数据类型

        //整数
        //可以输入完整的类名(例如Integer,Byte等),按住Ctrl+点击类名,查看类的完整定义
        int num1=10; //最常用
        byte num2=20;
        short num3=30;
        long num4=40L; //long类型要在数值后面加个L

        //小数(浮点数)
        float num5=50.1F; //float类型要在数值后面加个F
        double num6=3.14159265359;

        //字符
        char name1='A';
        char name2='姜'; //可以是单个汉字
        //字符串(不属于8大基本类型),String不是关键字,是类
        String name32="judy";

        //布尔值(代表是/非)
        boolean flag=true;
        //boolean flag=false;
    }
}

数据类型扩展及面试题详解

public class Demo03 {
    public static void main(String[] args) {
        //==========================================================================
        //整数拓展
        //==========================================================================
        //进制: 二进制0b 十进制 八进制0 十六进制0x
        int i = 10;
        int i2 = 010; //八进制0
        int i3= 0x10; //十六进制0x  0~9 A~F(15)

        System.out.println(i);
        System.out.println(i2);
        System.out.println(i3);

        //==========================================================================
        //浮点数扩展:float double
        //有限 离散 舍入误差 大约 接近但不等于
        //最好完全避免使用浮点数进行比较!!!
        //(银行业务怎么表示?钱):BigDecimal数学工具类
        //==========================================================================
        float f =0.1f;
        double d = 1.0/10;

        System.out.println(f); //0.1
        System.out.println(d); //0.1
        System.out.println(f==d);  //false

        float f1 = 2313131313231231231f;
        float f2 = f1+1;

        System.out.println(f1==f2); //true

        //==========================================================================
        //字符拓展
        //==========================================================================
        char c1='a';
        char c2='中';

        System.out.println(c1);
        System.out.println((int)c1); //强制转换
        System.out.println(c2);
        System.out.println((int)c2); //强制转换
        //所有的字符,本质还是数字
        //编码 Unicode(2字节):a=97 A=65  65536(0-65535)

        //U0000-UFFFF
        char c3='\u0061'; //十六进制
        System.out.println(c3);

        //转义字符
        //制表符 \t
        //换行 \n
        System.out.println("Hello\tWorld!");
        System.out.println("Hello\nWorld!");


        String s1 = new String("Hello world");
        String s2 = new String("Hello world");
        System.out.println(s1==s2);          //地址比较 false
        System.out.println(s1.equals(s2));   //内容比较
        System.out.println(s1.equals("Hello world"));

        String s3 = "Hello world";
        String s4 = "Hello world";
        System.out.println(s3==s4);
        //对象 从内存分析
 
        //==========================================================================
        //布尔值扩展
        //==========================================================================
        boolean flag=true;
        //以下两种表达方式一样 Less is more!代码要精简易读
        if(flag==true){}
        if(flag){}
    }
}


类型转换

由于java是强类型语言,所以要进行有些运算时,需要用到类型转换
1.强制类型转换: (类型)变量名 高 → 低
2.自动转化:低 → 高

image-20251202105818018

public class Demo05 {
    public static void main(String[] args) {
        //强制类型转换: (类型)变量名   高 → 低
        int i=128;
        byte b=(byte)i;  //内存溢出

        System.out.println(i);
        System.out.println(b);

        //自动类型转换: 低 → 高
        double d=i;
        System.out.println(d);

        /*
        注意点:
        1.不能对布尔值进行转换
        2.不能把对象类型转换为不相干的类型
        3.在把高容量转换到低容量的时候,强制转换
        4.转换的时候可能存在内存溢出,或者精度问题!
        */
        System.out.println("====================================================");
        System.out.println((int)23.7); //23
        System.out.println((int)-45.89f);  //-45

        System.out.println("====================================================");
        char c='a';
        int i2=c+1;
        System.out.println(i2);
        System.out.println((char)i2);
    }
}

public class Demo06 {
    public static void main(String[] args) {
        //操作比较大的数的时候,注意溢出问题
        int money=1000000000;
        System.out.println(money);
        //JDK7新特性,数字之间可以用下划线分割(下划线不会被输出)
        int money2=10_0000_0000;
        System.out.println(money2);

        int years=20;
        int total=money*years;
        System.out.println(total);//-1474836480,计算的时候溢出了
        long total2=money*years;
        System.out.println(total2);//-1474836480,默认是int,转换之前已经存在问题了
        long total3=money*((long)years);
        System.out.println(total3);  //20000000000 正确! 先把一个数转换为Long
    }
}

变量

  • 变量是什么:可以变化的量!

  • Java是一种强类型语言,每个变量都必须声明其类型

  • Java变量是程序中最基本的存储单元(其要素包括:变量类型、变量名和作用域

    image-20251202113506854

  • 变量作用域:

    • 类变量(即静态变量,static关键词):有默认值,不必初始化。

    • 实例变量(即非静态成员变量):从属于对象;有默认值,不必初始化。

    • 局部变量(写在方法里面的):无默认值,声明时必须进行初始化。必须显式初始化后才能使用!

      image-20251202114112057

      public class Demo08 {
          //类变量 static:从属于类
          static double salary=8000;
      
      
          //实例变量:1.从属于对象 2.如果不进行初始化,基本类型的默认值为0 0.0 u0000(char类型)
          //布尔值:默认是false
          //除了8大基本类型,其余的默认值都是null
          String name;
          int age;
      
          //main方法
          public static void main(String[] args) {
              //局部变量:必须声明和初始化值,只在该方法{}内有效
              int i=10;
              System.out.println(i);
      
              //实例变量
              //变量类型 变量名=new Demo08();
              Demo08 demo8=new Demo08();
              System.out.println(demo8.name);
              System.out.println(demo8.age);
      
              //类变量 static
              System.out.println(salary);
          }
      
          //其他方法
          public void add(){
      
          }
      }
      
  • 注意事项:

    • 每个变量都有类型(可以是基本类型,也可以是引用类型)
    • 变量名必须是合法的标识符
    • 变量声明是一条完整的语句(必须以分号结束)
    • 不建议在同一行定义多个变量
public class Demo07 {
    public static void main(String[] args) {
        //int a,b,c; 不建议这样写在同一行!
        //分行写有助于提升程序可读性
        int a=1;
        int b=2;
        int c=3;

        String name="judy";
        char x='X';
        double pi=3.14;
    }
}

常量

  • 常量(constant):初始化(initialize)之后不能再改变值!不会变动的值

  • 常量可以理解为一种特殊的变量:它的值被设定后,在程序运行的过程中不允许被改变

    • 通过final关键词来定义

    image-20251202115741635

  • 常量名一般使用大写字符

public class Demo09 {
    //变量类型之前的都是修饰符(static,final等),不存在先后顺序
    static final double PI=3.14;

    public static void main(String[] args) {
        System.out.println(PI);
    }
}
  • 变量的命名规范:
    • 所有的变量、方法名、类名:见名知意
    • 类成员变量:首字母小写和驼峰原则,e.g. monthSalary (除了第一个单词以外,后面的首字母大写!)
    • 局部变量:首字母小写和驼峰原则
    • 常量:大写字母和下划线,e.g. MAX_VALUE
    • 类名:首字母大写和驼峰原则,e.g. Man, GoodMan
    • 方法名:首字母小写和驼峰原则,e.g. run(), runRun()

运算符

多用()表示优先级

  1. 算数运算符:+,-,*,/,%(取余数),++,--

  2. 赋值运算符:=

  3. 关系运算符:>,<,>=,<=,==,!=,instanceof

  4. 逻辑运算符:&&,||,!

  5. 位运算符:&,|,^,~,>>,<<,>>>(了解)

  6. 条件运算符: ?:

  7. 扩展赋值运算符:+=,-=,*=,/=

  • 基本运算符
package operator;

public class Demo01 {
    public static void main(String[] args) {
        //二元运算符
        //Ctrl+D:复制当前行到下一行
        int a=10;
        int b=20;
        int c=21;

        System.out.println(a+b);
        System.out.println(a-b);
        System.out.println(a*b);
        System.out.println((double)a/b);  //0.5,若不加类型转换,结果为0

        //====================================================

        System.out.println(c%a);  //模运算符(取余数)  21/10=2...1

        //====================================================
        //没有幂运算符
        //很多运算,会使用一些工具类来操作! Math类
        double pow= Math.pow(3,2);
        System.out.println(pow);

    }
}
  • 不同类型的项相加,结果的类型为?
package operator;

public class Demo02 {
   public static void main(String[] args) {
       //低 -------------------------------------→ 高
       //byte,short,char → int → long → float → double
       long a= 1231213123123123L;
       int b = 123;
       short c = 10;
       byte d = 8;
       double e=0.1;
       float f = 0.1f;

       System.out.println(a+b+c+d+f+e);  //double
       System.out.println(a+b+c+d+f);  //float

       System.out.println(a+b+c+d); //long
       System.out.println(b+c+d);  //int
       System.out.println(c+d);  //int
       //通过System.out.println((String)(c+d));可以看出结果为int类型

       /*总结:
       1.不同基本类型的数值做加法,结果的类型为加法项中最高的类型
       2.若没有int以上类型的加法项,结果的类型为int
        */
   }
}
package operator;

public class Demo07 {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;

        a+=b;  //a=a+b
        System.out.println(a);

        a-=b;  //a=a-b
        System.out.println(a);
        //===============================================================
        //字符串连接符 +,只要有一个是String类型的,就会把其他部分也转换成String类型

        //面试题:
        // ""+a+b和a+b+""有什么区别?
        System.out.println(""+a+b); //1020
        System.out.println(a+b+""); //30
        //结果:String类型的字符串在前,后面的项会拼接;String类型的字符串在后,前面的项依旧进行运算!

    }
}
  • 关系运算符
package operator;

public class Demo03 {
    public static void main(String[] args) {
        //关系运算符返回的结果:布尔值(正确/错误)
        //常与if一起使用
        int a= 10;
        int b= 20;

        System.out.println(a>b);
        System.out.println(a<b);
        System.out.println(a==b);
        System.out.println(a!=b);
    }
}
  • 自增、自减运算符(一元运算符)
package operator;

public class Demo04 {
    public static void main(String[] args) {
        //一元运算符:++ -- 自增 自减
        int a = 3;
        System.out.println(a);
        //====================================================
        int b = a++;          //执行完这行代码后,先给b赋值,再自增
        //a=a+1

        System.out.println(a);
        //====================================================
        //a=a+1
        int c = ++a;          //执行完这行代码前,先自增,再给c赋值

        System.out.println(a);
        //====================================================
        System.out.println(b);
        System.out.println(c);
    }
}
  • 逻辑运算符
package operator;
//逻辑运算符
public class Demo05 {
    public static void main(String[] args) {
        //与(and) 或(or) 非(取反)
        boolean a = true;
        boolean b = false;

        System.out.println("a && b:"+(a&&b));  //逻辑与运算:两个变量都为真,结果才为真
        System.out.println("a || b:"+(a||b));  //逻辑或运算:两个变量只要有一个为真,结果就为真
        System.out.println("!(a && b):"+!(a&&b));  //如果是真,则变为假;如果是假,则变为真

        //短路运算
        int c = 5;
        boolean d=(c<4)&&(c++<4);
        System.out.println(d);
        System.out.println(c);  //c还是5,说明"(c++<4)"语句没有执行
        // c<4为false,发生了短路运算
    }
}
  • 位运算符
package operator;
//位运算符(与二进制有关,运行效率极高!)
public class Demo06 {
    public static void main(String[] args) {
        /*
        A = 0011 1100
        B = 0000 1101
        =============================================
        A&B:0000 1100 与(对应位都是1则为1,否则为0)
        A|B:0011 1101 或(对应位有一个为1就为1,否则为0)
        A^B:0011 0001 异或(对应位相同则为0,不同则为1)
        ~B:1111 0010 取反
        =============================================
        << 左移:把数值*2
        >> 右移:把数值/2
        0000 0000:0
        0000 0001:1
        0000 0010:2
        0000 0011:3
        0000 0100:4
        0000 1000:8
        0001 0000:16
        */

        //面试题:2*8怎么计算最快?2*8=2*2*2*2
        System.out.println(2<<3);
    }
}
  • 三元运算符
package operator;
//三元运算符
public class Demo08 {
    public static void main(String[] args) {
        //x ? y : z
        //如果x==true,则结果为y,否则结果为z
        int score = 80;
        String type = score<60 ? "不及格" : "及格";  //必须掌握
        System.out.println(type);

    }
}

包机制

  • 为了更好地组织类,Java提供了包机制,用于区分类的命名空间

  • 包的语法格式为:

package pkg1;

一般利用公司域名倒置作为包名,例如www.baidu.com的倒置为com.baidu.www

  • 为了能够使用某一个包的成员,我们需要使用"import"语句明确导入该包
import pkg1 (classname | *);
  • 注意:
    • import语句必须写在package语句之下!package语句必须放在首行!
    • 不同的包中的类名,尽量不要重复

JavaDoc

  • javadoc命令是用来生成自己API文档的(可以加在类/方法上)

  • 参数信息:

    • @author :作者名

    • @version:版本号

    • @since:指明需要最早使用的jdk版本

    • @param:参数名

    • @return:返回值情况

    • @throws:异常抛出情况

  • 方法:

  1. 通过命令行生成index.html文件
javadoc java文件

image-20251202205811462

  1. 使用IDEA生产javadoc文档
    image-20251202211554223
posted @ 2025-11-25 22:00  juuddy  阅读(19)  评论(0)    收藏  举报