java2

02.01_常量的概述和使用

  • A:什么是常量
    • 在程序执行的过程中,它的值不可以发生改变。
  • B:Java中常量的分类
    • 字面值常量
    • 自定义常量
  • C:字面值常量分类
    • 字符串常量
      • 用双括号引起来的内容
    • 整数常量
      • 所有整数
    • 小数常量
      • 所有小数
    • 字符常量
      • 用单引号括起来的内容,里面只能放单个数字,单个字母或者单个符号
    • 布尔常量
      • 只有true和false
    • 空常量
      • null
  • D:案例演示
class Demo1_Constant {
	public static void main(String[] args) {
		System.out.println("abc");    //字符串常量
		System.out.println(123);      //整数常量
		System.out.println(12.3);     //小数常量
		//System.out.println('10');   //''中必须放的是单个字符,10表示的是字符1和字符0
		//System.out.println('');     //''中什么也不放,也是不可以的,因为代表不了任何字符
		System.out.println(' ');      //代表空格字符
		System.out.println(true);     //boolean类只有两个值,true和false
		System.out.println(false);   
	}
}

02.02_进制概述

  • A:什么是进制
    • 进制就是进位制,是人们规定的一种进位方法。对于任意一种进制——x进制,表示运算时是逢x进一位。
  • B:十进制的由来
    • 十进制的由来是因为人类有十个手指头。早期人们在计算物体个数的时候,用一个手指头表示一个物体,所以我们一般使用的是十进制。
  • C:二进制的由来
    • 18世纪德国数理哲学大师莱布尼茨从《易经》中读到八卦的组成结构,发现其基本由基本素数(0)(1)组成,即阴爻和阳爻,其进位制就是二进制。20世纪被称作第三次科技革命的重要标志之一的计算的发明和应用,其运算模式正是二进制,它不但证明了莱布尼茨的原理是正确的,同时也证明了《易经》数理学很了不起。
    • 早期的计算机是通过控制电路开关的闭合来传输数据。一个开关有两种状态,太少;二个开关就有4种状态,依然太少。所以后来有人提议用8个开关的状态表示计算机中的最小单位,这就是一个字节(byte),而每一个开关表示一位(bit)。以前叫电信号,后来用数字表示,为数字信号,即用0和1表示每个开关的状态。即1byte=8bit,但后来用byte表示大的数据文件,表示量太大,所以就产生了k,m,g,t等单位,它们之间的进制为1024。
    • 硬盘(500g变465g):买来的硬盘厂商上写的是500g,但到了计算机里就只有465g,原因是,厂商里使用的是以1000为进制,而计算机里的以1024为进制,所以有 465 ( g ) ≈ 500 ∗ 1000 ∗ 1000 ∗ 1000 / 1024 / 1024 / 1024 ( g ) 465(g) \approx 500*1000*1000*1000/1024/1024/1024(g) 465(g)500100010001000/1024/1024/1024(g)
  • D:八进制的由来
    • 任何数据在计算机中都是以二进制的形式表示的,一个整数在内存中也是用二进制表示的,但使用一大串的1和0组成的数值进行使用很麻烦。
    • 所以就想把一大串缩短点, 将二进制中的三位用一位表示。而三位可以取到的最大值是7,超过7就进位了,这就是八进制。
  • E:十六进制的由来
    • 对于过长的二进制变成八进制还是较长,所以出现用4位二进制数表示一位的情况,这就是十六进制。
  • F:不同进制的形式特点
    • 进制越大,表现形式越短。

02.03_不同进制数的表现形式

  • A:二进制的表现形式
    • 由0和1组成,以0b(b可以大写,也可以小写)开头(JDK1.7版本后可以表示二进制)
  • B:八进制的表现形式
    • 由0,1…7组成,以0开头。
  • C:十进制的表现形式
    • 由0,1…9组成,整数默认是十进制的。
  • D:十六进制的表现形式
    • 由0,1…9,a,b,c,d,e,f(大小写均可)组成,以0x开头。
  • E:案例
class Demo1_Scale {
	public static void main(String[] args) {
		System.out.println(0b100);     //4
		System.out.println(0100);      //64
		System.out.println(100);       //100
		System.out.println(0x100);     //256
	}
}

02.04_原码反码补码

  • A:为什么要学习原反补?
    • 后面要学习强制类型转换,如果不知道原反补就会看不懂结果。
  • B:有符号数据表示的几种方式
    • 原码
      • 就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
      • 案例:通过一个字节,也就是8个二进制位表示+7和-7
        • 00000111(+7)
        • 10000111(-7)
      • 将案例的两个二进制码相加,结果为10001110,不等于0,这与(+7)+(-7)=0,矛盾,所以,计算机里使用的是补码,而非原码,而要了解补码,首先必须知道反码。
    • 反码
      • 正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
    • 补码
      • 正数的补码与其原码相同;负数的补码是在其反码的末位加1。
      • 案例: 通过一个字节,也就是8个二进制位以补码的形式表示+7和-7
        • 反码:
          • 00000111(+7)
          • 11111000(-7)
        • 补码
          • 00000111(+7)
          • 11111001(-7)
      • 将案例的两个二进制以补码形式相加,结果为100000000,最多只能装八位,所以把“1”去掉,结果为00000000,符合实际。

02.05_变量的概述及格式

  • A:什么是变量

    • 在程序执行的过程中,在某个范围内其值可以发生改变的量。
  • B:变量的定义格式

    • 数据类型 变量名=变量值
  • C:为什么要定义变量

    • 用来不断存放同一类型的常量,并可以重复使用。

02.06_数据类型的概述和分类

  • A:为什么有数据类型
    • Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间。
  • B:Java中数据类型的分类
    • 基本数据类型
    • 引用数据类型
  • C:基本数据类型分类(4类8种)
    • 整数型
      • byte 占 一个字节 -128到127
      • short 占两个字节 -215到215-1
      • int 占四个字节 -231到231-1
      • long 占八个字节 -263到263-1
    • 浮点型
      • float 占四个字节
      • double 占八个字节
    • 字符型
      • char 占两个字节 0到65535
    • 布尔型
      • boolean
        • boolean理论上占八分之一个字节,因为一个开关就可以决定是true和false,但是java中的布尔类型没有明确指定它的大小。

02.07_定义不同数据类型的变量

  • A:案例演示
class Demo1_DataType {
	public static void main(String[] args) {
	    //整数类型	
		byte b = 10;                   //占一个字节
		short s = 20;                  //占两个字节
		int i = 30;                    //占四个字节         整数默认的数据类型就是int类型
		long x = 88888888888L;         //占八个字节         当定义的值查过int范围时,则必须在数字后加L(大小写均可),
                                       //                  但最好加大L,因为小l太像1了
		System.out.println(b);
		System.out.println(s);
		System.out.println(i);
		System.out.println(x);
		
		//浮点类型
		float f = 12.3F;  //占四个字节        float类型必须加F(大小写均可)
		double d = 33.4;  //占八个字节        小数默认的数据类型是double
		System.out.println(f);
		System.out.println(d);
		
		//字符类型
		char c = 'a';  //占两个字节
		System.out.println(c);
		
		//布尔类型
		boolean b1 = true;
		boolean b2 = false;
		System.out.println(b1);
		System.out.println(b2);	
				
	}
}
  • B:赋值时注意float类型和long类型
  • C:使用变量的注意事项
    • 作用域问题
      • 同一个区域不能使用相同的变量名
    • 初始化问题
      • 局部变量在使用之前必须赋值
    • 一条语句可以定义几个变量
      • int a,b,c…;

02.08_数据类型转换之隐式转换

  • A:案例演示

    • byte + int 的结果
    class Demo1_DataTypeConversion {
    	public static void main(String[] args) {
    		//数据类型之隐式转换
    		int x = 3;
    		byte b = 4;
    		x = x + b;
    		System.out.println(x);
    	}
    }
    
  • B:解释byte+int类型的问题

    • 案例中的结果为int类型。原理如下图,
  • C:Java中的默认转换规则

    • 小数据类型转向大数据类型

02.09_数据类型转换之强制转换

  • A:案例分析
    • 有如下程序段
    class Demo1_DataTypeConversion {
    	public static void main(String[] args) {
    		//数据类型之隐式转换
    		//int x = 3;
    		//byte b = 4;
    		//x = x + b;
    		//System.out.println(x);
    	
    		//
    		int x = 3;
    		byte b = 4;
    		b = x + b;
    		System.out.println(b);
    	}
    }
    

发现运行结果错误。这是因为x+b为int类型,而b为byte类型,所以从int类型转向byte类型会损失精度,因而程序报错。而上述结果为7,显然在byte类型的数据范围内,所以用byte类型能够节约内存。这里就要用到数据的强制类型转换。

  • B:强制转换格式

    • b = (byte)(x + b);
    • 它的实质,就是把int类型前三个8位给丢掉,强制变成一个字节的byte类型。
    • 程序段
    class Demo1_DataTypeConversion {
    	public static void main(String[] args) {
    	//数据类型之隐式转换
    	//int x = 3;
    	//byte b = 4;
    	//x = x + b;
    	//System.out.println(x);
    	
    	//数据类型之强制转换
    	int x = 3;
    	byte b = 4;
    	b = (byte)(x + b);
    	System.out.println(b);
    	}
    }
    
  • C:强制转换的注意事项

    • 如果超出了被赋值的数据类型的取值范围,得到的结果会与你期望的不同。
    • 程序段
    class Demo1_DataTypeConversion {
    	public static void main(String[] args) {
    	//数据类型之隐式转换
    	//int x = 3;
    	//byte b = 4;
    	//x = x + b;
    	//System.out.println(x);
    	
    	//数据类型之强制转换
    	//int x = 3;
    	//byte b = 4;
    	//b = (byte)(x + b);
    	//System.out.println(b);
    	
    	//强制类型转换需注意的问题
    	//0000000 00000000 00000000 10000010       130的二进制
    	//10000010                                 丢去前三个8位,得到的其实是-126补码
    	//10000001                                 -126反码
    	//11111110                                 -126原码
    	byte b = (byte)(126+4);
    	System.out.println(b);	
    	}
    }
    

上述程序段结果等于-126的实质是,byte类型的范围时-128到127,所以130超出了其范围,那么当期强制转换成byte类型的时候,对前三个8位的丢弃是不合理,这也造成了130变成了-126。

02.10_数据类型转换面试题

  • A:案例演示1——变量相加
class Test1_DataTypeConversion {
	public static void main(String[] args) {
		//面试题:看下面的程序是否有问题,如果有问题,请指出并说明理由
		byte b1 = 3;
		byte b2 = 4;
		byte b3 = b1 + b2;
		/*
		 从两个方面
		 1.byte和byte(或short,char)进行运算的时候会提升为int,
		   两个int类型相加的结果也是int类型
		 2.b1和b2是两个变量,变量存储的值是变化的,在编译的时候无法判断里面具体的值,
		   相加有可能会超出byte的取值范围
		 */
		System.out.println(b3);
	}
}
  • B:案例演示2——常量相加
class Test1_DataTypeConversion {
	public static void main(String[] args) {	
		
		byte b4 = 3 + 4;        //3和4都是常量,java里有常量优化机制,
                                //就是在编译的时候直接把3和4相加的结果赋值给b4了,即相当于byte b4 = 7;
		System.out.println(b4);
	}
}

02.11_long与float的取值范围谁大谁小

  • A:进行混合运算的时候,byte,short,char不会相互转换,都会自动提升为int类型,其他类型进行混合运算时是小的数据类型提升为大的
    • byte,short,char——int——long——float——double
  • B:float表示的数据范围
    • float占4个字节,32个二进制位,并且符合IEEE 754规定
    • IEEE 754规定
      • 1位是符号位
      • 8位代表指数位
        • 00000000到1111111
        • 0到255
        • 并规定,0代表0,255代表无穷大
        • 剩下的范围为1到254,同时规定该范围减去127,得到-126到127
      • 23位代表小数位
  • C:总结
    • 它们的底层的存储结构不同
    • float表示的数据范围比long的范围要大

02.12_字符和字符串参与运算

  • A:案例演示——字符与ASCII码表
public class Demo4_DataTypeConversion {
	public static void main(String[] args) {
		System.out.println('a' + 1);         //98,因为有ASCII码表,a字符对应的是int类型的97
		System.out.println((char)('a' + 1)); //b,强制类型转换,从int类型转到char类型	
	}
}
* 记住三个值
	* '0'  48
	* 'A'  65
	* 'a'  97
  • C:案例演示——不同类型的数据与字符串相加
public class Demo4_DataTypeConversion {
	public static void main(String[] args) {
		//System.out.println('a' + 1);         //98,因为有ASCII码表,a字符对应的是int类型的97
		//System.out.println((char)('a' + 1)); //b,强制类型转换,从int类型转到char类型
		
		System.out.println("hello" + 'a' + 1);  //helloa1,任何数据类型用+与字符串相连接都会产生新的字符串
		System.out.println('a' + 1 + "hello");  //98hello 
		
		System.out.println("5 + 5 =" + 5 + 5);   //5 + 5 = 55
		System.out.println("5 + 5 =" + (5 + 5)); //5 + 5 = 10,用括号改变优先级
	}
}

02.13_char数据类型

  • A:程序段
class Demo5_Char {
	public static void main(String[] args) {
		char c = 'a';
		System.out.println(c);
		
		char c1 = 97;             //0-65535之间,通过ASCII码表转换成对应字符
		System.out.println(c1);   //a

		//char类型是否可以存储中文
		char c2 = '中';            //可以输出单个中文,因为java采用了Unicode编码,
                                   //Unicode编码中每个字符占两个字节,而中文也占两个字节
		System.out.println(c2);
	}
}
  • B:char c = 97; //0-65535
  • C:Java语言中的字符char可以存储一个中文汉字吗?为什么呢?
    • 可以,因为Java语言采用的是Unicode编码。Unicode编码中每个字符占用两个字节,而中文也占用两个字节
    • 所以,Java中的字符可以存储一个中文汉字。

02.14_算术运算符的基本用法

  • A:什么是运算符

    • 就是对各种常量和变量进行操作的符号。
  • B:运算符分类

    • 算术运算符
    • 赋值运算符
    • 比较运算符
    • 逻辑运算符
    • 位运算符
    • 三目运算符
  • C:算术运算符有哪些?

    • +,-,*,/,%,++,–
  • D:注意事项

    • +号在java中有三种作用,代表正号,做加法运算,字符串的连接符
    • 整数相除只能得到整数。如果想得到小数,必须把数据变化为浮点类型
    • /获取的是除法操作的商,%获取的是除法操作的余数
    • %运算符
      • 当左边的绝对值小于右边的绝对值时,结果为左边
      • 当左边的绝对值等于右边或是右边的倍数时,结果为0
      • 当左边的绝对值大于右边的绝对值时,结果是余数
      • %运算符结果的符号只和左边有关系,与右边无关
      • 任何正整数%2的结果不是0就是1,可以用来当作切换条件
      • 程序段
      class Demo1_Operator {
      	public static void main(String[] args) {
      		System.out.println(10 / 3);      //3,整数相除结果只能是整数
      		System.out.println(10 / 3.0);    //3.33。。。,如果想得到小数,把其中一个变成小数,另一个数在运算时会自动类型提升
      
      		System.out.println(13 % -5);     //3%运算符,符号只与左边的数符号有关
      		System.out.println(-13 % -5);    //-3
      	}
      }
      

02.15_算术运算符++和–的用法

  • A:++,–运算符的作用
    • 自加(++)自减(–)运算
    • ++:自加。对原有数据进行+1
    • –:自减。对原有数据进行-1
  • B:案例演示
    • 单独使用
      • 放在操作数的前面和后面效果一样(较为常见)
    • 参与运算使用
      • 放在操作数的前面,先自增或者自减,然后参与运算
      • 放在操作数的后面,先参与运算,再自增或者自减
    • 程序段
    class Demo2_Operator {
    	public static void main(String[] args) {
    		//单独使用
    		int a = 3;
    		//a++;               //a = a + 1  
    		++a;                 //a = a + 1 
    		System.out.println(a); //4
    	
    		//参与运算使用
    		int b1 = 3;
    		int b2 = 3;
    		int c1,c2;
    	
    		c1 = b1++;           //当++在变量后面的时候,会现将变量中的值取出做赋值操作,然后再自身加1
    		c2 = ++b2;           //当++在变量前面的时候,会先自身加1,然后再将结果赋值
    		System.out.println("b1 = " + b1);     //b1 = 4
    		System.out.println("c1 = " + c1);     //c1 = 3
    		System.out.println("b2 = " + b2);     //b2 = 4
    		System.out.println("c2 = " + c2);     //c2 = 4
    	}
    }
    

02.16_算术运算符++和–的练习

  • A:案例演示
class Test1_Operator {
	public static void main(String[] args) {
		int a = 10;
		int b = 10;
		int c = 10;
		
		a = b++;  //a = 10,b = 11
		c = --a;  //a = 9,c = 9
		b = ++a;  //a = 10,b = 10
		a = c--;  //a = 9,c = 8
		System.out.println("a = "+ a +",b = "+ b +",c = " + c);  //a = 9,b = 10,c = 8
	}
}
  • B:案例演示
class Test1_Operator {
	public static void main(String[] args) {
		int x = 4;
		//        4   +   6   +   60
        //     (先取值) (先自增)
		int y = (x++) + (++x) + (x*10);
		System.out.println("x = " + x + ",y = " + y);  //x = 6,y = 70
	}
}
  • C:面试题
    • byte b = 10;
    • b++;
    • b = b + 1;
    • 问哪句会报错,为什么?
    • 程序段
    class Test1_Operator {
    	public static void main(String[] args) {
    		byte b = 10;
    		b++;              //底层上实际已经做了强制转换,即b = (byte)(b + 1) 
    		//b = b + 1;      //出错,因为int向byte转的时候会损失精度
    		System.out.println("b = " + b);
    	}
    }
    

02.17_赋值运算符的基本用法

  • A:赋值运算符有哪些
    • 基本的赋值运算符:=
      • 把等号右边的数据赋值给左边
    • 扩展的赋值运算符:+=,-=,*=,/=,%=
      • += 把左边和右边做加法,然后赋值给左边
  • B:面试题
    • 看下面的程序是否有问题,如果有问题,请指出并说明理由
      • short s = 1; s = s + 1;
      • short s = 1;s += 1;
      • 程序段
      class Test1_Operator {
      	public static void main(String[] args) {
      		//short s = 1;s = s + 1;  //会报错,int往short转回损失精度
      		short s = 1;s += 1;       //底层实现的时候加了强制转换符,s = (short)(s + 1)
      		System.out.println(s);
      	}
      }
      

02.18_关系运算符的基本用法及其注意事项

  • A:关系运算符有哪些(比较运算符,条件运算符)
    • ==,!=,>,>=,<,<=
  • B:注意事项
    • 无论你的操作是简单还是复杂,结果都是boolean类型。
    • “==” 不能写成"="
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值