JAVA_SE_Day02

关键字和保留字

都是小写,保留字有goto,const。

标识符

凡是自己可以起名字的地方都是标识符,比如:类名,包名,方法名,接口名,变量名

命名规则

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

命名规范

  1. 包名:多个单词组成时都小写 xxxyyyzzz
  2. 类名,接口名:多个单词时,所有单词的首字母大写 XxxYyyZzz
  3. 变量名,方法名:多个单词时,第一个单词首字母小写,第二单词开始首字母大写 xxxYyyZzz
  4. 常量名:所有字母都大写,多个单词时用下划线链接 XXX_YYY_ZZZ
  5. 在命名的时候尽量做到见名知意

变量的使用

格式

数据类型 变量名 = 变量值;

说明

  • 变量必须先声明才能使用
  • 变量都定义在其作用域中,在作用域中是有效的,出了作用域是无效的
  • 同一个作用域,不能声明两个同名的变量

Java的数据类型

按照数据类型来分

  • 基本数据类型 primitive type
    • 数值型
      • 整数类型 byte,short,int,long
      • 浮点类型 float,double
    • 字符型 char
    • 布尔型 boolean
  • 引用数据类型 reference type
    • 类 class
    • 接口 interface
    • 数组 array

按照在类中声明的位置

成员变量 VS 局部变量

class Test{
    
    
	public static void main(String[] args) {
    
    
		// 按照变量名命名规范并声明
		int myNumber;
		// 变量的赋值
		myNumber = 1100;
		System.out.printf("%d\n",myNumber);	
		// 数据类型 变量名 = 变量值;
		int myAge = 22;
		System.out.println(myAge);


		/* 
		整数类型 byte  short  int    long
		占用空间 1字节  2字节  4字节  8字节
		1字节 = 8bit
		byte的范围 -128 ~~ 127
		*/
		// Byte
		byte b1 = -128;
		System.out.println(b1);
		// Short
		Short s1 = 128;
		System.out.println(s1);
		// int 4字节
		int i1 = 32323;
		System.out.println(i1);
		// 声明Long类型的变量,必须以'l'或'L'结尾
		Long l1 = 212412412412l;
		long l2 = 12312432234234L;
		System.out.println(l1);
		System.out.println(l2);


		/*
		浮点类型 float  double
		占用空间 4字节。 8字节
		float 单精度 位数可以精确到7位有效数据
		double 双精度
		Java中默认的浮点类型为double,在声明float类型的变量时,必须以'f'或'F'结尾
		*/
		double d1 = 12.4124;
		float f1 = 2312.1231f;
		System.out.println(d1);
		System.out.println(f1);

		/*
		字符型 char(1 字符= 2 字节(byte) = 16 bit)
		声明char型变量,通常使用一对'',注意的是只能放一个字符
		\n 换行符 和 \t 制表符也算是一个字符
		*/
		char c1 = '中';
		System.out.println(c1);
		char c2 = '\u0043';
		System.out.println(c2);

		/*
		布尔类型 boolean
		只能取两个数值之一 :true或false
		*/
		boolean bo1 = true;
		System.out.println(bo1);
		if (bo1) {
    
    
			System.out.println("你没有\"女朋友\"!");
		}else{
    
     
			System.out.println("你也没有女朋友!");
		}
	}
}

基本数据类型之间的运算规则

自动类型提升

  • byte,char,short < int < long < float < double
  • byte,char和short三种类型的变量进行运算时结果的数据类型都为int
  • 当容量小的数据类型的变量与容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型
  • 容量是指变量类型的数据表示范围

强制类型转换

  • 需要使用强转符:()
  • 强制类型转换,可能会导致精度损失
class Test2{
    
    
	public static void main(String[] args){
    
    
		byte b1 = 2;
		int i1 = 12;
		/* 
		错误: 不兼容的类型: 从int转换到byte可能会有损失
		byte b2 = b1 + i1;
		*/
		int i2 = b1 + i1;
		System.out.println(i2);
		
		float f1 = b1 + i1;
		System.out.println(f1);

		short s1 = 123;
		double d1 = s1;
		System.out.println(s1);
		System.out.println(d1);

		char c1 = 'a';
		int i3 = 10;
		int i4 = c1 + i3;
		System.out.println(i4);

		//****************************//
		// 强制转换
		double d2 = 12.999;
		int i5 = (int)d2;
		System.out.println(i5);
		// byte数值范围 -128~~127
		int i6 = 128;
		byte b2 = (byte)i6;
		System.out.println(b2);

	}
}

String类型变量的使用

  • String属于引用类型
  • 声明String类型变量时,使用一对 “”
  • String可以和8种基本数据类型变量做运算,且只能进行连接操作: +
  • String连接操作的结果是String类型
class Test3{
    
    
	public static void main(String[] args){
    
    
		String s1 = "你好!";
		System.out.println(s1);
		/*
		char c = '';
		编译不通过,必须放一个
		*/
		int myNumber = 52;
		String myChar = "我是学号是:";
		String myInfo = myChar + myNumber;
		System.out.println(myInfo);
		// 练习1
		char c = 'a';
		int num = 10;
		String str = "hello";
		System.out.println(c + num + str);
		System.out.println(c + str + num);
		System.out.println(c + (num + str));
		System.out.println((c + num) + str);
		System.out.println(str +num + c);
		/*
		练习2 
		需要打印 *	*
		注意: char类型和char使用操作符+时,需要考虑是不是会引起ANSII相加
		*/
		System.out.println("*\t*");

	}
}

进制

  • 二进制(binary):0,1 以0b或0B开头
  • 八进制(octal): 0-7 已0开头
  • 十进制(decimal):0-9
    -十六进制(hex):0-9及A-F(A到F不区分大小写) 以0x或0X开头
class Test4{
    
    
	public static void main(String[] args) {
    
    
		// 分别为二,八,十,十六进制
		int num1 = 0B110;
		int num2 = 0110;
		int num3 = 110;
		int num4 = 0X110B;
		System.out.println("num1 = " + num1);
		System.out.println("num2 = " + num2);
		System.out.println("num3 = " + num3);
		System.out.println("num4 = " + num4);		
		/*
			1字节 = 8bit
			 八位bit,头部的bit代表了数的正负,0为正,1为负
			 二进制时正数的原码,反码,补码都一样
			 负数的补码等于其反码+1
			在计算机底层都以补码的方式来存储数据
		*/

	}
}

Byte类型

    已知Byte类型的数值范围是-128~127,有没有想过为什么是这样的呢。首先Byte占用空间是一个字节,一个字节等于八个bit。

负数补码的计算

     正数的原码,反码和补码时一样的。而负数的原码,反码和补码需要通过计算得到。如下所示时-14的原码。

1 0 0 0 1 1 1 0

    下图是-14的反码,反码时除了头部的正负数标志(红色标记位)外,其他位取反。

1 1 1 1 0 0 0 1

    下图是-14的补码,补码是在反码的基础上+1,注意尾部绿色是+1后的结果。

1 1 1 1 0 0 1 0

取值范围的验证

    已知Byte类型的最大值是127,其原码,反码和补码如下图所示。

0 1 1 1 1 1 1 1

    那么-127的原码应该下图所示,我们计算其补码。

1 1 1 1 1 1 1 1

    下图是-127反码,反码时除了头部的正负数标志(红色标记位)外,其他位取反。

扫描二维码关注公众号,回复: 12393075 查看本文章
1 0 0 0 0 0 0 0

    下图是-127的补码,补码是在反码的基础上+1,注意尾部绿色是+1后的结果。

1 0 0 0 0 0 0 1

    上边是-127的补码,其尾部只有一位数值,则-128的补码应该是-127的补码的基础上-1,具体如下所示。如此可以得出结论Byte的最小值为-128

1 0 0 0 0 0 0 0

数值溢出

    我们使用int类型(4字节=32bit)的数值128强制转换为byte(1字节=8bit)类型,再打印出来发现数据变成了-128。强制转换就是删除9-32bit的数值,其底层的具体过程如下。下边是int类型的数值,数值是128。共32位,从右往左读,蓝色间隔8位。

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0

    然后我们进行了强制转换截取了后八位,计算机认为得到的是补码,因为计算机底层是用补码存储的,红色的位置代表了符号位。

1 0 0 0 0 0 0 0

    我们根据得到的这个补码可以得知是-128,之所以没有反推其反码和原码,是因为八位下的补码表示范围位-127~127。下图是运行的强制运行转换的截图。
                         在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42091436/article/details/112682130