01 Java基础 | 002 Java 语法

1. 变量

1.1 What
  • 基本存储单元。
  • 就像停车场的停车位,停车场是内存空间,而变量就是停车位,数据就是车,车是不固定的。
1.2 Why
  • Java是强类型语言(Strongly Typed),有两个含义:

    • 所有的变量在使用之前必须先声明,后使用。
    • 指定类型的变量只能接受类型与匹配的值。
  • 这意味着限制和约束,每个变量和表达式在编译时都有确定的类型。

    • 变量---->被赋的值
    • 表达式---->产生的值
    • 确定了在这些值上的一系列操作及含义。
1.3 How
1.3.1 声明
  • 声明语法

    • 数据类型 变量名 [ = 初始值 ];
  • 例子:

    int a, b, c; //声明了三个int类型的变量:a,b,c
    byte d; //声明了一个byte型的变量
    
  • 注意

    • 数据类型和变量名之间用 Space(空格)隔开
    • 每一条Java语句都要以“;”(英文分号)结尾
    • 一个语句中连续声明多个变量时,变量名之间“,”(英文逗号)隔开
    • 同一作用域下变量名不允许重复(身份证号不能重复)
    • 命名规范

作用域---->

  • 由类和方法(代码块)定义,伴随生命周期
  • 变量的可见性和声明周期
  • 规则为封装
  • 方法作用域:
    • 从方法开花括号“{”开始
    • 可嵌套
    • 变量生命周期被限制在作用域之内:数据(车)进入作用域创建变量(停车场),离开其作用域时销毁变量。
1.3.2 初始化
  • 初始化即赋初值

  • public class DemoVariate01 {
        /*
        main方法,程序执行的入口,固定格式
        */
        public static void main(String[] args){
            int a = 10; //声明并初始化int类型变量a
            int b = 8;
            int sum = a + b;//声明sum,并把a+b的值赋给sum
            System.out.println(a + "+" + b + "=" + sum); //打印输出 a+b=sum 结果是10+8=18
        }
    }
    
1.3.3 使用
  • 使用前必须

    • 声明(定义变量类型)
    • 初始化(赋初值)
  • public class DemoVariate01 {
        /*
        main方法,程序执行的入口,固定格式
        */
        public static void main(String[] args){
            int a = 10; //声明并初始化int类型变量a
            int b;
            int sum = a + b; //声明sum,并把a+b的值赋给sum
            System.out.println(a + "+" + b + "=" + sum); //打印输出 a+b=sum 结果出错,因为b没有初始化
        }
    }
    

2. 标识符&关键字

2.1 分隔符
  • 分号";"
    • 分隔语句
  • 花括号"{}"
    • 定义一个代码块
  • 方括号"[]"
    • 访问数组元素
  • 圆括号"()"
    • 定义方法时---->形参声明
    • 调用方法时---->传入实参
    • 表达式中---->优先计算
    • 类型转换中---->强制类型转换运算符
  • 空格(space)
    • 分割一条语句的不同部分
  • 圆点(英文句号)
    • 类/对象及其成员(成员变量、方法、内部类)之间的分隔符,表明调用某个类或某个实例的指定成员。
2.2 命名规范

给变量、类、方法以及包进行命名

  • 开头:

    • 字母
    • 下划线_
    • 美元符号$
  • 其他不部分:

    • 字母
    • 下划线_
    • 美元符号$
    • 数字 (不能作为开头)的任意组合
  • Java标识符大小写敏感、长度无限制

  • 不可以是Java的关键字

  • Java采用Unicode标准国际字符集(2个字节表示一个符号,2¹⁶=65536,中文一万多,英文26个字母,其他语言等等都可包含),而不是ASCII字符集(1个字节,1个字节2⁸=256)。故字母不仅仅包含英文,还包含汉字等等。但是不建议使用汉字。

2.3 关键字
abstract assert boolean break byte case
catch char class const continue default
do double else extends final finally
float for goto if implements import
imstanceof int interface long native new
null package private protected public return
short static strictfp super switch synchronized
this throw throws transient try void
volatile while

关键词不需要背,实战中自然熟悉

2.4 使用规范
  • 驼峰规则
  • 类:每个单词首字母大写,如Man
  • 方法或变量:第一个单词小写,从第二个字母开始首字母大写,如eat(),eatFood()

3. 数据类型

3.1 基本数据类型
3.1.1 数值型之整型
类型 宽度(占用存储空间) 范围 默认值
byte 1 字节 = 8 bit = 8 位二进制 -128~127 (byte)0
short 2 byte = 16 bit -2^15 ~ 2^15-1 (-32768~32767) (short)0
int 4 byte = 32 bit -2^31 ~ 2^31-1 (-2147483648~2147483647) 约21亿 0
long 8 byte = 64 bit -2^63 ~ 2^63-1 0L
  • Java整型常数三种表示形式

    • 十进制:99,-99,0
    • 八进制(以0开头):015
    • 十六进制(以0x或0X开头):0x15
  • 整型常数默认int型,声明long常量时后加"l"或"L",建议用大写L

    • long a = 5555; //不出错,在int范围内
      long b = 55555555555; //出错,超出int范围
      long c = 55555555555L; //不出错
      
3.1.2 数值型之浮点型
类型 占用存储空间 范围 默认值
float 4 byte -3.403E38~3.403E38 0.0f
double 8 byte -1.798E308~1.798E308 0.0d
public class DemoFloat {
    public static void main(String[] args) {
        double f1 = 314e2; //31400.0
        double f2 = 314e-2; //3.14
        float f = 0.1F; //0.1 浮点数默认是double型,给float赋值,需要在数后加“f”或“F”,一般是“f”
        double d = 1.0 / 10; //0.1
        System.out.println(f1 +"\n"+ f2 +"\n"+ f +"\n"+ d);
        float d1 = 423432423f;
        float d2 = d1 + 1;
        if (d1 == d2){ //判断d1 和d2 是否相等
            System.out.println("d1 == d2");
        }else{
            System.out.println("d1 != d2");
        }//输出是相等,所以浮点数1.不适合进行比较 2.不适合金融计算类精确的领域,存在舍入误差。大值计算用Java.math类下的BigInteger和BigDecimal,可处理任意长度的数值。
    }
}
3.1.3 字符型(char,默认值'\u0000'(null))
  • 单引号用来表示字符常量。

    • 'A'表示一个字符
    • "A"表示含有一个字符的字符串
  • char类型用来表示Unicode编码表中的字符(Unicode占2 byte,65536字符;ASCII占1 byte,128字符)。

  • char c1 = 97; //输出为a,因为其被赋值为整数97,该数值对应ASCII中的字母'a'
    char c2 = 'a';
    

    在Java中,char被当作整数类型,但因其主要用途是表示Unicode字符,故一般单独阐述。

3.1.4 布尔型(boolean,默认值false)
  • 表示逻辑值(true 或 false)

  • 所有关系运算(如a > b)返回boolean类型的值

  • if 和 for 这类控制语句的条件表达式需要boolean类型。

  • public class DemoBoolean {
        public static void main(String[] args) {
            boolean b = false; //声明和初始化boolean类型变量b
            System.out.println(b); //输出b的值 false
            b = true; //把true赋值给b
            System.out.println(b); //输出此时变量b的值 true
            if(b) System.out.println("是true"); //如果b是true则输出"是true"
            b = false; //把false赋值给b
            if(b) System.out.println("是true"); //如果b是true则输出"是true"
            System.out.println(10 > 9); //否则输出10>9的结果true
        }
    }
    
3.2 引用数据类型
  • 引用类型指向一个对象,不是原始值,指向对象的变量是引用变量。
  • 引用类型常见的有:String、StringBuffer、ArrayList、HashSet、HashMap等。
  • 暂时了解
3.3 基础数据类型和引用数据类型对比
对比 基本数据类型 引用数据类型
分配地址 在栈中进行分配 在堆中进行分配,堆的读写速度远不及栈
指向 变量名指向具体的数值 变量名指向存数据对象的内存地址,即变量名指向hash值
分配空间 变量在声明之后Java就会立刻分配给它内存空间 它以特殊的方式(类似C语言的指针)指向对象实体(具体的值),这类变量声明时不会分配空间,只是存储了一个内存地址
赋值 基本类型之间的赋值是创建新的拷贝 对象之间的赋值只是传递引用(值传递)
比较 "=="和"!="是在比较值 "=="和"!="是在比较两个引用是否相同,需要自己实现equals()方法
销毁 基本类型变量创建和销毁很快 类对象需要JVM去销毁

4. 数据类型转换

4.1 隐式类型转换
  • 奥义:从低级类型向高级类型转换,系统自动执行。

  • 按精度从低到高:byte < short < int < long < float < double。

  • int x = 10;
    float y = x; //输出结果为10.0
    
  • 转换层级规则

    操作数1数据类型 操作数2数据类型 转换后数据类型
    byte、short、char int int
    byte、short、char、int long long
    byte、short、char、int、long float float
    byte、short、char、int、long、float double double
  • 例子

    public class DemoChange {
        public static void main(String[] args) {
    
        byte myByte = 10;
        int myInt = 8;
        float myFloat = 8.4f;
        double myDouble = 10.101;
        char myChar = 97;
    
            System.out.println("byte类型与float类型运算:" + (myByte + myFloat)); //18.4
            System.out.println("byte类型与int类型运算:" + (myByte + myInt)); //18
            System.out.println("byte类型与char类型运算:" + (myByte + myChar)); //107
            System.out.println("char:" + myChar);//a,与字符串拼接会变成字符,运算会编程对应ASCII码
            System.out.println("int类型与char类型运算:" + (myInt + myChar));//105
            System.out.println("double类型与char类型运算:" + (myDouble + myChar));//107.101
    
        }
    
    
4.2 显式类型转换
  • 语法

    • (类型名)要转换的值
  • 例子

    int a = (int)45.23; //此时a的值为45
    long b = (long)456.6f; //此时b的值为456
    int c = (int)'a'; //此时c的值为97
    

5. 注释

注释不会被执行,Java中有三种类型注释

  1. 单行注释
    • " // "开头,之后内容
  2. 多行注释
    • 以" /* " 开头,以" */ "结尾
    • 不可嵌套(无意义)
    • 可做行内注释
  3. 文档注释
    • 以" /** "开头,以" */ "结尾
    • 可生成项目的API

案例:

/**
	*这里是文档注释
	*/
	public class Welcome{
		public static void main/*这里是行内注释*/(String[] args){
		
			//下面是打印语句。输出双引号中的内容
			System.out.println("我是Brucejin!");
			System.out.println("你好!");
			/*
			前进!
			无所畏惧
			*/
			System.out.println("加油!");
		}
	}
posted on 2020-10-21 15:23  Bruce_Jin  阅读(149)  评论(0)    收藏  举报