Java语言概述
理解面向对象
面向对象的基本特征
对象的基本特点
数据类型
基本类型的类型转换
表达式类型的自动提升
JDK: Java SE Development Kit 即Java 标准版开发包
JRE :Java Runtime Environment 即Java运行时环境
JVN : Java Virtual Machine 即 Java 虚拟机
联系:JDK 包含 JRE ,而JRE又包含JVM。
JVM不能单独搞定class的执行,解释class的时候JVM需要调用JRE里的类库lib。
JRE目录里有2个文件夹bin和lib,bin里面就是JVM,lib里的则是JVM工作所需要的类库lib,而JVM和lib和起来就是JRE。
利用JDK开发了Java程序后,通过JDK中的编译程序(javac),将java文件编译成了Java字节码,在JRE上运行这些字节码,JVM解析这些字节码,映射到CPU指定集成OS的系统调用。
JDK也有bin目录,而且含有javac.exe,而JRE的bin里没有。
javac指令:用来将java文件编译成class 文件。
一个文件里只能有一个public修饰的类。
Java的堆内存是一个运行时数据区,用以保存类的实例(对象)
Java虚拟机的垃圾回收,能自动释放内存空间减轻编程的负担,这使Java虚拟机具有2个显著的特点
1.垃圾回收机制使程序员不必再显示释放内存,很好地提高编程效率
2.垃圾回收机制保护程序的完整性
1.垃圾回收机制能够精确地标记活着的对象
2.垃圾回收器能够精确地定位对象之间的引用关系
采用面向对象方式开发的软件系统最小的程序单元是类
类定义 = 成员变量 + 方法
成员变量就是对象的一些状态,数据。
方法就是对象的行为。
组件更大,更好组装成电脑
封装,继承,多态
标识唯一性,分类性,多态性,封装性,模块独立性好。
类是对象的抽象,对象是类的实例,类是整个软件系统最小的程序单元。
“消息”是一个实例与另一个实例之间相互通信的机制。
引用类型包括:类,接口,数组类型,null类型。
空引用(null)可以转换为任何引用类型,但不能转换成基本类型。
引用数据类型就是对一个对象的引用,对象包括实例和数组两种。
基本数据类型:Boolean ,数值类型
数据类型:字符类型,整数类型,浮点类型
整数类型: byte,short,int ,long
浮点类型:float,double。
char型变量:
1.赋值单个字符 char ch = 'a'
2.赋值转义字符 char ch = '\r'
3.赋值u+16进制 char ch = '\u9999'
输入char时,一定会输出相应的字符 char ch = 97
char型变量可直接当成int类型变量使用
应为它存的是数字(字符的编号)
赋值时要用双引号括起来
用var定义时,一定要指定初始值
var a = 20; 这是对的
var a; 这个不行
var ch = "Hello"
编译器会推断ch的类型是个字符串
Java中,浮点类型默认是double类型,但是通过在浮点类型值后紧跟f或F即可当成float型
正数除以0得到浮点型POSITIVE_INFINITY
负数除以0得到浮点型NEGATIVE_INFINITY
0.0除0.0或对一个负数开方得到非数:浮点型NaN
所有正无穷大数值都是相等的,所有负无穷大数值都是相等的
只有浮点数除以0才可以得到正无穷大或负无穷大。
整数除以0,会抛出异常:ArithmeticException :/by zero
表数范围小的可以向表数范围大的进行自动类型转换
需要注意的是进行强转时有可能出现错误
比如上面这个代码,它会输出-23而不是233
原因
因为int是4个字节,32位,byte是1个字节,8位
将int型强转成byte时,会只保留右边的8位
并且第8位是符号位
如果符号位数字是1,那么表示这是个负数
负数要得出结果需要先减1得到反码,再化成原码
(因为负数以补码形式存在)
8个类都有一个parseXxx(String str)静态方法用于将字符串转换成基本类型
1.所有的byte类型,short类型,char类型在操作时将被提升到int
2.整个算术表达式的数据类型自动提升到与表数范围最大的类型一致
java的数组既可以存储基本类型的数据,也可以存储引用类型的数据
数据也是一种数据类型,本身是一种引用类型
如:int 是基本类型,int []是引用类型
静态初始化的简化形式:使用简化时,不能用var来定义数组变量
·
数组自带属性.length,表示数组长度
如果访问数组元素时指定的索引值小于0,或者>=数组长度
运行时出现异常:java.lang.ArrayIndexOutOfBoundsException:N
其中N是引发异常的索引。
foreach,可以便捷访问所有元素,但是不能改改变其值。
每一遍循环都将遍历到的数组元素赋给指定的变量
实际的数组对象被存储在堆内存中
数组名即引用变量存储在栈内存中