Java面向对象

面向对象的概念:

  封装性:将对象行为封装起来,不让外界知道具体实现细节。

  继承性:主要描述的是类与类之间的关系。通过继承,可以在无需重新编写原有类的情况下,对原类的功能进行扩展。

  多态性:指在程序中允许出现重名现象,它指在一个类中定义的属性和方法被其他类继承后,他们具有不同的数据类型或表现出不同的行为,这使得同一个属性和方法在不同的类中具有不同的语义。

类的定义:

  类是对象的抽象,它用于描述一组对象的共同特征和行为,类中可以定义成员方法和变量,其中成员变量用于描述对象的特征,成员方法用于描述对象的行为。

  Java中通过new关键字创建对象,P p=new P();   p仅仅存储的是P对象在内存中的位置。

构造函数:

   1.必须满足的条件:1> 方法名与类名相同  2> 在方法名的前面没有返回值类型的说明  3> 在方法中不能使用return语句返回一个值

   2.构造方法在创建实例时被自动调用

   3.构造函数的重载:满足条件:构造方法的参数类型或参数的个数不同即可。

   4.如果类中未定义构造方法,系统会自动为这个类创造一个默认的构造方法,默认构构造方法无参,在方法体中没有代码,即什么也不做。

   5.构造方法通常使用public修饰,private修饰会报错【私有方法外部不能调用】,即无法访问构造方法。

This关键字:

  定义:用于方法中访问对象的其他成员。

  1.解决成员变量与局部变量的冲突。

  2.通过this关键字调用成员方法。

  3.构造方法是在实例化对象时被Java虚拟自动调用的,在程序中不能像调用其他成员方法那样去调用构造方法,但可以在一个构造函数中通过this(参数1,参数2....)的形式调用。

   必须要满足两个条件【1.只能再构造方法中使用,2.必须在第一行且只能出现一次】

 

class C{
    public C(){
        this(1);
    }
    public C(int a){
    }
}

 

 垃圾回收:

  当一个对象成为垃圾后仍会占用内存空间,时间异常会导致内存不足。针对这种情况,Java引入了垃圾回收机制。

class C{
    public C(){
        this(1);
    }
    public C(int a){
    }
}

C c=new C();
c=null

   上面这个例子:当定义的对象指向null,那么之前定义的类对象将成为垃圾回收的对象。

   Java引入的垃圾回收机制:

  1.自动释放,垃圾堆积到一定程度时,Java虚拟机就会启动垃圾回收器将这些垃圾从内存中释放。

  2.手动释放,通过调用System.gc()方法通知虚拟机立即进行垃圾回收,当一个对象在内存中释放时,它的finalize()方法会自动调用,可以通过它查看对象什么时候被释放的。

class C{
   public void finalize(){
       System.out.println("对象释放中。。。。。。。。。");
   }
}
public class Test {
    public static void main(String[] args) throws InterruptedException {
      C c1=new C();
      C c2=new C();
      c1=null;
      c2=null;
      System.gc();
    }
}

Static关键字:

为什么要出现static关键字:

 定义一个类,并没有实例化。只有通过new实例化,有时我们希望特定的数据在内存中只有一份,而且能够被一个类的所有实例对象所共享。

静态变量和静态方法:  

 1.定义静态变量,使用static关键字来修饰变量,通过类名.变量名 来访问。【static只能用于成员变量,用于局部变量是非法的】

 注意:静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响

 2.定义静态方法,方法前加上static关键字,通过类名.方法名 来访问。

    注意:1.对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了.

         2.在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用.

静态代码块【关键作用】:

  使用一堆大括号包围起来的若干行代码被称为一个代码块,用static关键字修饰的代码块称为静态代码块。当类被加载时,静态代码块会被执行,由于类只加载一次,因此静态代码块只执行一次。通常用于成员变量的初始化。

static{
        代码块
 }

 

类的继承:

  一个类继承另一个类,需使用extends关键字。

  Java中只支持单继承,一个类只能有一个直接父类,

重写父类方法:  

  子类自动继承父类定义的方法,在子类重写的方法需要和父类被重写的方法具有相同的方法名,参数列表和返回值。

  注意:子类重写父类的方法时不能使用比父类更严格的访问权限,如父类public 子类就不能是private

Super关键字:

  当子类重写父类的方法后,子类对象无法访问父类对象被重写的方法,Java提供了一个关键字super用于访问父类成员。

  1.使用super调用父类的成员变量,成员方法。super.成员变量   super.成员方法。

  2.使用super关键字,访问父类构造方法,super(参数1,参数2. 。。。)【必须位于子类的构造方法第一行且只能出现一次】

Final关键字:

  final关键字可用于修饰类,变量,方法,它有 这是无法改变的,最终的含义

  被final修饰的类,变量吗,方法有以下特性:

  final修饰的类不能被继承。

  final修饰的方法不能被子类重写

  final修饰的变量(成员变量和局部变量)是常量,只能复赋值一次。

多态:

  由于参数类型不同而导致执行结果各异的现象就是多态。

  父类类型变量引用不同子类对象;

interface A {
    void run();
}
class B implements A{

    @Override
    public void run() {
        System.out.println("B run ......");
    }
}
class C implements A{
    @Override
    public void run() {
        System.out.println("C run ......");
    }
}
public class Test {
    public static void main(String[] args) throws InterruptedException {
        A b=new B();
        A c=new C();
        start(b);
        start(c);
    }
    public static void start(A a){
        a.run();
    }
}

 

posted @ 2019-05-20 20:45  Cool_Yang  阅读(195)  评论(0编辑  收藏  举报