JAVA基础知识(一)

1.java的数据类型

JAVA的数据类型分为基本数据类型(byte、short、int、long、float、double、char、boolean)和引用数据类型(数组、类、接口、枚举),基本数据类型又分为数值型,字符型和布尔型,数值型又可分为整数型和浮点型。

类型之间的转换(自动转型、强制转型、特殊点)

   基本数据类型的取值范围排序(由小到大):
			byte、short、int、long、float、double
	 1.自动转型 : 取值范围小转大
			E: 	byte b = 10;
				short s = b;
            	System.out.println(s);//输出类型为short型
	2.强制转型(强转): 取值范围大转小
			语法 : 目标类型 目标变量 = (目标类型)原变量;
			E:	double d = 123.123;
				float f = (float)d;
				System.out.println(f);//输出类型为float型
	3.特殊点:
			案例一:
				byte b1 = 1;
				byte b2 = 128;
				System.out.println(b1);//输出1
				System.out.println(b2);//输出—128
			ps:1为数字字面量,认为是int类型,赋值给byte类型时,先要查看是否在byte类型取值范围内,如果在,就直接赋值,如果不在,就必须强转
			案例二:
				int ii = 12345678901;//错误
			ps:整数数字认为是int类型,上述写的数字虽然是int类型,但是超过了int类型的取值范围,所以报错
			案例三:
				long l1 = 12345678901;//错误
				long l2 = 12345678901L;
			ps:12345678901超过了int类型的取值范围,会报错12345678901L会直接认为他是long类型
			案例四:
				float f1 = 1;//int转成float:自动转
				float f2 = 1.0;//double转float:会报错,除非:强转或者1.0F
				System.out.println(f1);//输出1.0
				System.out.println(f2);//报错
			案例五:
				char c = 'a';
				int i = c;
				System.out.println(i);//输出97
				ps:
					1.输出的是a表示的ASCII
					2.char类型的取值范围为0~65535
			案例六:
				System.out.println((int)(char)(byte)-1);//输出65535
				ps:
					1.自动转型:用最高位补位
					2.char类型没有负数、补位都是用0补位

2.运算符

JAVA中常见的运算符有算术运算符,逻辑运算符,关系运算符,赋值运算符,三木运算符和位运算符等。

2.1算术运算符

算数运算符:+、-、*、/、%、++、--
	E:	byte b1 = 10;
		byte b2 = 20;
	  //byte result = b1+b2 //会报错,因为byte类型做运算,会向上转型成int类型再做运算(short一样如此) 正确写法如下:
		byte result = (byte)(b1+b2); 
		System.out.println(result);

	注意:byte、short类型做运算,会向上转型成int类型再做运算
	E:	char c = 'a';  //ASCII--97
		System.out.println(c+1); //输出98
	注意:char+int : char类型对应的ASCII加上int值

	a++:先使用再自加1   ++a:先自加1再使用
	a--:先使用再自减1   --a:先自减1再使用

2.2逻辑运算符

逻辑运算符:
	&与		&&短路与
	|或		||短路或
	^异或
	!非
ps:
	& 、&&、|、||、^ 两侧都是放boolean值
	ArithmeticException:数学计算类异常

	&& 和 &使用上没有区别,执行流程上有区别
	&& 和 & 相同点:两侧如有一侧为false,结果就为false
	&& 和 & 不同点:	& : 前者为false ,还会判断后者
					&&: 前者为false ,不会判断后者
					所以&&的效率高
E:	System.out.println(false & (10/0>0));//报错
	System.out.println(false && (10/0>0));//false

	||和 |使用上没有区别,执行流程上有区别
	||和 |相同点:两侧如有一侧为true,结果就为true
	||和 |不同点:	| : 前者为true,还会判断后者
					||: 前者为true,不会判断后者
					所以||的效率高
E:	System.out.println(true & (10/0>0));//报错
	System.out.println(true && (10/0>0));//true

	^异或: 两侧相同为false,不同为true
	!非;值相反 如:!true  表示 false

2.3关系运算符

关系运算符:== 、!= 、> 、< 、 >= 、 <=
ps:关系运算符的结果都是boolean值
经典面试题:
	int x = 10;
	int y = 10;
	boolean flag = (x == y);
	System.out.println(flag);//true

	flag = (x = y);
	System.out.println(flag);//会报错
ps:boolean型不能和别的基本数据类型兼容

2.4赋值运算符

赋值运算符: = , +=, -=, *=, /=, %=
E:
	int a = 10;
	a += 5;//a = (int)(a+5);
	a -=10;//a = (int)(a-10);
	a *=2;//a = (int)(a*2);
	a %=3;//a = (int)(a%3);
经典面试题:
	//下面的两种写法结果分别是?
	short s=1; 
	s = s+1;//报错:可能损失精度
	
	short s=1; 
	s += 1;//底层实现: s = (short)(s+1);
PS:复合赋值 E1 op= E2等价于简单赋值 E1 = (T)((E1) op (E2)),其中T是E1的类型,op表示运算符

2.5三目运算符

三目运算符/三元运算符:
语法:
	变量 = (boolean)?值1:值2;
理解:
	boolean--true : 返回值1
	boolean--flase: 返回值2
扩展:
	题目1:
		int a=5;
		System.out.println((a<5)?10.9:9); //输出9.0
	ps:值1 和 值2 都是数字字面量(常量),向上转型
		
	题目2:
		char x='x';//ASCII=120
		int i=10;
		System.out.println(false?i:x);//输出120
	ps:值1 和 值2 都是变量,向上转型
		
		System.out.println(false?97:x);//输出x
	ps:值1常量,值2变量,值1是都在值2所属类型的取值范围内, 如果在就返回值2类型,如果不在就返回值1类型
		
原则:
	1.如果都是常量表达式,用向上类型转换
	2.若三目运算符中的两个表达式有一个是常量表达式,另一个是类型T的表达式,且常量表达式可以被T表示,则输出结果是T类型。

2.6位运算符

	& 与 :同位比较,两者为1,结果为1
	| 或 :同位比较,两者有1,结果为1 
	^ 异或 :同位比较,两者不同,结果为1 
	<< 左移 : 用0来补位
	>> 右移 : 最高位补位
	>>> 无符号位右移:用0来补位(只支持32位及以上的位数)
如何判断& | ^这三者为逻辑运算符还是算术运算符:
	& | ^ : 前后两者为boolean型的值,这些符号就为逻辑运算符
	& | ^ : 前后两者为数值,这些符号就为位运算符
面试题:用最有效率的方式计算 2 * 8
	System.out.println(2 << 3);

3.运算符的优先级

在这里插入图片描述

4. 表达式

int a = 5+6; ------运算表达式
boolean bool = 5<3; --- 关系表达式

5.转义字符

转义字符:表示具有特殊意义的字符本身
		\" : 一个"
		\n : 换行
		\' :一个'
		\\ :一个\
		\t :水平制表 u\0000 UniCode码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值