一、对象与类
1.面向对象的本质:以类的方式组织代码,以对象的组织封装数据
2.特性:抽象(共性)、封装、多态、继承
3.现实:先有对象,后有类;实际上,先有类,才有对象
类是模板(抽象),对象是一个具体的实例
类:静态的属性,动态的行为
4.方法:
静态方法: 直接类.方法调用
动态方法:实例化这个类
package com;
public class wjm10 {
public static void main(String[] args)
{
Student student = new Student();//实例化类
student.say();调用
}
}
package com;
public class Student {
public void say()
{
System.out.println("say");
}
}
5.一个项目只有一个main方法
6.实例化对象
一个类即使什么都不写,他也会有一个构造器(全为空)
构造器特点:必须与类名相同;且无返回值,也不是void;
可用来实例化初始值
使用new关键字,必须要有构造器;
也可进行有参构造,一旦定义了有参构造,无参构造必须显式定义,否则无效
alt+insert 自动生成构造器
二、封装
高内聚、低耦合
属性私有,可以通过公共的方式去get/set方法
alt+insert直接生成get/set方法
三、继承
extends
java只有单继承,继承是类与类的关系
子类继承了父亲的所有方法,私有的属性不能继承
Crtl+H显示继承树
所有的类,都直接或间接的继承Object
super
调用父类中的东西(除私有)
调用父类的构造器,必须在子类的第一行
super必须只能出现在子类的方法或构造方法中
super和this不能同时调用构造方法
四、方法的重写
重写都是方法的属性,与属性无关
静态方法调用只与实例化对象的左边有关
重写:非静态方法的调用,子类重写了父类的方法,调用的仍是子类的方法
重写:方法名、参数列表相同,方法体不同;修饰符:范围可以扩大,不能缩小private-》protected》default-》public
抛出异常:修饰符范围只能缩小,不能扩大
为什么需要重写?父类的功能,子类不一定需要
五、多态
一个对象的实际类型是确定的,可以指向的引用类型是不确定的:父类的引用指向子类
对象能执行哪些方法,主要看左边的类型
多态是方法的多态
方法是:static、final、private都不能进行重写
instanceof 类型转换 引用类型
System.out.println(x instanceof y)
//能否编译 通过,要看x,y有没有直接关系
子类转换为父类,可能丢失自己的方法
父类转子类,需要进行强制转换
六、Static
静态的类变量、方法可以用类直接访问
静态代码块每次最先执行,且在整个过程中只执行一次
执行顺序:静态代码块->匿名代码块->构造器
被final修饰的类没有子类,即不可以被继承
七、抽象类
abstract
抽象方法:只有名字,没有实现
类单继承,接口多继承
若非抽象子类继承了抽象类,则必须实现父类的所有的方法
不能new这个抽象类,只能靠子类去实现它
抽象类里可以有普通方法,但抽象方法必须在抽象类里
八、接口(interface)
只有抽象方法,接口的本质是契约
默认public abstract,属性都是常量
接口都有实现类(implements),可以一次实现多个接口
九、内部类
一个java类中可以有多个class类,但是public class只有一个
1.成员内部类
2.匿名内部类:没有名字初始化,不用将实例保存在变量中
十、异常
1.错误
2.异常:
(1)运行时异常:数组下标越界、空指针异常、算术异常、丢失资源、找不到类
(2)非运行时异常:
package com;
public class wjm10 {
public static void main(String[] args) {
int a = 1;
int b = 0;
try{//监控区域
System.out.print(a/b);
}catch (ArithmeticException e)
{ //捕获异常
System.out.println("cathch");
}
finally {//善后处理
System.out.print("finally");
}
}
}
捕获多个异常,要从小到大的去捕获Error->Exception->Throwable
异常快捷键:选中这行代码,ctrl Alt+T
主动的抛出异常,一般在方法中throws
自定义异常:只需继承exception类
//测试类
package com;
public class wjm10 {
static void test(int a) throws myExcepction {
if(a>10)
throw new myExcepction(a);
System.out.println("ok");}
public static void main(String[] args) {
try {
test(11);
} catch (com.myExcepction myExcepction) {
System.out.println("sorry");
} finally {
}
}
}
//自定义异常
package com;
public class myExcepction extends Exception{
private int detail;
public myExcepction(int a)
{
this.detail = a;
}
public String toString()
{
return "My Exception{ detail=" + detail + "}";
}
}