java第一章----基础语法(2) 常量、变量及数据类型

java学习资源
https://www.bilibili.com/video/av37413483

1.关键字

​ 关键字的特点: 全部小写(不允许出现大写)

​ 保留字: goto const

2.标识符

​ 组成规则: 大小写字母 数字 $_

​ 命名规则:

​ 类和接口:大驼峰命名法

​ 变量和方法: 小驼峰命名法

​ 包: 全部小写 域名倒置 用.连接

​ 常量: 全部大写 用_连接

3.常量,进制和进制转换

​ 常量分为字面值常量和自定义常量;

​ 整数 小数 字符串 字符 布尔等

​ 所有的常量在计算机中以二进制存储的,但是这种语言人无法理解,因此需要其他表现形式

​ 二进制 0b 八进制0 十六进制 0x

​ 原反补的区别:

​ 原码:就是二进制表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。

​ 反码:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

​ 补码:正数的补码与其原码相同;负数的补码是在其反码的末位加1。

​ 补码出现是为了解决负数的计算问题

​ 在计算机底层,减法运算做的也是加法运算 都先换算成补码 运算完后再求原码


​		如byte类型运算    12+(-24)

​			12的原码为    0000 1100  反码和补码都为0000 1100

​			-24的原码为 1001 1000  反码为1110 0111  补码为 1110 1000

  				0000 1100

​	+			1110 1000     // 就按照加法运算  0+1为1   1+1为2  进一位后原位变0

​     =			1111 0100      这是补码 反码为  1111 0011   原码为1000 1100    结果为-12

4.变量的定义 赋值 声明

​ 变量的定义(包含了赋值和声明)

​ 数据类型 变量名 = 初始化值;

​ 变量的赋值

​ 变量名= 值;

​ 变量的声明

​ 数据类型 变量名 ;

​ 局部变量:定义在方法或方法的参数列表上的变量称为局部变量,局部变量不赋初值不能使用

​ 成员变量:定义在类中方法外,成员变量有默认值

5.数据类型和类型转换

​ java本身是一种强类型语言 他对类型的要求是非常高的

​ 数据类型:

​ 引用数据类型 :

​ 数组 类 接口

​ 基本数据类型:

​ byte short int long float double boolean char

​ 整型出现这么几种类型的原因时减少内存的消耗,按照定义分配内存

​ 整 型: byte(1个字节 8位) short(2个字节 16位) int(4个字节 32位) long (8个字节)

​ java中默认情况下 所有的整数都是int类型

​ 小数类型: float(单精度 4个字节) double(双精度 8个字节)

​ java中默认的小数都是double类型的

​ 字符类型:char(2个字节)

​ 布尔类型:boolean true false

​ 类型大小关系 byte short char < int < long < float < double

​ 类型转换:

​ 小变大:完全没问题

​ float a = 123; //正确 int转float 小变大

​ float b= 123L;//正确 long转float 小变大

​ int a = ‘a’; //正确 将char转为int 小变大 此时接受的是ASKII码表中 a对应的数

​ 大变小:看等号右边是否包含变量

​ 如果等号右边都是常量,只要在范围内就可以直接赋值

​ byte d = 23; 大转小,int转byte,由于23在byte范围内,所以不报错

​ 但是小数除外

​ float a = 12.3; 大转小,double转float大转小,也在范围内,但不能转

​ 如果不在范围就需要强转,有精度损失,强转的具体过程见下;

​ float d = (float)12.3; //正确,强转

​ float d = 12.3f; //正确,注明是float类型

​ byte a = 200; //报错,int转byte,超出范围

​ byte a = (byte) 200;// 强转 精度损失

​ 如果等号右边是变量则必须进行强转();

​ byte a=1,b=2,c; //这种定义方式 等同与 byte a=1; bye b =2; byte c; 一般不推荐这样写

​ c=1+2; //正确,等号右边是常量

​ c = a+b; //报错,因为c为byte类型,a和b为byte但运算后会为int类型,由于其为变量,就有可能出现大变小造成精度损失;

​ c=a+1; //报错;a是变量 byte类型 转为int时会由可能超出范围;

强转的具体计算过程:先将数转为二进制,求其补码,然后按照位数去掉多余的前几位,然后求原码代表的值;

​ byte a = (byte) 200;// -56

​ int类型(32位)的200,其二进制的原码为 0000 0000 0000 0000 0000 0000 1100 1000 补码相同,用补码去进行强转

​ 转为byte(8位)只保留后8为 为1100 1000 此时为补码 反码为1100 0111 原码为 1011 1000 结果为 -56

​ byte b = -300; //报错

​ byte b = (byte) -300;// -44

​ int类型(32位)-300的二进制的原码为 1000 0000 0000 0000 0000 0001 0010 1100

​ 反码为 1111 1111 1111 1111 1111 1110 1101 0011

​ 补码为 1111 1111 1111 1111 1111 1110 1101 0100

​ 转为byte(8位)只保留后8为 为1101 0100 此时为补码 反码为 1101 0011 原码为10101100 结果为 -44

char类型参与运算,是按照其ASKII码表对应的数字进行的;​

	char ch = '中';
	System.out.println(ch);//中  直接使用的时候,用的是字符
	char ch1 = 'b';
	System.out.println(ch1 +1);//99, 参与运算时使用对应的数字
	
	System.out.println('z' + 0);//122
	
	char ch2 = 97;  //虽然赋值右边是int类型 但ch2是以char接受的,此时ch2代表的是其对应的字符
	System.out.println(ch2);//a
	
	char ch3 = '\u0061';//16进制,转成10进制也是97,所以代表是a   6*16^1+1*16^0=97
	System.out.println(ch3);//a

课后题

  1. 求出123、-10对应的原码,反码和补码
  没有给出具体类型 默认是int类型   下面按照byte和int分别算下,只作为练习
   
   123是byte  8位    二进制原码为  0111 1011  反码补码都相同
   
   	int  32位     二进制原码为  0000 0000 0000 0000 0000 0000 0111 1011;反码补码都相同
   
   -10是byte  8位  原码1000 1010    
   
   			   反码1111 0101  
   
   			   补码1111 0110
   
     是int  32位  原码为  1000 0000 0000 0000 0000 0000 0000 1010  
   
   			  反码为   1111 1111 1111 1111 1111 1111 1111 0101
   
   		     补码为    1111 1111 1111 1111 1111 1111 1111 0110
   ```
2. ​       判断下列输出是否正确,如果正确得到结果应该是什么

   ```
   System.out.println('a'+1); //98
   System.out.println("5+5="+5+5); //先得到5+5=5 -> 再得到5+5=55 按从左往右顺序,字符串拼接
   byte a = 3;
   int b= 4;
   System.out.println(a+b);//7 直接打印int
   byte c = a + b;  //错误 包含变量 int转byte 大转小,需要强转
   System.out.println(c);//错误 c没有生成
   
   int j = a + b;//正确  int接收int 
   System.out.println(j);//正确   
   
   float f = 123.45;//错误,加f或者强转
   float f = 120;//正确
   long a = 888888888888;//错误,加L
   
   char ch = '\u0061';//'a'-----97------\u0061  三种格式都行
   System.out.println(ch);
   /*char类型的默认值为  \u0000----表现形式是一个空格,但对应的数字是0 */
   ```



以下能作为char类型的字面值的有( B D  )   
A. "e"         B. 'f'         C. '\u12'         D. '\u0012'     E. '\n' 

以下选项中正确的有(A C D   )   
A. int i = 32;      B. float f = 45.32;      C. double d=3.2;       D. double d=9.21D;

相关例题

1. 输入:用户在终端上输入自己的名字,比如 "凤姐"
   输出:在控制台上打印 :
   ​		凤姐好美
   ​		凤姐好坏
   ​		凤姐公认是人见人爱

```
import java.util.Scanner;
/**
 	输入:用户在终端上输入自己的名字,比如 "凤姐"
	输出:在控制台上打印 :
	凤姐好美
	凤姐好坏
	凤姐公认是人见人爱
 */
public class Tesst1 {
	public static void main(String[] args) {
		Scanner input= new Scanner(System.in); //固定的键盘录入格式
		System.out.println("请输入名字");
		String name = input.next(); //next用于接受字符串
		System.out.println(name+"好美");
		System.out.println(name+"好坏");
		System.out.println(name+"人见人爱");
	}
}

```

1. 接收输入:用户在控制台输入两个数字,比如先输入一个3,再输入一个5
   运行结果:在控制台上打印:  "相加的结果是:8"  相减、相乘、相除分别打印

```
import java.util.Scanner;
public class Tesst1 {
	//接收输入:用户在控制台输入两个数字,比如先输入一个3,再输入一个5
	//运行结果:在控制台上打印:  "相加的结果是:8"  相减、相乘、相除分别打印
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入一个数字");
		double a = input.nextDouble();
		System.out.println("请输入第二个数字");
		double b = input.nextDouble();
		System.out.println("相加的结果是:"+(a+b)); 
		System.out.println("相加的结果是:"+a+b); //此时a+b没有括号,按照从左到右进行字符串拼接,输出结果与预期不符
		System.out.println("相减的结果是:"+(a-b));
//		System.out.println("相减的结果是:"+a-b);//报错,按照字符串拼接,但字符串没有减法
		System.out.println("相乘的结果是:"+a*b);
		System.out.println("相除的结果是:"+a/b);
	}
}
```


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值