类和对象

类:是具有相同属性和方法的一组对象的集合的抽象化描述;

类是对象的抽象化描述,对象是类的实例化;

创建对象

People p=new People();  //类名  对象名=new 类名();
public void show() { //无参方法
        for(int i=0;i<=4;i++) {
            System.out.println(name+"\n"+"年龄:"+age+"\n"+"班级:"+classr+"\n"+"爱好:"+hobby);    
        }
    }
    public int add(int a,int b) {  //有参方法
        return a+b;
    }

方法

有参方法

public class People{
                    //形参;代替将来会传入的参数;
    public void a(int a,int b){        //有参方法必须传参
        this.a=a;            //this代表本类对象;
    }
    public static void main(String[] args){
        People p=new People();
        p.a(10,10);    //传入的实参;
    }
}

构造方法

//没有返回值类型;修饰符与类的修饰符一致,方法名与类的名一致;
public People(){     //每个类都默认有一个无参的构造方法;

}

方法的重载

public People(){     

}
//在同一个类中,方法名相同,参数列表不同,这样的方法叫-->方法的重载;
public People(int a){     //对应不同的参数列表进行调用;

}
public People(byte b){     

}

成员变量和局部变量

成员变量名与成员变量名不能相同,局部与局部变量名不同;成员变量名和局部变量名可以相同;

变量在哪个方法中声明就可以在哪个方法中使用;

封装

private修改元素的可见性;被private修饰的元素被隐藏;

使用private封装的属性只能在本类中使用;可以写一个公共方法(public),方便其他类调用

//在setter/getter方法中进行条件或流程的合法性判断
public void setAge(int age){  //set设置值方法
    this.age=age;
}
public int getAge(){  //get获取值方法;参数
    return this.age;
}

访问修饰符

修饰符 同一个类中 同一个包中 不同包的子类中 任何地方
private 可以 不可以 不可以 不可以
默认修饰符 可以 可以 不可以 不可以
protected 可以 可以 可以 不可以
public 可以 可以 可以 可以

protected在不同包的子类中使用必须有继承关系;

继承

super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。

1、子类不能继承父类中的构造方法;子类可以继承父类中没有封装的属性和方法,继承的public(修饰符)方法可以跨包,

2、任何一个类有且只有一个父类;

3、父类中所有未超出修饰范围的属性或方法都会被子类继承;

public Dog(){
    //如果父类没有无参构造方法时,必须显式调用;
    super()/super(参数);//调用父类构造器;只能存在于子类构造器的第一行代码;如果不写也会进行隐式调用;
}
public void setAge(int age){ //子类里的方法
    super.age/super.setAge(); //super.方法名或属性名;调用父类中的属性或方法;
}

方法的重写

//父类方法
public void show(){
    System.out.printin("父类show方法");
}
//子类方法
public void show(){
    System.out.println("子类show方法");
}

1、子类中,方法名,返回值类型,参数列表均与父类保持一致;

2、修饰符不严于父类;

3、子类参数列表不同于父类是重写方法的重载

4、子类的重写方法覆盖父类方法

多态

//判断是否能创建对象,关键是构造器是否运行;
//父类Animal,子类Cat
//1、继承关系的多态(类型转换)
Cat c=new Cat();
Animal a=c;  //子类转换成父类对象可直接转

Animal a=new Cat();
Cat c=(Cat)a;   //父类对象转换成子类对象需要强转
//2、方法的多态(方法重写)
Animal a=new Cat();
a.show();   //父类对象调用的是子类重写的方法;show方法是子类重写的方法;重写的show方法覆盖了父类show方法
a.catshow(); //父类对象不能调用子类特有的方法
//3、同一类中的多态(方法的重载)
Cat c=new Cat();
c.show();
c.show(10);

关键字

final关键字

1、被final修饰的变量叫常量;

2、常量被声明时必须赋值,常量的值不可更改;

3、变量名全部大写

4、被final修饰的类称为超类且不能被继承,

5、final修饰方法,则该方法不允许被重写;

static关键字

1、static修饰的属性名或方法名调用时不用创建对象,直接属性名或方法名直接调用

2、static可以修饰代码块,代码块称为静态代码块;如果有多个静态块,按顺序加载;每个静态代码块只会被执行一次

3、静态方法中不能直接调用非静态资源;调用时需要创建对象;本类中的非静态方法可以调用静态属性;

4、final 和static可同时修饰对象;

static int age;
String name;
//静态代码块在类被加载时运行,且只会在首次运行时运行一次;
static {
    System.out.println("这是静态代码块");
}
//Cat c1=new Cat();会运行静态代码块
//Cat c2=new Cat();不会再次运行

抽象类与接口

1、抽象类中可以存在抽象方法和普通方法;但抽象方法必须存在于抽象类中;

2、抽象类不能new自己的构造器创建自己的实例化对象;

3、抽象类中的抽象方法在子类中必须重写(除非子类也是抽象类);

接口

1、接口中的方法全都是公共的抽象方法,不存在其他方法;

2、接口中的所有方法默认都是:public abstract;不能存在普通方法

3、接口中的变量都是公共的静态的常量(public static final);

4、接口没有构造方法;

5、实现的必须是接口,一次可以实现多个接口;但继承只能继承一个;

6、接口的方法需要类实现;

public class OneClass extends Father implements Oneinterface,Oneinterface2 {
    //可实现多个接口,但只能继承一个类,可以继承的同时实现接口
}
public interface Oneinterface {

    int a=10;
    String name="小明";
    //功能定义
    void show();
}
public class OneClass implements Oneinterface{
    //实现类,普通类中所有的抽象方法必须重写
    @Override
    public void show() {
        System.out.println("重写的show方法");

    }
}

toUpperCase()//大写
toLowerCase()//小写

异常

捕获异常

1、try{}catch{}finally{}中有return(return可以在try或catch中)会先立刻执行finally,在执行return;

2、终止虚拟机(system.exit(0);)时才会让finally不会被执行;

int i=10;
try {
    return i;    //return执行前会先执行finally但return的值(基本数据类型)始终不会变,如果是引用数据类型则会改变 

        }catch (Exception e) {    

        }finally {    
            i=20;
            System.out.println("始终会被执行");
        }
//try不能单独出现,必须和catch或finally一起出现;
try {
            System.out.println("输入数字");  //出现异常后后面的语句不会继续执行
            int num1=sc.nextInt();
            System.out.println("输入第二个数字");
            int num2=sc.nextInt();
            System.out.println(num1+num2);
        }catch(InputMismatchException e) {        
            System.out.println("请正确输入数字");
        }catch (Exception e) {    //所有异常都可以转化成Exception异常

        }finally {        //finally中的语句不管异常是否被捕获都始终会被执行;
            System.out.println("始终会被执行");
        }
        System.out.println("程序结束");

抛出异常

1、throw是在方法体内抛出一个异常对象;

2、throws是在方法体前抛出任意多个异常类型;

3、类继承自Exception时throw抛出自定义异常时要先用throws抛出;

4、运行时异常(RuntimeException)可以通过throw抛出,非运行时异常必须通过throws抛出;

public void show() shrows InputMismatchException,NullPointerException,···{

}

public void show() { 
    thorw new InputMismatchException();
}

常见的异常类型

  • 异常类型 说明
    Exception 异常层次结构的父类
    ArithmeticException 算术错误情形,如以零作除数
    ArrayIndexOutOfBoundsException 数组下标越界
    NullPointerException 尝试访问 null 对象成员
    ClassNotFoundException 不能加载所需的类
    IllegalArgumentException 方法接收到非法参数
    ClassCastException 对象强制类型转换出错
    NumberFormatException 数字格式转换异常,如把 "abc" 转换成数字