类和对象:
局部变量:
- 定义在函数、static块、for循环等中的变量;
- 没有默认值,不给赋值用的时候会报错;
成员变量(属性):
- 创建对象以后分配内存空间
- 有默认值:int = 0,String = null, char = ‘’, float = 0.0, boolean = false;
注意:特定情况下,包含get和set方法的成员变量才叫属性,但一般情况下成员变量就是属性。
成员方法:
创建对象之后才会分配内存空间
对象:
Card c = new Card();
对象名中存放的是对象的引用(对象所在内存的地址);
标志符:
- 类名、变量名、方法名、数组名
- 类名首字母大学,方法名首字母小写并且驼峰命名
方法重载:
- 在同一个类中,方法名相同,参数列表不同(参数个数不同或参数类型不同)。
- 与返回类型无关,可以相同也可以不同。
方法重写(方法覆盖):
- 存在于父子类中,方法名相同,参数列表也相同
- 子类重写方法,不能直接调用父类属性
- 调用父类中被覆盖的方法:super.print();
多态:
- 就是多种形态
- 指Java程序中一个类或多个类中可以定义多个同名方法,这多个同名方法完成的操作不同
- 静态多态(编译时多态):通过方法重载实现的
- 动态多态(运行时多态):通过方法覆盖实现的
访问控制符:
类的访问控制符:
- public:该类可以访问不同包中的类
- default:class前面什么都不加,该类只能访问同一个包中的类
类中的属性和方法的访问控制符:
- default:在不同包中,不可以该属性或方法
- protected:在同一包中可以访问该属性或方法,在不同包的子类中,可以访问该属性或方法,但是在main方法中不能访问
- public
- private
静态:
静态变量(类变量):
- static int money = 5000;
- 静态变量所有对象共用一份
- 可以被类名或者对象调用
- 如果对象改变其值,那么在所有对象中其值都会改变。
- 在第一次使用类的时候就会分配内存空间。(类代码加载完毕就分配内存空间)
- 类代码加载:使用类中的方法或变量或创建对象的时候加载
静态方法:
- static void print(){}
- 可以用类名访问
- 不能访问成员变量,可以访问静态变量
- 在类代码加载完毕分配内存空间
静态块:
- static{}
- 在类代码加载完毕,调用类中的方法或变量之前调用(包括静态变量、静态方法)
- 用于初始化
继承:
- extends
- 子类拥有父类所有的非私有的属性和方法
- 一个子类只能继承一个父类
- 子类构造函数默认调用父类无参构造函数,来创建父类对象
- 父类如果没有无参构造函数,手动调用父类有参构造函数->super(name)
上转型变量:
- 子类对象赋给父类引用
- 变量分为两种:值类型(存放的是值)、引用类型(存放的是地址)
- 上转型变量的特点:
可以访问从父类继承下来的属性和方法
不可以访问子类特有的属性和方法
如果子类将父类的方法重写了,则访问重写后的
父类引用可以强转成子类引用类型
随机数:
- java.util.Random
Random random = new Random();
int num = random.nextInt(4);//0-3随机数 - java.lang.Math
int num = (int)(Math.random() * 10 ) % 4;//0-3随机数
解释:Math.random在0-1之间
Math.random * 10在0-10之间
( Math.random * 10) % 4余数为0-3
抽象类:
- 含有抽象方法的类
- 可以有非抽象方法和属性
- 抽象类不能实例化对象,只能通过子类重写抽象方法(也叫做方法实现)来实例化对象
- public abstract class Animal{}
- public abstract void sing();
接口:
- 一个类可以实现多个接口,用逗号隔开
- 一个类如果既有继承又有实现,则先继承后实现
- pubic interface ICatch{}
- 接口中可以有静态常量:
public static final int a = 3;
等价于 int a = 3;(public static final可省略) - 接口中的方法都是 public abstract 方法,其中public abstract可省略
- 接口类型引用可以指向实现类对象:ICatch iCatch = new Dog();
- 接口可以继承接口
final关键字:
- public static final int a = 3;//修饰变量,变量值不能被修改,成为一个常量
- 修饰方法,方法不能被重写
- 修饰类,类不能被继承
异常:
- finally{}永远都执行,哪怕前面有return
自定义异常:
- public class MyException extends Exception{}
- 手动抛出异常:
try {
if(age < 0) {
throw new MyException();
}
} catch (MyException e) {
System.out.println(e.getMessage());
}
- 方法抛异常:
public void checkAge(int age) throws MyException{
if(age < 0){
throw new MyException();
}
}
try {
person.checkAge(-5);
} catch (MyException e) {
e.printStackTrace();
}
内部类
- 不允许定义静态变量,但可以定义 final static常量
- 外部类只能通过创建内部类的对象来访问内部类
- 内部类可以直接访问外部类:outname = “out”; 或 OuterClass.this.outname = “out”;
- 在外部类外访问内部类:
OuterClass outerClass = new OuterClass();
OuterClass.InnerClass innerClass = outerClass.new InnerClass();
innerClass.innerFun();