Java

Java


******个人学习Java总结(3)******

一、JDK、JRE和JVM三者的关系


1、JDK(Java Development Kit):Java开发工具,包含JRE和开发工具两部分组成。
2、JRE(Java Runtime Environment):Java运行环境,包含JVM和核心类库两部分组成。
3、JVM(Java Virtual Machine):Java虚拟机,实现跨平台操作的根本。
如:图1-1,JDK、JRE和JVM三者的关系图。

图1-1,JDK、JRE和JVM三者的关系图

图1-1,JDK、JRE和JVM三者的关系图

二、变量与数据类型


1、变量

1-1、变量的分类

1、变量分为:成员变量和局部变量。
(1)成员变量分为:类变量和实例变量。【若成员变量没有被“static”修饰,则为实例变量且存于堆内存(Heap)中;成员变量被“static”修饰,则为类变量且存于内存中的静态区。】
(2)局部变量分为:方法、代码块局部变量和形参。【若局部变量没有被“static”修饰,则存于栈内存(Stack)中;局部变量被“static”修饰,则存于内存中的静态区。】
变量的具体内容,如:图2-1-1,变量具体图。

图2-1-1,变量具体图

图2-1-1,变量具体图
1-2、变量的使用顺序

1、就近原则:当需要使用某个变量时,优先从局部变量中查找,若没有查找到,则才会从类中的成员变量进行查找。
2、因为存于内存不同区域,所以局部变量和成员变量可以重名


2、数据类型

2-1、数据类型分类

1、基本数据类型可以分为:整数型、浮点型、字符型和布尔型。如:图2-2-1,基本数据类型图。
图2-2-1,基本数据类型图

图2-2-1,基本数据类型图

2、引用数据类型可以分为:类(class)、数组(array [ ])、枚举(enum)、接口(interface)和注解类型(@interface)。【PS:后续会单独对每个引用数据类型详细个人小结!】

注意:
(1)字符串(String)属于引用数据类型(String实质是一个类)。
(2)引用数据类型的默认值为:null(空)。
(3)布尔型——虽然占用内存大小实际为1位(bit),但由于计算机处理数据或者最小存储单位是1字节(Byte),则也可算作占用内存大小为1字节(Byte)。

2-2、基本数据类型之间的转换

1、基本数据类型转换分为:隐式转换(自动)和强制转换。其中,隐式(自动)转换:数据范围小的基本数据类型自动转换位数据范围大的基本数据类型。强制转换:数据范围大的基本数据类型强制转换数据范围小的基本数据类型。如:图2-2-2,基本数据类型转换图。
图2-2-2,基本数据类型转换

图2-2-2,基本数据类型转换图

注意:
(1)强制转换要在被强制转换数据前加上(),且()内位要转换的数据类型。
(2)数据类型的转换,可能造成精度损失、数值溢出(溢出时会以二进制进位)等数值上的变化。
(3)布尔型——虽然占用内存大小实际为1位(bit),但由于计算机处理数据或者最小存储单位是1字节(Byte),则也可算作占用内存大小为1字节(Byte)。
(4)byte与char,short与char不能自动转换。
(5)int向byte、short和char转换时,若int类型数据的范围与所要转的数据类型的范围相同(或在所要转的数据类型的范围内),就会隐式转换(自动转换)。
(6)当要强制转换数据类型时,一定要清楚被强转数据的大小和范围。【切记!——在实际开发中。】


三、运算(运算符)


3-1、自加( + + )与自减( - - )

1、区别“ i++ ”(右 ++)与“ ++i ”(左 ++)
(1)“ i++ ” 先赋值再自加。
(2)“ ++i ” 先自加再赋值。
2、区别“ i–”(右 --)与“ --i ”(左 --)
(1)“ i-- ” 先赋值再自减。
(2)“ --i ” 先自减再赋值。

注意:
(1)要将“ i++ ”看作是由一个i++的整体和一个i变量两部分共同构成。其他的 --与 ++一样这样去理解。
(2)优先级高于普通的运算符,多用于循环结构中。

public class Test {
	
	public static void main(String[] args) {
		//Test1
		int a = 3;
		System.out.println("a++的结果:" + a++);//先赋值——“a++”=a=3,再自增——a=a+1=3+1=4
		int b = 3;
		System.out.println("++b的结果:" + ++b);//先自增——b=b+1=3+1=4,再赋值——“++b”=b=4
		int c = 3;
		System.out.println("c--的结果:" + c--);//先赋值——“c--”=c=3,再自减——c=c-1=3-1=2
		int d = 3;
		System.out.println("--d的结果:" + --d);//先自减——d=d-1=3-1=2,再赋值——“d--”=d=2
		
		//Tset2
		int i = 3;
		int result = i++ + ++i - i-- + --i;
		/*
		 *	注意:++(--)优先级高于普通运算符。
		 *	第一步:先赋值——“i++”=i=3,再自增——i=i+1=3+1=4
		 *	第二步:先自增——i=i+1=4+1=5,再赋值——“++i”=i=5
		 *	第三步:先赋值——“i--”=i=5,再自减——i=i-1=5-1=4
		 *	第四步:先自减——i=i-1=4-1=3,再赋值——“--i”=d=3
		 *	最终:result = 3 + 5 - 5 + 3 = 6
		 */
		System.out.println("i++ + ++i - i-- + --i的结果:" + result );
	}	
	
}
3-2、位运算及注意事项

1、将数值转换为二进制进行计算。该计算的效率最高,性能最好。如:图3-2-1,位运算及注意事项图。
图3-2-1,位运算及注意事项图

图3-2-1,位运算及注意事项图
3-3、逻辑运算

1、逻辑与(“ && ”,“ & ”)和逻辑或(“ || ”,“ | ”)
的相关事项:
注意:
(1)“ && ”和“ || ”具有短路功能,“ & ”和“ | ”不具备。
(2)“ && ”比“ || ”优先级高。
(3)常用逻辑运算符的优先级顺序:
【!(逻辑非)】 > 【&& ,&(逻辑与)】 > 【|| ,|(逻辑或)】

		/*
		 * 	判断&&与||优先级
		 *	(1) 若&&与||同级或&&优先级低于||,
		 *	            则先执行(true || true)→ture,再执行(true && false)→false
		 *	(2) 若&&优先级高于||,
		 *	            则先(true && false)→false,再执行e执行(false || true)→ture
		 *	(3) 最终运行结果:false,即(2)成立
		 */
		System.out.println(true || true && false);//结果:ture
		


		/*
		 *	证明&&或||具有短路功能,&或|没有短路功能
		 *	1、&&与&
		 *	  (1) a>4为false, ++a==4为true,两者&&结果为false;
		 *		      而通过打印输出a的值为3,则说明++a并没有执行,否则输出a的值该为4。
		 *		     【即:&&具有短路功能(前部分为false)。】
		 *	  (2) b>4为false, ++b==4为true,两者&结果为false;
		 *		      而通过打印输出b的值为4,则说明++b执行,,否则输出b的值该为3。
		 *		     【即:&没有短路功能。】
		 *	2、||与|
		 *    (1) c>4为true, ++c!=5为false,两者||结果为true;
		 *    	      而通过打印输出c的值为4,则说明++c并没有执行,否则输出c的值该为5。
		 *    	     【即:||具有短路功能(前部分为true)。】
		 *    (2) d>4为true, ++d!=5为false,两者|结果为true;
		 *    	      而通过打印输出d的值为5,则说明++d执行,,否则输出d的值该为4。
		 *    	     【即:|没有短路功能。】
		 */
		int a = 3, b = 3, c = 4, d = 4;
		//Test(1)
		System.out.println(a>4 && ++a==4);
		System.out.println(a);//结果:3
		//Test(2)
		System.out.println(b>4 & ++b==4);
		System.out.println(b);//结果:4
		//Test(3)
		System.out.println(c<5 || ++c!=5);
		System.out.println(c);//结果:4
		//Test(4)
		System.out.println(d<5 | ++d!=5);
		System.out.println(d);//结果:5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值