JavaSE笔记04

JavaSE笔记04

一:面向对象

  1. java的核心思想就是:oop
  2. 面向对象的本质是:以类的方式组织代码,以对象的组织(封装)数据
  3. 三大特性:封装、继承、多态
  4. 先有类,后有对象。类是对象的模版

类和对象

package day02;

public class Student {
//    属性
    String name;
    int age;

//    方法
    public void study(){
        System.out.println(name+"在学习");
    }
}
package day02;

public class Demo06 {
    public static void main(String[] args) {
//        类实力化后会返回一个自己的对象
        Student xiaoming = new Student();
        xiaoming.name = "xiaoming";
        xiaoming.age=3;
        System.out.println(xiaoming.name);
        System.out.println(xiaoming.age);

        Student xiaohong = new Student();
        xiaohong.name = "小红";
        xiaohong.age = 4;
        System.out.println(xiaohong.name);
        System.out.println(xiaohong.age);
    }
}

构造器

  1. 默认类中有构造器(构造方法),无参数的
  2. 可以自己写带有参数构造方法,无参数的构造方法如果写可以用,不写不可以用(方法重载)
  3. 无参数的构造方法一般是用来设置默认值的
package day02;

public class Student {
//    属性
    String name;
    int age;
    
//    构造方法(构造器)
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
//    方法
    public void study(){
        System.out.println(name+"在学习");
    }


}
package day02;

public class Student {
//    属性
    String name;
    int age;

    public Student() {
    }

    //    构造方法(构造器)
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
//    方法
    public void study(){
        System.out.println(name+"在学习");
    }


}
package day02;

public class Demo06 {
    public static void main(String[] args) {
//        类实力化后会返回一个自己的对象
        Student xiaoming = new Student();
        xiaoming.name = "小明";
        xiaoming.age=3;
        System.out.println(xiaoming.name);
        System.out.println(xiaoming.age);

        Student xiaohong = new Student();
        xiaohong.name = "小红";
        xiaohong.age = 4;
        System.out.println(xiaohong.name);
        System.out.println(xiaohong.age);

        Student daming = new Student("大民", 4);
        System.out.println(daming.name);
        System.out.println(daming.age);

    }
}

二:封装

基本情况

  1. 数据的隐藏
  2. 禁止直接访问一个对象中的数据的实际表示,而应该通过操作接口来访问
  3. 属性私有,get/set
  4. 提高程序安全性,保护数据
  5. 隐藏代码的实现细节
  6. 统一接口
  7. 系统可维护性提高
package day02;

public class Person {
    private String name;
    private int age;
    
    public void study(){
        System.out.println("学习");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
package day02;

public class Demo07 {
    public static void main(String[] args) {
        Person person = new Person();

        person.setName("小明");
        person.setAge(20);

        System.out.println(person.getName());
        System.out.println(person.getAge());
    }
}

三:继承

基本情况

  1. 某一批类的抽象,实现对现实世界更好的建模
  2. extends,子类是父类的扩展
  3. java中只有单继承,没有多继承
  4. 继承是类与类中的关系,类与类之间还有:依赖、组合、聚合
  5. 继承关系的两个类,一个是子类(派生类),一个是父类(基类)
  6. 子类继承父类,拥有父类的全部方法
  7. 如果父类中方法、属性修改的为private,子类不能使用
  8. 所有的类都默认继承Object
package day02;

public class Teacher extends Person {
    
}

super

  1. Super为父类,super.属性、super.方法
  2. 子类构造方法自动隐藏super(),会先调用父类构造器,然后调用自己
  3. 只能出现在子类的方法和构造器中

this

  1. 本身调用者这个对象
  2. 没有继承也可以用
package day02;

public class Person {
    protected String name = "小明";

    public void print(){
        System.out.println("Person");
    }
}
package day02;

public class Student extends Person{
    private String name = "小红";

    public void test(String name){
        System.out.println(name);

//        this为本对象
        System.out.println(this.name);

//        super为父类
        System.out.println(super.name);
    }

    public void print(){
        System.out.println("Student");
    }

    public void test1(){
        print();
        this.print();
        super.print();
    }
}
package day02;

public class Demo08 {

    public static void main(String[] args) {
        Student student = new Student();
        student.test("哈哈哈");

        student.test1();
    }
}

方法重写

public > protected > default > private

子类继承父类方法后,不适用、不需要、不满足,需要自己写

  1. 方法重写:不能添加static,添加以后就不会有效果
  2. 方法修饰只能是一定要扩大,父类的修饰符>子类的修饰符;抛出的异常:范围,可以缩小,不能扩大
  3. 只有子类继承父类才有方法的重写,方法都一样,方法名字一样,方法参数相同
package day02;

public class B {
    public  void test(){
        System.out.println("B===>test");
    }
}
package day02;

public class A extends B{

    @Override
    public  void test(){
        System.out.println("A===>test");
    }
}
package day02;

public class Demo09 {
    public static void main(String[] args) {
        A a = new A();
        a.test();

        B b = new A();
        b.test();
    }
}

四:多态

基本情况

  1. 多态是方法的多态,属性没有多态
  2. instanceof:判断一个对象为甚么类型
  3. 多态存在的条件:
    1. 有继承关系
    2. 子类重写父类方法
    3. 父类引用指向子类对象
package day02;

public class Person {

    public void run(){

    }
}
package day02;

public class Student extends Person{

}
package day02;

public class Demo10 {
    public static void main(String[] args) {
//        一个对象的实际类型是确定的
//        可以指向的引用类型就不确定了

        Student student = new Student();

        Person person = new Student();

        Object object = new Student();

        person.run();

//        子类可以调用父类中的方法
        student.run();

//        父类不能调用子类独有的方法
//        object.run();
    }
}

强制类型转换

  1. instanceof:有继承才能判断,有关系返回True
  2. 强制类型转换:Student stu = (student)person;
  3. 子类强制转换成父类,就丢失自己独有的方法
package day02;

public class Demo11 {
    public static void main(String[] args) {

        Student student = new Student();

        Person person = new Student();

        Object object = new Student();

        System.out.println(student instanceof Person);   //True
        System.out.println(person instanceof Student);   //True

        System.out.println(object instanceof String);    //false
      
      	Student stu = (student)person;
      	stu.run();
    }
}

五:static

  1. 可以修饰属性、方法
  2. 修饰属性的时候,属性可以让类直接使用,对象也可以使用
  3. 修饰方法,该方法可以让类直接调用,对象可以调用
  4. 修饰的方法和属性,当类加载的时候就完成了创建,可以使用了,非静态的只有创建对象的时候才创建
  5. 匿名代码块、静态代码块、构造器。静态代码块 > 匿名代码块 > 构造器。静态代码块只会执行一次
package day03;

import day02.Person;

public class Demo01 {
    {
        System.out.println("匿名代码块");
    }

    static {
        System.out.println("静态代码块");
    }

    public Demo01() {
        System.out.println("构造器");
    }

    public static void main(String[] args) {
        Demo01 demo01 = new Demo01();
    }
}
静态代码块
匿名代码块
构造器

六:抽象类

  1. abstract修饰
  2. abstract可以修改方法,也可以抽象修饰类;抽象方法只能出现在抽象类中
  3. 抽象类不能通过new创建对象,抽象类专门用来让子类继承的
  4. 抽象方法,只有方法的声明,没有具体的方法实现,它是用来让子类实现的
  5. 子类继承抽象类,就必须实现抽象类没有实现的方法,否则该子类也要声明为抽象类
package day03;

public abstract class Demo02 {
    
    public abstract void run();
    
    public abstract int study();
}
package day03;

public class Demo03 extends Demo02 {

    @Override
    public void run() {
        
    }

    @Override
    public int study() {
        return 0;
    }
}

七:接口

  1. 只有普通的规范,定义的是一组规则
  2. interface
  3. 一个类要实现一个接口,就要实现这个接口中所有的方法
  4. 一个类可以实现多个接口,但是只能继承一个类
  5. 可以定义变量,默认就是常量;接口可以通过new创建对象
package day03;

public interface Demo04 {
//    接口中所有的定义都是抽象的。默认的
    public void run();
    
    void study();
}
package day03;

public class Demo05 implements Demo04{
    @Override
    public void run() {
        
    }

    @Override
    public void study() {

    }
}
package day03;

public interface Demo06 {

    void getID();
}

package day03;

public class Demo05 implements Demo04,Demo06{
    @Override
    public void run() {

    }

    @Override
    public void study() {

    }

    @Override
    public void getID() {
        
    }
}

八:内部类

  1. 一个java文件中只能有一个public修改的类,可以有多个class类
  2. 方法中也可以写类:局部内部类
  3. 没有名字的类:匿名内部类

异常机制

基本情况

  1. java把异常当作对象处理,并定义了一个基类java.lang.Throwable作为所有异常的超类
  2. 在javaAPI 已经定义了许多异常类,分为两大类:Error、Exception
  3. 关键字:try、catch、finally、throw、throws
  4. finally:可以有,也可以没有
  5. catch中小的异常写上面,大的异常写下面
  6. 方法才能跑出异常:这个方法出现异常,处理不了;方法中用:throw;方法上用:throws
  7. try--catch添加后,有问题后程序可以继续执行
package day03;

public class Demo08 {
    public static void main(String[] args) {
        int a = 1;
        int b = 0;

        try {
            System.out.println(a/b);
        }catch (ArithmeticException e) {
            System.out.println("变量b不能为0");
        }catch(Throwable e)P{
          	system.out.println("大的异常")
        }finally {
            System.out.println("finally");
        }
    }
}
		public void add() throws ArithmeticException{
        if( b == 0){
            //主动跑出异常
            throw new ArithmeticException();
        }
    }

自定义异常

  1. 用户自定义异常类,只需要继承Excetion类即可
package day03;

public class MyException extends Exception {
//    数字大于10
    private int detail;

    public MyException(int a) {
        this.detail = a;
    }

    @Override
    public String toString() {
        return "MyException{" +
                "detail=" + detail +
                '}';
    }
}
package day03;

public class Demo09 {
//    可能会存在异常的方法
    static void test(int a) throws MyException{
        if (a > 10){
            throw new MyException(a);
        }
        System.out.println("OK");
    }

    public static void main(String[] args) {
        try {
            test(11);
        } catch (MyException e) {
            System.out.println(e);
        }
    }
}
posted @ 2021-01-16 15:32  shenpro  阅读(62)  评论(0)    收藏  举报