hongmeiaoxue

 p22 标识符和关键字

1、标识符
凡程序员自己有权命名的标识都是标识符,标识符可以用做标识什么:
    类名
    方法名
    变量名
    接口名
    常量名
    引用名
    ... ...
2、标识符命名规则:
  规则1:标识符只能由 字母abc、中文、数字123、下划线_ 、美元符$ 组成,不能含有其它符号
  规则2:不能以数字开头
  规则3:不能是关键字
  规则4:严格区分大小写(对于大小写不同的同名类,win会视为重名,因此无法全部编译)
  规则5:标识符理论上没有长度限制
3、标识符的命名规范:
  规范1:见名知义
  规范2:遵循驼峰命名方式
  规范3:类名、接口名首字母大写
  规范4:变量名、方法名首字母小写
  规范5:常量名全部大写,单词之间使用下划线_连接

4、关键字
在SUN公司开发java语言的时候,提前定义好了一些具有特殊含义的单词,这些单词全部小写,具有特殊含义,不能用作标识符

package import class(类) interface(接口) //头
public protected(受保护的) default private static final(最终的) abstract //修饰符
extends(继承) implements(实现接口) //声明
new(创建对象) instanceof(实例运算符) //运算符
this(当前类的) super(父类的) //引用
byte short int long float double char boolean void(无返回值) String(字符串) //数据类型
if else switch case do while for break continue goto return //流程控制

Scanner System(系统的) Arrays(数组类) Math(数学类)【random()】 //类库类

 


 

p26变量、常量、作用域

1、字面量
软件执行过程中主要就是对数据的处理,“字面量”的概念就是具体而明确的数据,在java语言中“数据”被称为字面量/字面值
字面量的种类可以分为:
  整型字面量:1 2 3 10 100 -100 -200 ...
  浮点型字面量:1.0 1.2 3.14 ...
  布尔型字面量:true false   
  字符型字面量:\'a\' 、\'b\' 、\'人\' 、\'中\'
  字符串型字面量:"a" 、"abc" 、"123" 、"中国" 、
- 其中字符型和字符串型都是描述了现实世界中的文字
- 字符型只能是单个字符
- 所有字符型只能使用单引号 \' \' 包围,所有字符串型只能使用双引号 "" 包围
- 单引号的一定是字符型,双引号的一定是字符串型

2、变量

1)变量就是可以改变赋值的标识符,表示计算机里的一块存储空间
2)变量实际是内存当中存储数据的最基本单元,变量就是一个存储数据的盒子
3)java是强类型语言,每个变量都必须声明类型,可以是基本类型,也可以是引用类型

4)变量包括三要素:
  类型 + 名称 + 值
  数据类型:决定开辟空间的大小
  变量名: 程序通过名称访问变量
  值:   是变量保存的数据
5)声明变量的语法格式:
    数据类型 变量名 = 值;
    type varName = value;

注意事项:

- 一行上可以声明多个同类型变量用逗号 , 间隔
- 变量必须初始化之后,才能使用
- 变量声明是一条完整的语句,因此声明必须以分号 ; 结束

3、作用域
1.1、作用域就是变量的有效范围作用范围
1.2、变量的作用域从属于大括号
1.3、同一个域中变量不能有重名
1.4、不同域的同名变量的访问遵守就近原则,即访问最近作用域的那一个
1.5、不同的作用域大致有:
  类体域
  方法体域
  循环体域
2、变量的分类:
1)静态变量  static修饰,从属于类,可以不用手动初始化,在加载字节码时系统会用默认值初始化
2)实例变量  写在类体中,无static修饰,从属于对象,可以不用手动初始化,在创建对象时系统会用默认值初始化
3)局部变量  写在方法体和循环体里,从属于方法/循环,必须手动初始化之后,才能访问
注意:
- 所有的变量都必须初始化之后才能使用,变量在使用之前必须初始化
- final修饰的成员变量必须手动初始化,因为final修饰的成员变量的值不能修改,sun规定不能使用系统默认值

示例1:按照作用域变量的分类

public class VariableTest{
    int x = 20;    //实例变量
    static int y = 200;    //静态变量
    public static void sum(int a,int b){    //局部变量a b
        int firstNum = 100;    //局部变量
    }    
}
View Code

示例2:不同作用域变量的访问方式区分

public class Test {

    //成员变量
    static double salary = 2500;    //实例变量
    static final double PI = 3.14159265358979;    //常量

    //实例变量
    int i;    
    char c;
    boolean flag;
    String name;

    public static void main(String[] args) {
        int j = 0;    //局部变量
        Test t = new Test();    //引用也是局部变量
        
        System.out.println(Test.salary);    //类名访问
        System.out.println(PI);        //..
        System.out.println(t.i);    //对象引用访问
        System.out.println(t.c);    //..
        System.out.println(t.flag);    //..
        System.out.println(t.name);    //..
        System.out.println(j);        //直接访问
    }
}
View Code

 


 

p23 数据类型

1、数据类型用来定义变量,程序运行过程中根据不同的数据类型分配不同大小的内存空间
java的数据类型分为两大类,基本数据类型和引用数据类型,java中除了基本数据类型之外,剩下的都是引用数据类型

2、数据类型分类
2.1、基本类型(primitive type):
    1)数值类型:
      1》整数型:
        1> byte  占1个字节范围   [-27~27-1]  [-128~127]
        2> short   占2个字节范围   [-215~215-1]  [-32768~32767]
        3> int  占4个字节范围   [-231~231-1]  [-2147483648-2147483647]
        4> long    占8个字节范围   [-263~263-1] 
      2》浮点型:
        5> float  占4个字节 [-231~231-1] 
        6> double 占8个字节 [-263~263-1] 
      3》字符型:
        7> char 占2两字节  [0~216-1]  [0~65535]

    2)布尔类型/逻辑类型:
        8> boolean  占1位,只有两个值true和false

2.2、引用类型(reference type):
    1》类
    2》接口
    3》数组

注意:
  字符串类型String是引用数据类型
  long类型要在数字后面加个L
  float类型要在数字后面加个F
  java官方规定,char字符型数据只能是单个字符,由单引号包围;String字符串型数据用双引号包围
  所有字符本质还是数字,可以参与数字运算

  位: 是计算机内部数据存储的最小单位
  字节:是计算机中数据处理的基本单位,一般用大写B表示,1B=8位
  字符:是指计算机中使用的字母、数字、字和符号。以二进制代码形式在计算机内存放,是数据结构中最小的数据存取单位,通常由8个二进制位(1个字节)来表示一个字符。

 

 

 


p24 数据类型详解扩展

1、整数型:
1.1、 java中整型数据有4中表示形式:

  - 十进制数(0-9),二进制数以0b开头(0-1),八进制数以0开头(0-7 ),十六进制数以0x开头(0-9 A-F )
  - 十进制数满是进位,二进制数满2进位,八进制数满8进位,十六进制满16进位
1.2、十进制与二进制的快速转换
 1)、十进制转换成二进制
  短除法:十进制数与2相除取余,将余数倒序输出,就是对应的二进制数
  幂算法:枚举十进制数包含的幂2n,使幂的上标与二进制位次一一对应(位次=0 1 2 ...),将对应位次上的值设为1,就是对应的二进制数
 2)、二进制转换成十进制
  幂算法:将二进制数中位次上的1转换成对应的十进制幂2n,二进制的位次与十进制幂的上标一一对应(n=0 1 2 ...),求所有幂之和,就是对应的十进制数
  3)、十进制幂与二进制位次对照
  28  27  26   25  24 23 22 21 20
  256  128   64   32  16 8   4   2   1
  1    1  1  1  1  1   1   1   1

1.3、byte类型的最大值是怎么计算出来的?
  byte在内存中占1个字节,即8个比特位
  在计算机当中二进制数的最高位是符号位,0正1负,所以1byte可以存储的最大值是:0111 1111
  故byte的取值范围为1000 0000 到 0111 1111
  char没有负值,占两个字节,所以最小值为0,最大值为1111 1111 1111 1111,故取值范围是0~2^16-1(65535)

2、浮点型
  浮点型数据:存在 有限、离散、舍入误差、大约、接近但不等于 等特点,最好避免完全使用浮点数进行比较。银行业务使用 BigDecimal 数学工具类
如:float f = 0.1f;
  double d = 0.1d;
  但是 f == d :false

3、字符型:

3.1、什么是字符编码?
- 字符编码是人为定义的一套转换表
- 在字符编码中规定了一系列的文字对应的二进制
- 字符编码的本质就是一本字典,描述了文字与二进制的对照关系
- 字符编码涉及编码和解码两个过程,编码和解码必须采用同一套字符编码方式,不然就会出现乱码
- ASCII码采用1byte进行存储,java语言为了支持全球所有的文字,采用了一种字符编码方式,即unicode编码
- 主要的编码方式有以下几种:
  ASCII(\'a\'-->97 \'A\'-->65 \'0\'-->48)
  ISO-8859-1
  GB2312
  GBK
  GB18030
  Big5
  unicode(utf8 utf16 utf32)

3.2、转义字符:反斜杠:\  具有转义功能
 1)执行特殊功能
  \t   tab
  \n  换行
  \r   回车 移到行开头
  \b  退格 向左退一列
  \a  响铃
 2)将连接的字符作为普通文本处理
  \\'  一个单引号字符,不能自动配对
  \"  一个单双号字符,不能自动配对
  \\  一个反斜杠字符
  \u0000   空字符,\u连接一个4位十六进制编码,表示后面是一个字符的unicode编码

 

示例1:整数的4类表达形式,十进制数满是进位,二进制数满2进位,八进制数满8进位,十六进制满16进位

//十进制数满是进位,二进制数满2进位,八进制数满8进位,十六进制满16进位
public class Test{
    public static void main(String[] args) {
        int a = 10;
        int b = 0b10;
        int c = 010;
        int d = 0x10;
        System.out.println(a+"\t"+b+"\t"+c+"\t"+d);
    }
}
View Code

 


 

p25 类型转换

1、由于java是强类型语言,不同类型的数据要先转换为同一种类型,然后再进行运算。

类型容量大小排序:
低-----------------------------------------------------高
byte < short、char < int < long < float < double

3、类型转换:
1)布尔型不能进行类型转换
2)任何浮点类型都比整数型容量大
3)java语言中,整型数字被默认当作int类型来处理,浮点型字面值默认当作double类型来处理
4)如果整型字面值没有超出 byte、short、char的取值范围,就可以直接赋值给 byte、short、char类型的变量
5)byte、short、char混合运算时,会先各自转换成 int类型,再作运算
6)多种数据类型混合运算时,会先各自转换成容量大的那一种数据类型,再做运算
7)float,double类型在计算机中存储的是近似值
8)小容量向大容量转换时称为自动类型转换
9)大容量向小容量转换时,需要强制类型转换,否则会编译错误,类型用小括号()包围
10)强制转换可能会超出类型范围产生内存溢出

//示例枚举:

//赋值正确,因为数值20、1000没有超出byte、short类型的范围
byte a = 20;
short b = 1000;
int c = 1000;
//正确,可以自动转换
long d = c;
//错误,出现精度丢失问题
int e = d;
//正确,将long强制转换成int类型,值1000没有超出int范围,所以转换正确
int e = (int)d;
//10和3默认为int,运算后的最大类型也是int,所以正确
int f = 10/3;
long g = 10;
//错误,多个数据运算时,java会转换成容量最大的类型,运算后最大的类型是long,h为int,所以会出现精度丢失问题
int h = g/3;
//正确,强制类型转换后,结果没有超出int范围
int h = (int)g/3;
//可以用long类型来接收运算结果
int h = g/3;
//错误,优先级问题,将g转换成int类型,然后又转换成byte类型,再和3运算,运算的结果是int类型,所以会出现精度丢失问题
byte h= (byte)(int)g/3;
//正确
byte h= (byte)(int)(g/3);
//错误,出现精度丢失问题
byte h= (byte)g/3;
//正确,运算结果没有超出byte范围
byte h= (byte)(g/3);
//正确,运算结果没有超出short范围
short h= (short)(g/3);
short i = 10;
byte j = 5;
//错误,short和byte运算,首先会转换成int再运算,所以结果是int类型,出现精度丢失问题
short k = i + j;
//可以将结果强制转换成short
short k =(short) (i + j);
//也可以用int类型接收
int k = i + j;
char l = \'a\';
System.out.println(l);//a
//输出是97,是a的ascii码
System.out.println((byte)l);
int m = l+100;
//输出是197,获取a的ascii码值后再进行运算
System.out.println(m);
double n = 10/3; 
System.out.println(n); //3.0
double n = 10.0/3; 
System.out.println(n); //3.33333333333

 

 

 


补充知识:

1.1、补码:
- 在计算机底层存储的数据,永远是二进制的补码形式,因为补码形式效率最高
1.2、什么是补码?
- 二进制有:原码、反码、补码
- 正数的二进制的原码、反码、补码是完全相同的
  如:byte i = 1;
  对应的二进制原码:0000 0001
  对应的二进制反码:0000 0001
  对应的二进制补码:0000 0001
- 负数的二进制的原码、反码、补码,符号位不变,其它位则取反或补1
  如:byte i = -1;
  对应的二进制原码:1000 0001
  对应的二进制反码(取反):1111 1110
  对应的二进制补码(反码+1):1111 1111
1.3、可以采用逆推导的方式获取二进制的原码
  例:(byte)150
  首先150是int类型二进制码是:
  00000000 00000000 00000000 00000000 10010110
  强转为byte类型后二进制码是:
  10010110
  计算机存储的都是二进制的补码形式,可以采用逆推的方式获取原码:
  10010110--->二进制补码形式
  10010101--->二进制反码形式
  11101010--->二进制原码形式(-106)

 


 

练习题:

1、 通过变量来描述学生的信息

/*
通过变量来描述学生的信息,学生信息包括:学号、姓名、性别、身高。
其中学号采用整数,姓名采用字符串,性别采用字符型,身高采用浮点型。
具体的学生数据有两份,第一个学生信息是:学号110,姓名张三,性别男,身高1.85米。
第二个学生信息是:学号120,姓名李四,性别女,身高1.65米。
要求最终将学生的信息输出到控制台
*/
public class StudentMessage{
    public static void main(String[] args){
        int id = 110;
        String name = "张三";
        char sex = \'男\';
        double height = 1.85;
        
        System.out.println("学号:" + id);
        System.out.println("姓名:" + name);
        System.out.println("性别:" + sex);
        System.out.println("身高:" + height + "米");
        System.out.println("-------------------");
        
        int id1 = 120;
        String name1 = "李四";
        char sex1 = \'女\';
        double height1 = 1.65;
        
        System.out.println("学号:" + id1);
        System.out.println("姓名:" + name1);
        System.out.println("性别:" + sex1);
        System.out.println("身高:" + height1 + "米");
    }
}
View Code

 

 

 

 

2021-12-08

分类:

技术点:

相关文章:

  • 2021-09-14
  • 2021-12-15
  • 2021-11-30
  • 2022-12-23
  • 2021-10-18
  • 2021-06-19
  • 2021-05-15
  • 2021-10-30
猜你喜欢
  • 2021-05-27
  • 2021-11-16
  • 2021-06-14
  • 2021-06-02
  • 2022-12-23
  • 2021-11-16
  • 2022-01-07
相关资源
相似解决方案