JAVA基础之面向对象

面向对象编程的本质是:以类的方式组织代码,以对象的形式封装数据。

三大特性:封装、继承、多态

从认识论角度先有对象后有类

从代码运行角度先有类后有对象

静态方法

 public class Demo02 {
 /*   静态方法 static
      调用时 类名+方法名
      Student.say();
 ​
  */
    /*非静态方法
    实例化这个类:对象类型 对象名 = 对象值;
    Student student = new Student();
    student.say();
     */
 }

构造器

alt+insert constructor 生成构造器

  1. ok 有参

  2. select none 无参

无参

 //一个项目应该只存在一个main方法
 public class Application {
     public static void main(String[] args) {
         //new 实例化了一个对象
         Person person = new Person();
 ​
         System.out.println(person.name);
 ​
     }
     }
 ==================================
 public class Person {
 /*一个类即使什么都不写,它也会存在一个方法
 即构造器构造的无参方法:
 1.方法名和类名相同
 2.没有返回值,不写void
  */
     String name;
     //实例化初始值
     //1.使用 new 关键字,本质实在调用构造器
     //2.构造器一般用来初始化值
     public Person(){     //无参
         this.name = "傻逼孙宇婷";
     }
 }

有参

 //一个项目应该只存在一个main方法
 public class Application {
     public static void main(String[] args) {
         //new 实例化了一个对象
         Person person = new Person("傻逼孙宇婷");
 ​
         System.out.println(person.name);
 ​
     }
     }
 ==============================
 public class Person {
 ​
     String name;
     
      public Person() {
     }
     
   //有参构造: 一旦定义了有参构造,使用无参构造就必须显式定义一个无参构造
     public Person(String name) {
 ​
         this.name = name;
     }
 ​
 }

this.name(当前类) = name(参数传进来的值);

对象的引用

引用类型:基本类型(8)

对象是通过引用来操作的:栈--->堆(地址)

属性

字段Field 成员变量

默认初始化:

数字: 0 0.0

char: u0000

boolean : false

引用: null

修饰符 属性类型 属性名 = 属性值

封装(数据的隐藏)

通常,应禁止直接访问一个对象中数据的实际表示,而应通过相应的接口来访问,这称为信息隐藏

Alt + Insert get、set 方法

1.提高程序安全性,保护数据

2.隐藏代码的实现细节

3.统一接口,get、set

4.增加系统的可维护性

继承

在java中,所有的类,都默认直接或间接继承Object

java中类只有单继承,没有多继承

私有的东西无法被继承

super:

1.调用父类的构造方法,必须在子类构造器的第一行(子类构造器默认调用父类构造器),super只能出现在子类的方法或构造方法中

2.父类没有无参构造,子类不能调用无参(super())

3.super和this 不能同时调用构造方法

VS this

代表的对象不同:

this :本身调用者这个对象

super : 代表父类对象的应用

前提:

this :没有继承也可以使用

super: 只能在继承条件下才可以使用

构造方法:

this(); 本类的构造

super();父类的构造

重写

重写是方法的重写,与属性无关

静态方法的调用只和左边定义的数据类型有关

父类的引用可以指向子类,输出还是父类。

 静态方法
 B b = new A();//A是B的子类
 b.test();//调用结果仍为B

Override 重写

alt + Insert

 @Override //注解:有功能的注释

重写只与非静态方法有关

 非静态方法
 B b = new A();//A是B的子类
 b.test();//调用结果为A

子类重写了父类的方法,执行子类的方法

重写:需要有继承关系,子类重写父类的方法,只在public 下

1.方法名必须相同,方法里面的内容可以不同

2.参数列表必须相同

3.修饰符:范围可以扩大,不能缩小 public > Protected > Default > private

4.抛出的异常:范围可以被缩小,但不能扩大

为什么需要重写?父类的方法子类不一定需要,或者不一定满足

多态:同一方法可以根据对象的不同而采用多种不同的行为方式

一个对象的实际类型是确定的,但是可以指向的类型就不确定了

子类能调用的方法都是自己的或继承父类的

父类能指向子类,但是不能调用子类独有的方法

对象能执行哪些方法,主要看对象左边的类型,与右边关系不大

 Student s1 = new Student();
 Person s2 = new Student();//父类的引用指向子类的对象
 Object s3 = new Student();

注意事项:

1.多态是方法的多态,属性没有多态

2.父类和子类转换有联系,否则类型转换异常。ClassCastException

3.存在条件:继承关系,子类重写父类方法,父类引用指向子类对象

不能重写:static,final,private

instanceof 类型转换

X instanceof Y 有父子关系返回true,没有返回false,没有关系编译错误

子类转换为父类可能丢失自己本来的一些方法

子类转换为父类,向上转换 Person person = student;

父类转换为子类,向下转换,强制转换 Student student = (Student) person

 //静态导入包
 import  static java.lang.Math.random;
 ​
 ​
 ​
 //2.赋初始值
 {
     System.out.println("匿名代码块");
 }
 ​
 //1.只执行一次
 static{
     System.out.println("静态代码块");
 }
 ​
 //3.
 public Person() {
     System.out.println("构造方法");
 }

abstract,抽象类

abstract , 抽象方法,只有方法名字,没有方法的实现

抽象类的所有方法,继承了它 的子类,都必须要实现它的方法

1.不能new 这个抽象类,只能靠子类去实现它

2.抽象方法必须在抽象类中

3.抽象类中可以写普通方法

接口

作用:1.约束

2.定义一些方法,让不同的人实现

3.接口中所有定义都是抽象的,方法都是public abstract(省略)

4.常量 public static final(省略)

5.接口不能被实例化,接口中没有构造方法

6.implements 可以实现多个接口

7.类中必须要重写接口中的方法

内部类:在一个类的内部再定义一个类

一个java类中可以有多个class类,但只能有一个public class类

匿名内部类:new Apple().eat();没有名字初始化类,不用将实例保存到变量中

内部类可以获得外部类的私有属性

 //通过这个外部类来实例化内部类
 Outer.Inner inner = outer.new Inner();
 inner.in();

异常

 try{ //监控区域
     System.out.println(a/b);
 }
 catch(ArithmeticException e){  //捕获异常
     System.out.println("程序出现异常,变量b不能为0");
 }finally{  //处理善后工作
     System.out.println("finally");
 }

catch里面的参数为想要捕获的异常类型

Throwable能捕获所有Error和Exception

假设要捕获多个异常,从小到大

Ctrl + Alt + T 自动生成try catch + finally

 //假设这个方法中,处理不了这个异常,方法上抛出异常
 public void test(int a,int b) throws ArithmeticException{
     if(b==0){
         throw new ArithmeticException();  //主动抛出异常,一般在方法中使用
     }
     System.out.println(a/b);
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值