【Java基础教程】1. 关键字、变量、数据类型

1、关键字、变量、数据类型


  1. 关键字和保留字

    定义:被Java语言赋予特殊含义,有专门用途的字符串

    特点:关键字中所有字母都为小写

关键字列表

  • 数据类型 classinterfaceenumbyteshortintlongfloatdoublechar,boolean,void
  • 流程控制 ifelseswitchcasedefaultwhiledoforbreakcontinuereturn
  • 访问权限 publicprotectedprivate
  • 定义类 abstractfinalstaticsynchronized
  • 类与类之间的关系 extendsimplements
  • 类实例相关 newthissuperinstanceof
  • 异常处理 trycatchfinallythrowthrows
  • 包相关 packageimport
  • 其他关键字 nativestrictfptransientvolatileassert
  • 值关键字 truefalsenull

保留字

gotoconst

保留字、关键字不能被使用

  1. 标识符 Identifier (变量、方法、类)

    Java对各种变量、方法和类等要素命名时使用的字符序列成为标识符

    技巧:凡是自己可以起名字的地方都教标识符

    定义合法标识符的规则

    • 由26个英文字母大小写、0-9、_或$组成
    • 不能以数字开头
    • 不可以使用关键字和保留字、但可以包含
    • Java中严格区分大小写,长度无限制
    • 标识符不能包含空格
  1. Java中的名称命名规范

    • 包名: 多个单词组成时所有字母都小写: myproducttest
    • 类名、接口名:多个单词组成所有单词首字母大写: MyProductTest
    • 变量名、方法名:首字母小写、其他单词首字母大写: myProductTest
    • 常量名:所有字母都大写,多个单词用下划线分割:MY_PRODUCT_TEST

在起名字时,为了提高阅读性,要尽量有意义,“见名知意”

java采用unicode字符集,因此标识符也可以使用汉字声明,但不建议使用

可以看看《代码简洁之道.pdf》

  1. 变量

    概念:内存的一个存储区域,该区域的数据可以在同一类型范围内不断变化。变量是程序中最基本的存储单元。包含变量类型、变量名和存储的值。

    作用:用于在内存中保存数据

    注意事项

    • Java中每个变量都需要先声明后使用
    • 使用变量名来访问这块区域的数据
    • 变量的作用域:其定义所在的一对{}
    • 变量有在其作用域内才有效
    • 在同一个作用域内,不能定义重名变量
    public class myTest {
         public static void main(String[] args) {
                 int myAge = 12;
             System.out.println(myAge);
          
             // System.out.println(myNumber);
             // 在使用myNumber之前未定义
          
             int myNumber;
             // System.out.println(myNumber);
             // 使用myNumber之前必须初始化
          
             myNumber = 1001;
             System.out.println(myNumber);   
          
             // int myAge = 11; 在同一个作用域下重复定义变量
        }
    }
    
  1. 变量的类型

    基本数据类型 primitive type

    数值型: byte(1字节)short(2字节)int(4字节)long(8字节)

    浮点型float(4字节)、double(8字节)

    字符型char(2字节)

    布尔型boolean(1字节)

    1字节等于 8bit

引用数据类型 reference type

class

接口: interface

数组[]

public class Test {
     public static void main(String[] args) {
        // 1、 整型
                 byte b1 = 12;
         byte b2 = -128;
         // b2 = 128; 超出范围会报错
         System.out.println(b1);
         System.out.println(b2);
      
         short s1 = 128;
         // 通常定义整数时,使用int型
         int i1 = 1234;
         //声明long型变量,必须以'l'或者"L"结尾
         long l1 = 123456L;
         System.out.println(l1);
      
         // 2、浮点型 不要求精度可以使用
       // 通常定义浮点型变量时,使用double型
      
         // 单精度 4 字节 float
         // 声明float型变量必须以'f'或者"F"结尾
         float f1 = 12.3F; //如果不加F/f 会报错 <不兼容的类型>
         System.out.println(f1);
      
         // 双精度 8 字节 double
         double d1 = 123.3;
         System.out.println(d1 + 1);

         // 3、字符型 char (一个字符=2字节)
        // 声明char型变量,通常使用一对''
         char c1 = 'a'; 
         // c1 = 'AB'; 错误!字符型只能写一个字符
         System.out.println(c1);
             char c2 = '1';
         char c3 = '中';
         System.out.println(c2);
       System.out.println(c3);
      
         char c4 = '\n';
         System.out.print("hello" + c4);
         System.out.println("world");
      
         // 4、布尔类型 boolean
         // 只有两个值 true 和 false
         boolean bool1 = true;
         // bool1 = false;
         System.out.println(bool1);
         
         boolean isMarried = true;
         if(isMarried) {
             System.out.println("不能参加单身party了");
        } else {
             System.out.println("你可以多谈谈朋友");
        }
    }    
}
  1. 类型转换 **

    自动类型转换(提升)

    前提: 这里讨论的只是7中基本数据类型之间的运算,不包含boolean类型

    类型从小到大会自动提升类型 例如 byte => short/int/long/float/double

    特别的: 当bytecharshort三种类型的变量做运算时,结果为int

    整型运算时 凡事"小于"int型的运算 都以int 类型变量接收结果

    class Test {
         public static void main(String[] args) {
                 byte b1 = 2;
             int i1 = 129;
                 int i2 = b1 + i1;
             long l1 = b1 + i1;
             System.out.println(i2);
          
             float f = b1 + i1;
             System.out.println(f);
             
             short s1 = 123;
             double d1 = s1;
             System.out.println(d1);
          
             char c1 = 'a';
             int i3 = 10;
             int i4 = c1 + i3;
             System.out.println(i4);
          
             byte b2 = 3;
             short s2 = 123;
          
             // short s3 = b2 + s2;  // 会报类型错误 b2 + s2自动升类型为int
          
             // 只能使用int 以及 "大于" int 容量的数据类型接收结果
             int i5 = b2 + s2;
             long l2 = b2 + s2;      
        }
    }
    

强制类型转换

需要使用`()`作为强转符 

数据类型容量 由高转低 

由高转低强转类型 可以能会中造成数据精度问题、数据截断问题

class Test {
    public static void main(String[] args) {
        // 精度损失
        double d1 = 12.3;
        int i1 = (int)d1;
        System.out.println(i1); // 12
      
          // 精度损失
        int i2 = 128;
        byte b = (byte)i2;
        System.out.println(b); // -128
    }
}

数据类型转换扩展

class Test {
    public static void main(String[] args) {
        long l = 123123; // 如果不写L 相当于 将int 123123 自动转换成了long 
                System.out.println(l);
                
          // long l1 = 123123123213222123; //编译失败过大整数,超过了int的容量范围并未有'L'的long型标记
        long l1 = 123123123213222123L;
            
        // float f1 = 12.3;// 编译失败,12.3会被当做double类型,需要强制类型转换
      
        // 整数常量,默认类型为int型
        // 浮点型常量,默认类型为double型
        byte b = 12;
        // byte b1 = b + 1; // 编译失败,1是整数常量 int 高转低需要强制转换 否则报错
        // float f1 = b + 12.3 // 编译失败,12.3 是浮点型常量 double 高转低需要强制转换 否则报错
    }
}
  1. String类型

String 类型是引用数据类型,声明String类型变量是使用一对""

String类型可以和8种基本数据类型进行运算,且运算只能是连接运算"+",运算结果仍然是String类型

class Test {
    public static void main(String[] args) {
        String s1 = "Hello World";
        System.out.println(s1);
      
        String s2 = "a";
        String s3 = "";
        
        int number = 1001;
        String numberStr = "学号:"
        String info = numberStr + number; // 连接运算
        System.out.println(info);
    }
}
  1. 变量之进制

所有数字在计算机底层都以二进制形式存在。

对于整数有四种标识方式

  • 二进制(binary): 0 / 1 ,满二进一。以0b或者0B开头。
  • 十进制(decimal): 0-9, 满十进一。
  • 八进制(octal):0-7,满八进一。以0开头。
  • 十六进制(hex):0-9A-F,满十六进一。以0x或者0X开头。A-F不区分大小写
class BinaryTest {
    public static void main(String[] args) {
        int num1 = 0b110; // 二进制
        int num2 = 110;     // 十进制
        int num3 = 0127;    // 八进制
        int num4 = 0x124A;// 十六进制
        
        System.out.println(num1);
        System.out.println(num2);
        System.out.println(num3);
        System.out.println(num4);
    }
}

二进制

Java整数常量默认是int类型,当用二进制定义整数时,其第32位是符号位;当是long类型时,二进制默认占64位,第64位是符号位。

二进制的整数有如下三种形式

  • 原码:直接将一个数值转换成二进制数,最高位是符号位。
  • 负数的反码:是对原码按位去反,只是最高位(符号位)确定为1。
  • 负数的补码:其反码加1。

计算机以二进制补码的形式保存所有的整数

  • 整数的原码、反码、补码都相同
  • 负数的补码是其反码+1

二进制转十进制

正数二进制 按位次幂相加

负数二进制一般都是补码,负数需要反推 ,补码 - 1 取反 求出原码 按位次幂相加

十进制转二进制

用一个数不停的除以二取余,得到的结果逆向就是二进制

你可能感兴趣的:(【Java基础教程】1. 关键字、变量、数据类型)