Java基础语法

注释

1
2
3
4
5
6
7
8
9
10
11
// 单行注释

/*
多行注释
*/

/**
* JavaDoc:文档注释
*
*
*/

标识符

类名变量名方法名都被称为标识符

  • 关键字不能作为标识符
  • 所有的标识符都必须以字母、$或下划线_开始;首字符之后还可以选择数字作为字符。
  • 标识符中不能使用#*-等字符
  • 标识符是大小写敏感

数据类型

  • 强类型语言

    要求变量的使用严格符合规定,变量都必须先定义再使用。Java就是强类型语言。

  • 弱类型语言

    JavaScript就是弱类型语言。


Java的数据类型分为两大类

基本类型(primitive type, 8个)

  • 数值类型

    • 整数类型

      整数类型 大小 表示范围
      byte 8位 -128($-2^7$) ~ 127($2^7-1$)
      short 16位 $(-2^{15})$~$(2^{15}-1)$
      int 32位 $(-2^{31})$~$(2^{31}-1)$
      long 64位 $(-2^{63})$~$(2^{63}-1)$
      • long类型的变量,赋值时需要在最后加一个L,便于和int类型区分。(不加L也能通过编译,但是可读性差小写的l辨识度低,可读性也差)
      • float类型的变量,赋值时必须在最后加一个F
    • 浮点数类型

      浮点类型 大小
      float 32位
      double 64位

      最好完全不要使用浮点数进行比较,因为浮点数是有限位的、离散的、有舍入误差的数据类型。

      那么银行类业务应该用什么数据类型表示钱?——数学工具类 BigDecimal

    • 字符类型

      char,16位,赋值使用单引号''字符串String不是关键字,而是一个类,赋值使用**双引号""**。

    1
    2
    3
    4
    long num1 = 30L; 
    float num2 = 3.14F;
    char c = 'A';
    String str = "AS";

    JDK7的特性:赋值时,可以用下划线_分割过长的数字(整数&浮点数均可),提高可读性

  • 布尔类型 boolean

    1位,值为true/false,由所占空间大小可知,**实际是使用(1/0)**来表示。


引用类型(reference type)

    • String

      • 判断字符串是否相等

        str1.equals(str2)重写了继承自Object的方法

        而不是通过==来判断,因为String是引用类型中的==作用于对象实际比较的是地址

      •   String str = "test" // 实际等价于 String str = new String("test");
          
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
          	
        **不用创建对象的写法可以看作Java为了方便的设计,并不意味着String类是和char一样的基本类型**。

        - 接口

        - 数组

        ---

        ### 数据类型扩展

        #### 不同进制整数的特殊表示方法

        - **二**进制:**0b**开头
        - **八**进制:**0**开头
        - **十六**进制:**0x**开头

        ```java
        int num1 = 0b101; // 0b开头,2进制
        int i = 10;
        int i2 = 010; // 0开头,8进制
        int i3 = 0x10F; // 0x开头,16进制

字符转换成数字后的输出

1
2
3
4
5
6
char c1 = 'a';
char c2 = '\u0061' // \u为转义字符 Unicode,后跟4位16进制的数字,有对应的字符

System.out.println(c1);
system.out.println((int)c1); // 强制类型转换
System.out。println(c2);

类型转换

由于Java是强类型语言,所以进行某些运算的时候,需要用到类型转换。


基本数据类型的优先级

1
2
// 低 --------------------------------------------> 高
byte, short, char, int, long, float, double
  • 虽然float是32位表示,long是64位表示,但浮点数优先级就是比整数高
  • 布尔类型不能进行强制转换
  • 对象类型不能转换为不相干的类型
  • 类型转换可能存在内存溢出或者精度问题

字符串连接符

String类型的操作数**+另外类型的操作数,会将其他类型的操作数都转换成Stirng类型**后再连接。

1
2
System.out.println("" + 2 + 3); // 输出23
System.out.println(2 + 3 + ""); // 输出5

变量、常量、作用域

变量 Variable

1
2
// 数据类型 变量名 = 值
type varName [=value] [{, varName[=value]}];
  • 可以使用逗号隔开来声明多个同类型的变量,但是不建议这样操作(后续查找、修改的操作会变得麻烦,可读性差)。

  • 变量的默认初始化

    • 基本数据类型:

      • 整数类型:0
      • 浮点数类型:0.0
      • 字符类型:’\u0000’
      • 布尔类型:false
    • 引用数据类型:

      默认初始化为空值null,如String。


作用域

  • 类变量:从属于类,使用关键字static修饰
  • 实例变量:从属于对象,需要创建出对象后,才能使用
  • 局部变量:位于方法中

e.g. 见Demo1.java文件


常量 Constant

  • 初始化后不能更改,使用关键字final修饰;

修饰符不存在先后顺序

e.g. 以下两种写法等效

1
2
public static final double PI = 3.14;
static public final double PI = 3.14;

变量和常量的命名规范

  • 变量

    • 首字母小写驼峰原则:monthSalary
    • 方法名的规范同变量名
    • 类名要求首字母大写和驼峰原则
  • 常量

    常量一般用大写字母和下划线命名,便于和变量区分,提高可读性;


Math类

很多运算,我们会使用一些工具类来操作。

  • pow(double a, double b)

    返回一个结果为$a^b$的double值


运算符

位运算符

位运算与普通的四则运算相比执行效率高很多,因为位运算是直接以计算机底层的运行机制为基础操作的。

  • &

  • |

  • ~ 取反

  • 移位运算符

    • << 左移

      每移1位,等效于*2

    • >> 右移

      每移1位,等效于/2


三元运算符x?y:z

如果x == true,结果为y,否则结果为z


包机制

为了更好地组织类,Java提供了包机制,用于区别类名的命名空间包的本质 == 文件夹

  • 一般利用公司域名倒置作为包名

    com.hunter

  • 包语句的语法格式

    1
    package package1[.pkg2[.pkg3...]];

    必须是类文件中的首句

  • 为了能够使用某一个包的成员,需要在Java文件中使用import语句明确导入该包

    1
    import package1[.pkg2...].(classname|*); // *是通配符,导入指定包下所有的类
  • 尽量不要让不同包下的类名重复

    同一个类文件中,无法使用位于不同包下相同类名的类(会报错)


JavaDoc生成文档

  • javadoc命令是用来生成API文档

  • 文档注释

    1
    2
    3
    4
    /**
    *
    *
    */
    • 加在类上就是类注释
    • 加在方法上就是方法注释
  • 参数信息

    • @auther 作者名
    • @version 项目版本号
    • @since 指明需要最早使用的jdk版本
    • @param 参数名
    • @return 返回值情况
    • @throw 异常抛出情况