类
对名词的一种抽象的概念,是模子
对象
是一类事物的具体实例
属性
用于描述数据的名词
方法
事物所具有的功能
类与对象的关系
互推关系
类图的格式
例如:
定义类的格式
[访问权限修饰符][修饰符]class 类名{
//成员属性格式
[访问权限修饰符][修饰符…]数据类型 属性名[=值];
//成员方法格式
[访问权限修饰符][修饰符…][返回值类型]方法名([参数列表…]){
方法体;
}
}
注意:
1.在类的格式中[]表示可以省略
2.其中的…表示可以有多个
3.访问权限修饰符:
①类的访问权限修饰符有两种
public、缺省
在一个代码编辑区,可以编写多个类(一般不建议使用),但是类名不能重复,且只能有一个类是被public修饰的,其中都是缺省不写的。
②类成员中的权限修饰符
4.修饰符(4个)
⑴static:静态的,能够修饰类成员和代码块
注意:
①在被static修饰的代码块或者成员方法中调用static修饰的类成员,>则该成员一定要改成static修饰。
例如:
public class TestDemo {
static int age;
static{
age = 100;
}
}
② 被static修饰的类成员可以直接通过类名.的方式调用
例如:
public class Test {
public static int age = 100;
}
public class TestDemo {
public static void main(String[] args) {
System.out.println(Test.age);
}
}
③static代码块优先于主函数加载
⑵final:最终的,能够修饰类和类成员
①特点:
修饰的类不能被继承
修饰的成员属性是常量:其中的常量名全部大写且一定要有初始值。
修饰成员方法:常用的方法是public final Class getClass();该方法是通过反射机制获取当前正在运行的类。使用该方法可以代替new来创建对象,更节省内存空间。
⑶abstract:抽象的,能够修饰类和成员方法
修饰的类不能实例化(即不能new)
修饰的方法没有方法体
⑷synchronized:同步
能够修饰成员方法和代块
总结:
①实参和形参:
实参:方法被调用时传递的参数
形参:方法被定义时传递的参数,一定要表明参数类型
②方法不能被嵌套,在一个完整的方法体中,不能定义另一个方法,但是可以调用另一个方法。
⑵方法的特性:方法的重载(OverLoad)
①含义:
在同一个类中出现一次以上并且名字相同的方法。
②含义:
方法重载三要素:
方法名一致
返回值类型无关
参数列表不同(位置不同或者个数不同或者数据类型不同)
注意:
⑴ this关键字:
①代表本类对象
②只能定义在方法中
⑵声明和实例化(创建)对象的格式:
①声明:
类名 对象名;
②创建(实例化):
类名 对象名 = 类名();
⑶如果一个类没有明确定义构造器,JVM会提供一个默认无参构造器,如果定义了,JVM则不会提供任何的构造器。
⑷this和super关键字的区别:
super:父类对象,定义在方法体中
this:本类对象,定义在方法体中
如果this和super同时出现,先写super。
注意:
在使用继承的时候,子类可以直接调用父类中的所有被public/protected修饰的类成员,然而父类不能调用子类中特有的特性。
解析:
在编译阶段p是Person类型的,只能调用Person类中的show()方法。
在运行阶段p指向的是Student类型的对象,因此最终调用Student类中的show()方法。
注意:上述方式指 非静态的成员方法。
(4)当父类的引用指向子类的对象时,对于静态方法来说,最终调用父类的版本。
为了避免上述错误的发生,可以使用instanceof运算符进行判断,格式如下:
if(引用变量名 instanceof 引用类型){ 语句块; }
当引用变量名真正指向的对象是后面的引用类型时,则返回true,并执行语句块;
否则返回false
例:
Animal a1 = new Animal(“动物”,18);//父类
Dog d1 = new Dog(“柯基”,17,“花色”);//子类
Animal a2 = new Dog(“柯基”,17,“花色”);//使用引用,父类的引用指向子类的对象
①System.out.println(a1 instanceof Dog);//false
②System.out.println(a1 instanceof Animal);//true
③System.out.println(a2 instanceof Dog);//true
④System.out.println(a2 instanceof Animal);//true
⑤System.out.println(d1 instanceof Dog);//true
⑥System.out.println(d1 instanceof Animal);//true