JDK1.8安装配置教程:JDK1.8免安装版
Java简介
一、Java的运行原理
1、将Java原程序通过编译器javac编译生成二进制字节码的类,将类通过类加载器加载到Java虚拟机中,通过字节码验证器验证,然后通过Java解释器将二进制字节码解释成计算机可以识别的指令完成执行。
2、javac.exe:Java编译器,将Java源程序编译成字节码
3、java.exe:Java解释器,直接从类文件执行Java应用程序
4、jar.exe:Jar文件打包工具
5、javadoc.exe参考文档生成器
二、Java标识符
(1)标识符的种类:
项目名、包名、类名、方法名、参数名、变量名统称为标识符。
(2)标识符的命名要求
①所有的标识符都必须以字母、下划线或美元
符作开头,后面的字符包括数字、大小写字母、下划线以及美元
符作开头,后面的字符包括数字、大小写字母、下划线以及美元
符作开头,后面的字符包括数字、大小写字母、下划线以及美元符 (错误举例:#mark; 包含#与;,所以不是合法标识符)。
②标识符不能是关键字,但可以包含关键字,关键字一共49个。标识符区分大小写。
③标识符也可以Unicode标识符(例如汉字),但是请尽量避免使用。
(3)标识符的命名规则
①项目名、包名:包名中的字母一律小写,如:xxxyyyzzz
②类名、接口名:使用名词,每个单词首字母大写,如:XxxYyyZzz
③方法名,参数名,变量名:第一个单词首字母小写,后面每个单词首字母大写(goto、sizeof、const这三个变量名不能做为标识符)如:xxxYyyZzz
④常量名:全大写,有多个单词时用下划线分隔开
三、Java语言主要 元素组成
标识符、关键字、文字、运算符和分隔符。
四、Java的优缺点
(1)优点:简单、面向对象、解释型、稳定性、结构中立、可移植
(2)缺点:
① 解释器型运行速度慢
② 由于Java的跨平台性,语言标准有待进一步统一
③ 复杂,代码量大
④ 不支持底层操作
五、数据类型
1、数据类型分类
1.1、基本数据类型
1.2、引用数据类型
2、基本数据类型
2.1、数值类型
(1)byte:1个字节8位
①byte b = (byte)128; System.out.println(b);输出结果为:-128;因为最大为127 即01111111;128=01111111+00000001=1111111;即-128第一位0表示正数;1表示负数;byte b = 128; System.out.println(b);会报错
②两个byte类型的整数相加,结果是int类型。
③依次定义相同数据类型的变量:byte a=1,b=2,c=3;
(2)short:2个字节16位
(3)int:4个字节32位
(4)long:8个字节64位
①使用时应该在后尾+L;
②八进制:以0开头的数值;例:int a = 012;
③十六进制:1 2 3 4 5 6 7 8 9 a b c d e f ;以0x开头数值;例:int a =0x10;long a = 0x12abL;
2.2、浮点类型
(1)float:4个字节32位
(2)double:8个字节64位
(3)其他补充
① Java中默认的浮点类型为double;所以不能直接将带小数点的数值赋值给float类型。
② Float f1 = 12.34;会报错。正确写法:float f1 = 12.34f;
③ Double d1 = 12.34;此句不会报错,因为默认类型就是double类型。
2.3、字符类型
(1)char:2个字节16位
(2)char 类型的值必须写在‘ ’内,并且只有一个字符,例:char a = ‘A’;
2.4、布尔类型
boolean:1个字节8位、只有true与false两种类型。
2.5、八种基本数据类型对应的封装类
基本类型 | byte | short | int | long | float | double | char | boolean |
---|---|---|---|---|---|---|---|---|
封装类 | Byte | Short | Integer | Long | Float | Double | Character | Boolean |
3、引用数据类型
3.1、类(class)
3.2、接口(interface)
3.3、数组
(1)一维数组的声明方式
① int[] arr = {3,1,2,5,6}
② int[] arr = new int[]{3,1,2,5,6}
③ int[] arr = new int[5];//此时会赋默认的值
④ int arr[] = new int[5]; //不推荐
(2)二维数组的声明方式
① int[][] arr1 = { { 3, 2, 7 }, { 1, 5 }, { 6 } };
② int[][] arr2 = new int[3][4]; // 3行4列的规则数组
③ int[][] arr3 = new int[2][];
注意:当数组里面的值为空时,去查找这个值时会出现空指针。如下举例:int[] arr1 = null;arr[0] = ; // 数组是引用类型,值为null时使用数组将抛出NullPointerException异常
3.4、枚举(Enum)
3.5、注解(@interface)
4、String字符串类型
4.1、对字符串正确赋初值的三种方式
① String str;
② String str = “good!”;在字符串常量池中
③ String str = new String(“good!”);在字符串常量池和堆中都创建对象。
4.2、String代表不可变的字符序列,简称:不可变性
注意: String 不属于基本数据类型,只是代表一个类,属于引用类型
六、数据类型转换
1、自动类型转换(也叫隐式类型转换)
(1)、将小类型直接赋值给大类型的变量,不需要进行声明式的转换。将精度低的类型直接赋值给精度高的类型
(2)、将int类型转byte类型 、将int类型转short类型, 如果int类型的数据值没有超过byte类型、short类型取值范围的最大值,则会自动类型转换;例如:byte a = 35;无需写成byte a = (byte)35;除了int、byte、short这三个类型之外的大类型转小类型,都需要强制转换。
(3)、这样写,就不会再进行隐式类型转换了:int f=35; byte s=f;会报错;需要改为byte s=(byte)f;还有下面这种情况:byte i=1;byte a=i+10;这句就会报错,因为只要右边不是单纯的数字相加,含有变量,就不会再进行自动类型转换了,此时需要强制类型转换:byte a= (byte)(i+10);
(4)、一旦char类型的变量进行了数学运算,那么字符就会按照一定的规则翻译成一个数字。
(5)、 byte+byte会自动提升为int+int;然后再进行运算,所以两个byte类型的变量进行运算的时候,要用int类型的变量进行接收;例如:byte a=1;byte b=2;int c = a+b
注意:a+=b和a=a+b的区别:
① a+=b是自动转化类型,a = a+b则不会自动转化,需要手动进行强制类型转化。
② b1+=b2;不需要强制转换,会直接将结果转为目标类型,不会报错。
③ byte b,b1=2,b2=5;b=(byte)(b1+b2);需要强制转换,不然会报错。如果是:byte b; b=1+1;此句不会报错,因为1+1优先级比=高,所以先是运算1+1;然后直接将2赋值给了b,所以不会报错,是正确的表达。
总结:+=、-=、*=、/=、%=:可以直接将结果转为目标类型,不需要强制类型转换。
其它补充: 如果被转换变量的值超过目标类型的最大值,超出部分从目标类型的最小值进行累加。例:int i = 129; byte b = (byte)i;System.out.println(b);输出结果为-127;因为byte类型最小值为-128,129超出最大值127两位数,即2;则从最小值往前数2位:-128、-127;所以输出为-127;
2、强制类型转换(也叫显式类型转换)
(1)、将大类型转小类型 、将精度高的类型转精度低的类型,指基本数据类型之间的转换,在某种情况下会丢失精度.
3、数据类型自动提升
(1)、小类型和大类型进行操作结果是大类型
(2)、精度低的类型与精度高的类型进行操作结果是精度高的类型
(3)、分析System.out.println(a+ 1+“”)与System.out.println(“”+a+ 1);例如:int a =300;System.out.println(a+ 1+“”); System.out.println(“”+a+ 1); System.out.println(“”+a+ 1);输出结果分别为:301;3001
注意:double类型、float类型转int类型的时候,并不会对数据四舍五入,而是会把小数部分全部舍弃掉,只保留整数部分数值。
4、基本数据类型转换为String类型三种方式
(1)、“” + 基本数据类型
(2)、String.valueOf(参数);参数可以为基本数据类型。
(3)、将基本数据类型转为封装类对象,通过封装类对象toString();(不推荐) 。例如:Integer inte = i; String str2 = inte. toString();
5、String类型转换为其他八种基本数据类型方式
5.1、第一种方式(直接)
(1)String类型转换为byte类型:Byte封装类中的parseByte()方法
(2)String类型转换为byte类型数组:String字符串.getBytes();
(3)String类型转换为short类型:Short封装类中的parseShort()方法
(4)String类型转换为int类型:Integer封装类中的parseInt()方法
(5)String类型转换为long类型:Long封装类中的parseLong()方法
(6)String类型转换为float类型:Float封装类中的parseFloat()方法
(7)String类型转换为double类型:Double封装类中的parseDouble()方法
(8)String类型转换为char类型:不能直接转换,要将字符串转化为char类型的数组的ToCharArray()方法
(9)String类型转换为boolean类型:Boolean封装类中的parseBoolean方法,只有字符串的值是true时(不区分大小写),结果才是true,否则都是false
5.2、第二种方式(间接)
(1)通过封装类,先将字符串转为封装类对象。然后通过拆箱操作或者封装类对象.xxxValue()