java基础课堂笔记01 - 基础概念课时2

 p22 标识符和关键字

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

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

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

String(字符串) Scanner System(系统的) Arrays(数组类) Math(数学类)  //类库的引用数据类型

 


 

p26变量、常量、作用域

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

2、变量
  - 变量就是可以改变赋值的标识符,表示计算机里的一块存储空间
  - 变量实际是内存当中存储数据的最基本单元,变量就是一个存储数据的盒子
2.1)变量包括三要素:
  类型 + 名称 + 值
  数据类型:决定开辟空间的大小
  变量名: 程序通过名称访问变量
  值:   是变量保存的数据

2.2)声明变量的语法格式:
    数据类型 变量;
    数据类型 变量名 = 值;
    type varName = value;
    数据类型 变量1,变量2,变量3 ... ;
    数据类型 变量1 = 值,变量2 = 值,变量3 = 值 ...;
2.3)注意要点:
  1)声明变量必须声明类型,可以是基本类型,也可以是引用类型
  2)变量声明是一条完整的语句,因此必须以分号 ; 结束
  3)一行上可以声明多个变量,相同类型变量使用逗号 , 间隔
  4)声明变量同时可以初始化变量,变量必须初始化之后,才能使用

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

 

练习题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

 


 

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》数组

3、注意:
1)java语言中,整型字面量程序默认当做int类型来处理,浮点型字面量默认当做double类型来处理
2) long类型要在数字后面加个L/l
  float类型要在数字后面加个F/f
  double类型可以在数字后面加个d,也可以省略
3)float,double类型在计算机中存储的是近似值,因此要避免完全使用浮点数进行比较
4) java官方规定,char字符型数据只能是单个字符,由单引号包围
  所有字符本质还是数字,可以作为整型数据处理
5)字符串类型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(latin-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类型的变量,因为类型不兼容会编译错误

6)参与运算的数据必须是同一种类型,相同类型数据的运算结果的类型保持不变
7)byte、short、char类型混合运算时,会先各自转换成 int类型,再作运算
8)多种数据类型混合运算时,会先各自转换成容量大的那一种数据类型,再做运算
9)小容量向大容量转换时称为自动类型转换
10)大容量向小容量转换时,不会自动转换,需要强制类型转换,否则类型不兼容会编译错误
11)强制类型转换用小括号()包围,强制转换可能会超出类型范围产生精度损失

 

//示例列举:
//正确,整数没有超出byte、short、char类型的范围,可以直接赋值
byte a = 10;
short b = 30;
char c = 97; //‘a’
char c1 = ‘b’; //98
int d =100;
//错误,int类型的变量,无法直接传值给byte、short、char类型,因为类型不兼容,需要强制类型转换
byte a = d; short b = d; char c = d;
//正确,运算的结果是int类型,数据的运算结果的类型保持不变
d= 10/3;
//错误:类型不兼容,因为不同类型混合运算时,先自动转换成容量大的数据类型,所以右侧是int类型
a = a + 5;
//正确,等同于a = (byte)(a + 5); 扩展运算符最终不改变变量的数据类型
a += 5;

//正确,字符的本质还是数字,参与运算的是字符的ascii码
int d1 = a + b + c; int d2 = a + b + c1;
//错误,byte、short、char混合运算的结果是int类型,所以会出现类型不兼容
short b1 =a + b + c;

long e = 1000;
//错误,需要强制类型转换
int f = e;
//错误,数值过大超出int类型范围,需要转换为长整型数值2147483648L
long g = 2147483648;
long g = 10;
//错误,不同类型混合运算,结果是long类型,不能赋值给int类型
int h = g/3;
//正确,可以通过强制类型转换的方式处理
int h = (int)g/3;
//正确,也可以用long类型来接收运算结果
long h = g/3;
//错误,将g转换成int类型,然后又转换成byte类型,再和3运算,运算的结果还是int类型,仍然类型不兼容
byte i = (byte)(int)g/3;
//正确,类型转换也要处理好优先级问题
byte i = (byte)(int)(g/3);
//正确,字符的本质是数字,输出是字符的ascii码
System.out.println((byte)c);
//正确,字符的本质是数字,输出是数字ascii码对应的字符
System.out.println((char)d);
//正确,先获得整型的结果,后自动类型转换
//double m = 10/3; 
System.out.println(m);   //3.0 
//正确,计算的结果是浮点型,混合类型计算,先各自统一类型,后进行计算
double n = 10.0/3; 
System.out.println(n);   //3.33333333333

 


 

p27 运算符

java语言支持以下运算符:
1、算术运算符: + - * / % ++ --
2、关系运算符: > < >= <= == != instanceof
3、逻辑运算符: & | ! && || !
4、赋值运算符: =
5、扩展赋值运算符: += -= *= /= %= ^= &= |= <<= >>=
6、条件运算符: ?:
7、字符串连接运算符: +
8、位运算符 : & | ^ ~ << >> >>>
9、new运算符:创建对象

说明:

1、算术运算符:
1.1、 %  模运算,取余,%10 可用于提取个位上的数字
1.2、 /    除运算,/10 /100取整 可用于提取个位/百位及前面的所有数字
1.3、 ++ 自减,单目运算符/一元运算符,a++ 先运算,后自加; ++a 先自加,后运算
1.4、 --  自减,单目运算符/一元运算符,a-- 先运算,后自减; --a 先自减,后运算

2、关系运算符:
  通常用于布尔表达式,它的运算结果通常是一个布尔类型boolean
3、逻辑运算:
  要求两边的算子都是布尔类型,并且最终的运算结果也是一个布尔类型boolean
  &   逻辑与  两边都是true,结果才是true,否则为false
  |  逻辑或  一边是true,结果就是true,两边都是false,结果才是false
  !  逻辑非  取反,假为真,真为假
  &&  短路与  全真为真 有假为假
  ||  短路或  有真为真 全假为假

4、赋值运算符:
4.1、= 赋值运算符右边优先级比较高,先执行右边的表达式,然后将右边表达式的结果赋给左边的变量(赋值)

4.2、扩展赋值运算符理解为:+= 累加递增, -= 追减递减 ......
4.3、使用扩展赋值运算符的变量必须先初始化,要有一个初始值才能使用扩展赋值运算符
4.4、扩展赋值运算符一定不会改变左边变量的数据类型,其运算过程等同于将四则运算的结果进行了强制类型转换
  如:byte a = 10;
    a += 5;    //等同于a = (byte)(a + 5); 最终不改变a的数据类型
    long x = 20L;
    int y = 10;
    y += x;    //等同于y = (int)(y + x); 最终不改变y的数据类型

5、位运算符:
&    按位与  全1为1 有0为0
|     按位或  有1为1 全0为0
^    按位异或  相异为1 相同为0 
~    按位取反 0为1 1为0  单目
<<  左移  相当于 *2
>>  右移  相当于 /2

>>> 无符号右移

6、条件运算符/三元运算符/三目运算符:?:
6.1、语法格式:
    布尔表达式 ? 表达式1 : 表达式2
6.2、 它的执行原理是:
  * 布尔表达式的结果为true时,表达式1的执行结果作为整个表达式的结果,即返回表达式1的值
  * 布尔表达式的结果为false时,表达式2的执行结果作为整个表达式的结果,即返回表达式2的值
  * 条件运算符只是一个运算符,参与数据运算之后返回一个值,不是一个完整的java语句

6.3、排错示例列举:
boolean sex = true;
//正确
char c = sex ? '男' : '女';
String s = sex ? "男" : "女";
//错误,条件运算符不是一个完整的java语句
sex ? '男' : '女';   
//错误,类型不兼容,因为结果可能是String,也可能是char,不能用char类型接收
char c = sex ? "男" : '女';  
//正确,两种类型的结果都可以输出
System.out.println(sex ? "男" : '女');

7、字符串连接符:+
7.1、什么时候求和运算?什么时候进行字符串拼接?
  数据按照自左向右的顺序进行运算,当“+”运算符两边都是数字时,一定进行加法运算;当运算符任意一边是字符串类型时,一定进行字符串拼接操作,并且连接运算的结果还是一个字符串
7.2、字符串与变量拼接的口诀:加一个双引号“”,然后中间加两个加号++,然后中间加变量
  如:int a = 10;
    int b = 20;
    System.out.println("30" + a + b); //301020
    System.out.println(a + b + "30"); //3030

8、其它运算符:
new:创建对象
instanceof:实例运算符

 

练习题1:自加自减运算符的使用

public class Homework{    
    public static void main(String[] args){
        int x = 10;
        int a = x + x++;    //代码执行结束后,x就是11
        System.out.println("a = " + a);    //20
        System.out.println("x = " + x);    //11
        int b = x + ++x;    //代码执行结束后,x就是12
        System.out.println("b = " + b);    //23
        System.out.println("x = " + x);    //12
        int c = x + x--;    //代码执行结束后,x就是11
        System.out.println("c = " + c);    //24
        System.out.println("x = " + x);    //11
        int d = x + --x;    //代码执行结束后,x就是10
        System.out.println("d = " + d);    //21
        System.out.println("x = " + x);    //10
    }
}
View Code

 

 


补充知识:

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)

 

2、java中的标点符号全部使用英文格式,那么java中有哪些标点符号?分别是什么作用呢?
1  , 号  多个变量间隔,多个实参形参间隔,数组元素间隔
2  . 号  包目录层级,引用对象的属性和方法
3  : 号  标签,case分支
4  ; 号  语句结束符
5  () 小括号  if switch while for语句头,方法头
6  {} 大括号  代码块语句的起始结束符,包括if switch的分支代码块,while for的循环体代码块,方法体代码块,类体代码块,接口体代码块,数组元素
7  [] 中括号  声明数组

 


 

 

 

 

//即使再小的帆也能远航2021-12-08

posted @ 2021-12-08 21:37  冬雪雪冬小大寒  阅读(58)  评论(0编辑  收藏  举报