- java开发环境:
- JVM:加载.class并运行.class源文件
- JRE:包含JVM和系统类库
- JDK:包含JRE和java开发工具包
- 变量:
- 声明:只能包含字母、数字、_和$,不能一义数字开头
- 严格区分大小写
- 不能使用关键字
- 允许用中文命名但不建议,采用“英文见名知意”使用小驼峰命名法
- 八种基本类型:
1)byte:字节型,用于储存整数的,占用1个字节,范围-128到127。
2)short:短整型,用于储存整数的,占用2个字节,范围-32768到32767。
3)int:整型,用于储存整数的,占用4个字节,范围-2^31到2^31-1。
4)long:长整型,用于储存整数的,占用8个字节,范围是-2^63到2^63-1。
5)float:单精度浮点型,用于储存小数的,占用4个字节,不能表示精确的值。
6)double:双精度浮点型,用于储存小数的,占用8个字节,不能表示精确的值。
7)boolean:布尔型,用于储存true或false,占用1个字节。
8)char:字符型,采用Unicode字符码编码格式,用于储存单个字符,占用2个字节。范围是0到65535。
- 类型之间的转换:
基本类型由小到大依次为:
byte----short----int----long----float----double
char----
1)两种方式:
自动/隐式类型转换:小类型到大类型,强制类型转换:大类型到小类型,强制转换可能会发生溢出
- 两点规则:
整数直接量可以直接赋值给byte,short,char,但是注意不要超出范围
byte,short,char参与运算时,系统会先将这三种类型自动转换为int型,在运算
- 运算符:
算术:+,-,*,/,%,++,–
关系:>,<,>=,<=,==,!= boolean
逻辑:&&,||,! boolean
赋值:=,+=,-=,*=,/=,%=
字符串连接:+
条件/三目:boolean?数1:数2
- 分支结构
if结构:一条路。if...else结构:两条路。if....else if 结构:多条路。
Switch...case结构:多条路,break跳出Switch判断。
- 循环结构:
循环三要素1.循环变量的初始化2.循环的条件(以循环变量为基础)3.循环变量的改变(向着循环的结束变)。break:跳出循环。continue:跳出循环体中剩余语句进行下一次循环
while结构:先执行后判断,有可能一次都不执行
do...while结构:先判断后执行,至少执行一次
for循环结构:应用率高、与次数相关。
- 数组
数组是一种引用数据类型,相同类型元素的集合,通过(数组名.length)可以获取数组的长度(元素个数),数组下标从0到数组长度减一。
数组的赋值方法:
System.arraycopy(a,1,b,0,4);
int[] b = Arrays.copyOf(a,6); a = Arrays.copyOf(a,a.length+1); //数组的扩容
- 方法
方法的五要素:修饰词,返回值类型,方法名,参数列表,方法体。
return:结束方法的执行
return 值:结束方法的执行,返回结果给调用方。
方法的调用:
无返回值:方法名(有参传参);
有返回值:数据类型 变量 = 方法名(有参传参);
二、面向对象
1. 类和对象、方法的重载
对象:软件中真实存在的单个个体/东西 类:类别/类型,代表一类个体
类是对象的模板,对象是类的具体的实例
类中包含:对象的属性/特征---------成员变量 对象的功能/行为/动作-----------方法
方法的重载:
发生在同一类中,方法名相同,参数列表不同
编译器在编译时会根据方法的签名自动绑定方法
2. 构造方法、this
构造方法:
作用:给成员变量赋初始值
与类同名、没有返回值类型
在创建(new)对象时被自动调用
若自己不写构造方法,则编译器默认提供一个无参构造方法,若自己写了,则不再默认提供
构造方法可以重载
this:
this.成员变量名----------------------------访问成员变量
this.方法名()---------------------------------调用方法
this()-------------------------------------------调用构造方法
3. 引用类型数组、继承、super
继承:
作用:代码复用
通过extends来实现继承
超类/父类:派生类所共有的属性和行为
派生类/子类:派生类所特有的属性和行为
派生类可以访问派生类的和超类的,超类不能访问派生类的
一个超类可以有多个派生类,但一个派生类只能有一个超类------单一继承
具有传递性
super:
super.成员变量名--------------------------访问超类的成员变量
super.方法名()-------------------------------调用超类的方法
super()-----------------------------------------调用超类的构造方法
4. 向上造型、方法的重写
向上造型:
超类型的引用指向派生类对象,能点出来什么,看引用的类型。
方法的重写:
发生在父子类中,方法名相同,参数列表相同
重写方法被调用时,看对象的类型
重写与重载的区别:
重写(override/overriding):发生在父子类中,方法名相同,参数列表相同
重载(overload/overloading):发生在同一类中,方法名相同,参数列表不同
5. package和import、访问控制修饰符、static、final
package:声明包
作用:避免类名的冲突
同包中的类不能同名,不同包中的类可以同名
类的全称:包名.类名,包名常常有层次结构
建议:包名所有字母都小写
import:
同包中的类可以直接访问,不同包中的类不能直接访问
权限修饰符:
public:公开的,任何类
private:私有的,本类
protected:受保护的,本类、派生类、同包类
默认的:什么也不写,本类、同包类
注意:
类的访问权限只能是public或默认的
类中成员的访问权限如上4种都可以
访问权限由高到低依次为:public>protected>默认的>private
static:
静态变量:
由static修饰
属于类,存储在方法区中,只有一份
常常通过类名点来访问(也可以用对象名来引用,但是不推荐)
何时用:所有对象所共享的数据(图片、音频、视频等)
静态方法:
由static修饰
属于类,存储在方法区中,只有一份
常常通过类名点来访问(也可以用对象名来引用,但是不推荐)
静态方法中没有隐式this传递,所以不能直接访问实例成员
何时用:方法的操作与对象无关
静态块:
由static修饰
属于类,在类被加载期间自动执行,一个类只能加载一次,所以静态块也只执行一次
何时用:加载/初始化静态资源(图片、音频、视频等)
final:
修饰变量:变量不能被改变
修饰方法:方法不能被重写
修饰类:类不能被继承
6. static final常量、抽象方法、抽象类
static final:
必须声明同时初始化
由类名点来访问,不能被改变
建议:常量所有字母都大写,多个单词用_分隔
编译器在编译时会常量直接替换为具体的数,效率高
抽象方法:
由abstract修饰
只有方法的定义,没有具体的实现(连{}都没有)
抽象类:
由abstract修饰
包含抽象方法的类必须是抽象类,不包含抽象方法的类也可以声明为抽象类
抽象类不能被实例化(new对象)
抽象类是需要被继承的,派生类:
重写所有抽象方法
也声明为抽象类
7. 成员内部类、匿名内部类
成员内部类:
类中套类,外面的称为外部类,里面的称为内部类
内部类通常只服务于外部类,对外不具备可见性
内部类对象只能在外部类中创建
内部类中可以直接访问外部类的成员(包括私有的),在内部类中有个隐式的引用指向了创建它的外部类对象------外部类名.this
匿名内部类:
若想创建一个类(派生类)的对象,并且对象只创建一个,此时该类不必命名,称为匿名内部类
匿名内部类中不能修改外面变量的值,因为在此处该变量默认为final的
8. 接口
是一种引用数据类型
由interface定义
只能包含常量和抽象方法
接口不能被实例化(new对象)
接口是需要被实现/继承的,实现类/派生类:
----必须重写所有抽象方法
一个类可以实现多个接口,用逗号分隔,若又继承又实现时,应先继承后实现
接口可以继承接口
9. 多态
向上造型/自动类型转换:
超类型的引用指向派生类的对象
能点出来什么,看引用的类型
能造型成为的数据类型有:超类+所实现的接口
强制类型转换,成功的条件只有如下两种:
引用所指向的对象,就是该类型
引用所指向的对象,实现了该接口或继承了该类
10. 内存管理
堆:
存储new出来的对象(包括实例变量)
垃圾:没有任何引用所指向的对象
垃圾回收器(GC)不定时到内存中清扫垃圾,回收过程是透明的(看不到的),
不一定一发现垃圾就立刻回收,通过调用System.gc()可以建议JVM尽快调度GC回收
实例变量的生命周期:
创建(new)对象时存储在堆中,对象被回收时一并被回收
内存泄漏:不再使用的对象没有被及时的回收,严重的泄漏会导致系统的崩溃
栈:
存储正在调用的方法中的局部变量(包括方法的参数)
调用方法时,会在栈中为该方法分配一块对应的栈帧,栈帧中存储局部变量(包括方法的参数),方法调用结束时,栈帧被自动清除,局部变量一并被清除
局部变量的生命周期:
调用方法时存储在栈中,方法调用结束时与栈帧一并被清除
方法区:
存储.class字节码文件(包括静态变量、所有方法)
方法只有一份,通过this来区分具体的访问对象
API基础:
1. String常用方法、StringBuilder
String常用方法:
length():获取字符串的长度(字符个数)
trim():去除当前字符串两边的空白字符
toUpperCase()和toLowerCase():将当前字符串中的英文部分转为全大写/全小写
startsWith(String str)和endsWith(String str):判断当前字符串是否是以给定的字符串开始/结尾的
charAt():返回当前字符串指定位置上的字符
indexOf()和lastIndexOf():检索给定字符串在当前字符串中的开始位置
substring():截取当前字符串中指定范围内的字符串
String的静态方法valueOf():将其它数据类型转换为String
StringBuilder常用方法
append():追加内容
replace():替换部分内容
delete():删除部分内容
insert():插入内容
reverse():翻转内容
2. 正则表达式、Object、包装类
正则表达式:
正则表达式是用来描述字符串内容格式,使用它通常用来匹配一个字符串的内容是否符合要求
包装类:
包括:Integer、Character、Byte、Short、Long、Float、Double、Boolean。
其中Character和Boolean是直接继承自Object的,而其余6个包装类都继承自java.lang.Number