第四周java笔记
多态性
多个样子,
Person e = new Student;
e.school = “xxx”; //报错,e是School类型,Person中无School属性,类中无School
父类类型的使用可以指向子类对象
调用方法时,与之相反(和内存有关)
instanceof操作符
看看对象是不是子类
Student s = new Student();
Person p = new Person();
System.out.println(s instanceof Person);
//输出turn,说明子类属于Person
System.out.println(p instanceof Person)
//输出turn
System.out.println(p instanceof Student)
//输出false
Person e = new Student();
System.out.println(e instanceof Student);
//输出turn
Object类
Equals:判断是不是一个对象
例如:
System.out,println(p.equals(e));
//输出turn或false
hashCode方法:获得hash码
toString()方法:引用对象所在地址
父类可以接受子类的对象
Objact o = new Student();
//没问题,
Objact o = new Person();
//可以用父类对象接受任何子类的实例
类型转换
对象的转换: 子类:Student 父类:Person
Student s = new Student();
Person p = s; //自动转换
Person p = new Person();
Student s = (Student) p ; //强制转换
无父子类关系是非法的
Objact是所有类的父类,可自动转换
操作符与equals方法
Person p1 = new Person();
Person p2 = new Person();
System.out.println( p1== p2);
//输出false,不是指向一个对象
当:Person p2 =p1;
//输出turn
当:Test t = new Test();
System.out.println( p1== t); //报错,之间无关系,不兼容
Person p1 = new Person(“abc”);
Person p2 = new Person(“abc”);
System.out.println( p1== p2); //输出 false,比较对象
System.out.println( p1.equals(p2)); //输出turn,比较内容
包装类
装箱:
Int I = 123;
Integer t = new Integer();
System.out.println(t); //输出123
拆箱:
Integer i = new Integer(123);
int a = i.intValae();
System.out.println(a); //输出123
Static关键字
Static string country
————Chinese country = “中国”;
//只写一次中国
将country变成静态
练习:判断s是不是空字符串
单例设计模式
只有一个实例,只会new一次,这个类只被实例化一次,以后只调用这一个实例
饿汉式:构造方法私有化,调用前就被new好,变量访问不了,用方法访问
懒汉式:来了第一个人开始做,后面都做这个,在第一次调用方法时new对象,以后再有人调用就返回之前new好的对象
区别:什么时候new对象
main方法
有static,通过类名.方法名调用
内部类
一个类的内部可以再写一个类
可以调用所属类的任何变量
内部类只要解决java不能多重继承的问题
如果内部类是static的,就不能再适用外层类非static的成员
代码块(初始化块)
顺序:多个代码块用顺序,
静态代码块只能用静态的属性或方法
用方法是直接写方法名即可,如: shouAge();
在测试中: new Person(); //类名
TestPerson tp = new TestPerson(); //tp相当于一个人(类)
测试时:tp.name = “zhangsan”;
tp.age = 12;
final关键字(最终)
和static差不多,修饰常量时,常量必须显示赋值,且不能改变
修饰的类不能被继承
修饰的方法不能被重写
抽象类
抽象类必须重写
构造器:public+类名
Super访问父类的属性方法
如:
测试时:
抽象类就像大纲,一定会被重写
计算循环50000次所用的时间:
用结束时间-开始时间
接口interface
解决不能多重继承的问题,
接口可以继承接口
如果类没有实现接口的所有方法,那么这个类就要定义为抽象类
继承在前,接口在后,先写extends后写interface
也就是父类不能随意更改,且继承要有逻辑关系,接口可以解决没有逻辑关系也可继承的问题
操作如下:
测试:
工厂方法
每人一部分
异常处理
运行时异常:数组越界,空指针异常,除以0
数组越界:
空指针异常:
除以0:
集合
HachSet集合
在那个位置由hashcode值决定
add:添加元素
remove:移除
contains:判断
clear:清空
迭代遍历集合:for each
Set存的值是不重复的,能存null
size:获取元素个数
泛型
只让集合存一种类型的元素
类名后加尖括号
如:
不定义泛型时可以随便写
Io流
标准输入和输出