1.java编译运行过程
编译期:.java源文件---编译---->.class字节码文件
运行期:JVM加载.class并运行.class(0和1)
特点:跨平台,一次编译到处运行
2.名词解释
JVM:java虚拟机
加载.class并运行.class
JRE:java运行环境
除了包含JVM以外还包含了运行java程序所必须的环境
JRE=JVM+java类库(小零件)
JDK:java开发工具包
除了包含JRE以外还包含了运行java程序所必须的环境
JDK=JRE+编译、运行等命令工具
3.
运行java程序的最小环境是JRE
开发java的最小环境是JDK
4.命名规则
只能包含字母,数字,下划线和$符,不能以数字开头
严格区分大小写
不能使用关键字
允许中文命名,但不建议;见名知意,小驼峰命名法
5.八大基本类型
byte:字节型,用于存储整数,占用1个字节(-128~127)
short:短整型,用于存储整数,占用2个字节(-2^15~2^15)
int:整型,用于存储整数,占用4个字节(-2^31~2^31)
long:长整型,用于存储整数,占用8个字节(-2^63~2^63)
float:单精度浮点数,用于存储小数,占用4个字节,不能表示精确值
double:双精度浮点数,用于存储小数,占用8个字节,不能表示精确值
boolean:布尔型,用于存储true和false,占用1个字节
char:字符型,采用unicode编码,用于存储单个字符,占用2个字节
6.类型间的转换
自动/隐式类型转换:小--->大
强制类型转换:大---->小
注意:强转可能会丢失精度
7.两点规则
整数直接量可以直接赋值给byte,short,char,但不能超范围
byte,short,char参与运算,一律转换为int在运算
8.三种循环的选择
循环若与次数相关,采用for循环
若循环变量的初始化与循环变量的改变相关用do while
无关用while
9.break与continue
break:跳出循环
continue:跳出剩余语句进入下一次循环(只能用在循环中)
10.方法
封装了一段特定的业务逻辑功能
一个方法只做一件事
方法可以被反复调用多次
减少代码重发,有利于代码维护
11.return的作用
结束方法的执行
返回结果给调用方
12.类和对象
现实生活中由很多对象组成的,基于对象抽象出类
对象:软件中真是存在的单个的个体/东西
类:代表一类个体
一个类可以创建多个对象
13.什么是构造方法?构造方法的作用是?
与类同名,没有返回值类型(void都没)
new对象时被调用
不写默认有原参,写了则覆盖
构造方法可以重载
作用:给成员变量赋初始值
14.什么是this?this的用法?
指代当前对象,哪个对象调用方法就指向哪个对象
只能用在方法中,方法中访问成员变量之前,默认有this
用法:
this.成员变量名--------------------访问成员变量
this.方法名()------------------------调用方法(可以省略)
this()----------------------------------调用构造方法
16.引用类型数组:
给引用类型数组元素赋值需要new一下
若想访问对象的属性和调用方法,需要通过数组元素打点
17.什么是继承?继承的作用?
通过extends去继承
超类/父类:共有的属性和行为
派生类/子类:特有的属性和行为
单一继承
子可访父,父不访子
具有传递性
在子类构造中,若没调用父类构造,则默认super()调用父类的无参构造,若子类调用了则不再默认提供。
super()调用超类构造方法,必须放在派生类构造的第一行
作用:代码复用
18.向上造型(多态)
左父右子
能点出什么来要看引用的类型
19.重写(override)
发生在父子类之间,方法名相同,参数列表也相同
重写方法被调用看对象的类型
遵循“两同两小一大“规则
两同:方法名相同,参数列表相同
两小:子类方法返回值类型<=父类;void和基本类型必须相等;子类抛出的异常<=父类
一大:子类的访问权限>=父类
20.重载
发生在同一个类中
方法名相同,参数列表不同(类型或顺序不同)
与修饰符和返回值类型无关
21.package声明包
同包的类不同名,不同包的类可同名
类的全称:包名.类名
22.import导入类
同包中的类可以直接访问,不同包中的类不能直接访问,若访问,先import导入类再访问类
23.访问修饰符
public公开的---------任何类
private私有的--------本类
protected受保护的-----本类,派生类,同包类
默认-----------------------本类,同包类
24.final最终的,不可改变的
修饰变量:变量不能被改变
修饰方法:方法不能被重写
修饰类,类不能被继承
25.static静态的
静态变量:
由static修饰
属于类,存储在方法区中,只有一份
常常通过类名.来访问
何时用:所有对象所共享的数据
静态方法:
由static修饰
属于类,存储在方法区中,只有一份
常常通过类名.来访问
静态方法中没有隐式this传递,所以不能直接访问实例成员
何时用:方法的操作与对象无关
静态块:
由static修饰
属于类,在类被加载期间自动执行,因为一个类只被加载一次,所以静态块也只执行一次
何时用:加载/初始化静态资源
26.static final常量
必须声明同时初始化
常常通过类名访问,不能改变
建议:常量的所有字母都大写,多个单词用_分隔
编译器在编译时会将常量直接替换为具体的值
何时用:数据永远不变并且经常使用
27.抽象方法
由abstract修饰
只有方法的定义,没有方法体
28.抽象类
由abstruct修饰
包含抽象方法的类必须时抽象类
抽象类不能被实例化
抽象类是需要被继承的
抽象类的意义:封装所有的属性和行为(代码复用);为所有派生类提供统一的类型(向上造型);可以包含抽象方法,为所有派生类提供统一的入口(造型之后能点出来);可以达到强制重写的目的。
29.匿名内部类
何时用:若想创建一个类的对象,并且对象只被创建一次,可以设计为匿名内部类。
在匿名内部类中不能修改外面局部变量的值,因此在此处该变量会默认为final的
30.接口
是一种引用数据类型
由interface定义
只包含常量和抽象方法
不能被实例化
接口是需要被实现/继承的,实现类必须重写接口中所有的抽象方法
一个类可以实现多个接口,用逗号分隔;如果既有继承又有实现,应该先继承后实现
接口可以实现接口
31.多态
同一对象被造型为不同类型时,有不同的功能。
同一类型的引用指向不同的对象时,有不同的实现。
向上造型/自动类型转换:左父右子;能点出什么看引用的类型;能向上造型成为的类型:超类+所实现的接口;
向下造型/强制类型转换:引用所指向的对象,就是该类型;引用所指向的对象,实现了该接口或继承了该类;
如若强转不符合,会出现classcastException
建议:在进行强制转换前一定要先通过instance of来判断引用对象是否是该类型
32.内存管理
堆:存储new出来的对象(实例变量,数组元素)
栈:存储方法中局部变量(包括方法的参数)
方法区:存储.class字节码文件(静态变量,所有方法)
33.string
java.lang.string使用final修饰,不能被继承
string的底层封装的是一个字符数组
string在内存中采用unicode编码格式,每个字符占用两个字节空间
字符穿一旦创建,对象内容永远无法改变,但字符串引用可以重新赋值
34.字符串常量池
java对string字符串有一个优化措施:字符串常量池
java推荐我们使用字面量/直接量的方式创建对象,并且会缓存所有以字面量形式创建的字符串对象到常量池中,当使用相同字面量在创建对象是将会复用常量池中的对象,以减少内存开销
35.String常用API
length()---------获取字符串长度
trim()------------去除当前字符串两边的空白字符
toUpperCase()/toLowerCase()--------字符串串中英文全转大写/小写
startsWith()/endsWith---------------判断字符串以给定的字符开始/结束
charAt()返回指定位置的字符
indexOf()/lastIndexOf()------------------检索给定字符从当前字符串中开始位置/最后一次的出现位置
substring()-----------截取指定范围内字符
静态valueOf()------------将其他数据类型转换为string
36.StringBuilder
由于String是不变对象,每次修改都要创建新的对象,所以java提供了StringBuilder
StringBuilder是专门修改字符串的一个类,内部维护了一个可变的char数组,所做的修改都是在char数组上进行的,并且修改速度,性能都非常优秀。
37.StringBuilder和StringBuffer的区别
StringBuffer:可变字符串,效率低,线程安全
StringBuilder:可变字符序列,效率高,线程不安全
38.StringBuilder的常用方法
append()--------------追加内容
delete()------------删除部分内容
replace()-----------替换部分内容
insert()--------------插入内容
39.String与正则相关方法
matches():用正则表达是验证当前字符是否符合要求,是返回true,还是false
replaceAll():将当前字符串中满足正则表达是的部分替换为给定的字符串
split():将字符串中满足正则表达式的部分拆分,并将拆分出的以String形式返回
38.Object
所有类的鼻祖
toString和equils
在object中toString返回的是类的全称@地址,没意义,因此要重写
在object中equals比较的是地址,所以需要重写比较值
注意:String和StringBuilder都重写了toString,而String重写了equals,StringBuilder没写
39.包装类
目的:解决基本类型不能直接参与面向对象的开发问题
Integer,Charater,Byte,Short,Long,Float,Double,Boolean
Charater,Boolean直接继承object类
其余继承java.Lang.Number类