1.基本数据类型
- 整数型:byte short int long 默认为int 计算时需要转换
- 浮点型:float double 默认为double
- 布尔类型:boolean
- 字符型
2.引用类型 包括数组,类,接口
类型 引用对象 = new 构造方法( );
Person p = new Person(); Person作为一个引用类型
3.函数或方法
- 方法的重载:函数名一样,参数个数、类型不一样,返回值可相同可不同
- 重载和重写的区别
重写是继承 函数名,参数类型,个数相同 发生在父类和子类关系的类,子类定义与父类完全相同的方法,子类调用时候直接调用子类重写的方法
重载不用继承 函数名相同,参数的类型,个数,顺序不同 发生在一个类中
4.面向对象
设计ATM机的终端系统:
ATM机;
银行卡
钱
类是抽象的 创建的对象是具体的
数据传递时候:考虑的是对象与对象之间的传递数据
对象是类的具体实例
访问权限 --四个
private:本类中
默认: 本包中
protecte:本包中、外包的子类中
public:整个项目中
①封装 把对象的属性和行为结合在一个独立的系统单元内部
- 封装.jar包
cmd命令:javac 执行java文件 使其生成.class文件
javac -d 执行.java文件和.class文件
压缩成.jar文件之后需要重新解压 修改met文件夹中的文件 将包名和类型全部修改 重新压缩 否则执行不了
②继承(泛化)
extends
父类:超类,基类
子类:派生类
super():调用父类构造器
this():调用本类构造器
③多态
多态必须建立在继承的基础上,没有继承就没有多态
当父类作为方法的形参时,所有的子类都可以传递
父类的引用指向子类对象
Fruit f = new Apple();//Fruit作为父类,指向子类Apple
构造器
完成对象的创建(实例化) 一般也完成对象的初始化
public class Person{
String name;
int age;
String sex;
//构造器
public Person(String name, int age,String s){
this.name=name;
this.age=age;
this.sex=sex;
}
}
构造方法
创建对象
为属性赋初始值
默认一个无参数的构造方法
但是一旦定义了有参数的构造方法,则不会生成默认的无参构造方法
关于父类子类的执行顺序
变量
- 局部变量:定义在方法体中,或方法的形参
- 实例变量:类的属性,全局变量
- 静态变量:声明为static的属性
内存的类别
Penson p = new Person("aa","11","male"); //对象名 p 存放在栈内存中 ,属性值存在堆内存中,p 也称为对象的引用
栈内存
- 基本数据类型的局部变量,对象的引用值
堆内存
- 对象的属性,数组的元素 有New 就用堆内存
在其他类中或者方法中 ,要想访问对象的方法或者属性,就必须实例化这个类,然后通过对象名和点操作符来完成;在本类中直接访问
垃圾回收机制:作用于堆内存
super() 调用父类的构造方法
static 类变量(静态变量) 所有类共享,只在类加载的时候创建,执行一遍 可以直接调用,类存在static变量就存在
局部变量不允许被static修饰
实例变量 非static属性
非静态方法 必须 用对象来调用
public class Test{
public void add(int a,int b){}
public static void main(String []args){
Test t = new Test;
t.add(1,2);
}
}
//add是非静态方法,main方法是静态的,所以只能先创造出Test对象,再调用add函数
数据类型的转换
向上转型:子类转换为父类,具有继承和实现关系,损失子类新扩展的属性,方法
向下转型:强制转换
Animal a = new Cat();//向上转换
Cat c = (Cat)a;//向下转换
instanceof 运算符判断经过上溯转型后是哪个子类的
object instanceof class//判断一个对象是否属于一个类
object instanceof interface//判断一个对象是否属于一个接口
//返回值都是boolean
final 可以修饰:
- 类:不能被继承了
- 变量:相当于常量
- 方法:
接口 中只有常量和抽象方法
常量:public static final
抽象方法:public abstract
抽象类
用 abstract 定义的类