源文件定义类注意事项:
1 一个源文件定义多个类时,只能有一个public类,其余的均为非public类
2 源文件的名称须和public类的类名保持一致
3 如果一个类定义在某个包中,那么pachage语句应该在源文件的首行
4 如果源文件包含import 语句,那么应该放在package语句和类定义之间,如果没有package 语句,则应该放在源文件最前面
一个类中可包含以下类型变量:
1 局部变量 方法内
2 成员变量 类内方法外
3 类变量 类内方法外,且声明为static 类型
构造方法的定义方式:
方法名和类名相同,如果不提供定义,则java编译器会为该类提供一个默认的构造方法,创建一个对象时,至少会调用一个构造方法,一个类可以有多个构造方法
创建一个类的对象
声明 + 实例化 + 初始化 例:
类名 实例名 = new 类名(参数)
JAVA包
主要是用来对类进行分类的
引用类型
引用类型的变量类似于c的指针,引用类型指向一个对象,变量一旦声明后,类型就不能改变,对象和数组都是引用数据类型,所有引用类型的默认值均是null,一个引用变量可以用来引用任何与之兼容的类型
JAVA 常量
常量在运行时不可修改,使用 final 关键字修饰即可 final double PI = 3.1415926
常量名可用小写,但是为了便于识别,使用大写
自动类型转换
涉及到不同的数据类型运算时,转换从低级到高级
低级 高级
byte,short,char—> int —> long—> float —> double
转换规则:
1 不能对布尔值进行类型转换
2 不能把对象类型转换为不相关类的对象
3 在把容量大的类型转换为容量小的类型时必须使用强制类型转换
4 转换过程中,可能存在溢出或者精度损失
5 浮点数到整数的转换是通过舍弃小数,不是四舍五入
强制类型转换
1 转换类型必须兼容
2 格式 (type)value type 是要强转类型后转换的数据类型
隐藏的强制类型转换
1 整数的默认类型是int
2 浮点型不存在这种情况 因为浮点型数字后面需跟上f或者F
JAVA 局部变量
局部变量没有默认值,声明后必须初始化后才可以使用
类变量或静态变量
类中以static 关键字声明 ,方法以外,一旦初始化后,数值不可改变
静态变量在第一次访问时创建,程序结束时销毁
静态变量储存在静态存储区
常量
常量是指声明为public/private,final和static类型的变量。常量初始化后不可改变。
访问修饰符
default 什么都不写,同一包内可见
private 同一类内可见
public 对所有类可见
protected 对同一包内的类和所有子类可见
非访问修饰符
static 用于声明静态变量(类变量)静态方法
final 修饰变量时必须显式指定初始值,修饰方法时,可以被子类继承,不可以被重写
abstract 修饰类,抽象类不能实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充
synchronized 修饰的方法,同一时间只能被一个线程访问
volatile 修饰的成员变量,在每次被线程访问时,会强制从共享内存重新读取该成员变量的值,并在发生变化时,强制改写内存,这样任何时刻,两个不同的线程总是看到某个成员变量的同一个值
java的类支持单继承,不支持多继承,支持多重继承
继承关键字 extends 和 implements
extends 单继承
implements 可变相实现多继承,多个继承接口,非继承类,且继承接口的方法必须重写一遍,并不方便,不重写会报错,不推荐使用
类中的静态main方法 类似于python 中的main方法,是独立于类本身的,不能使用this关键字,必须先示例化一个对象,再去调用该对象的某个方法或者属性,而类方法,或者成员方法以及构造方法中可以使用this关键字,this 关键字可以用来解决实例变量与局部变量重名发生的冲突
super 关键字
主要用于继承时,调用父类的某个方法,例如,子类重写了父类的eat() 方法,super.eat() 实现调用父类的eat() 方法,this.eat() 实现调用重写的eat()方法,被final 关键字修饰的类是不可继承的
重写 发生在类继承关系时,重载发生在同一个类中相同的方法名,不同的参数
JAVA接口
interface 是抽象方法的集合,接口不是类,编写方式和类相似,类是用来描述对象的属性和方法,接口包含类要实现的方法
除非实现接口的类是抽象类,否则该类要定义接口中的所有方法