zoukankan      html  css  js  c++  java
  • java基础>面向对象基础 小强斋

    一、面向对象三个重要特征

    ·封装性:类内部的定义对外部不可见。

    ·继承性:扩充已有类的功能。

    ·多态性:方法重载、覆写,对象的多态性

    二、类与对象

    类是对象的模板,对象是类的实例

    每一个对象中实际上保存的只是属性,并没有保存方法,因为所有的方法都是每个对象所共同拥有的,保存在全局代码区之中。栈内存保存的是对堆内存的引用地址,而堆内存中保存的是每一个对象所拥有的属性,而全局代码区之中保存的是所有类中的方法,表示公共调用。

    对象的引用传递:一块堆内存可以同时被多个对象所同时指向。

    三、instanceof关键字

    通过instanceof关键字可以判断某一个对象是否是某一个类的实例。

    class A {};
    
    class B extends A {};
    
    public class InstanceDemo {
    
     public static void main(String  args[]){
                       A a = new A() ;
                       A a1=new B();
                       System.out.println(a  instanceof A) ;// true
                       System.out.println(a  instanceof B) ;// false
                       System.out.println(a1 instanceof A) ;// true
                       System.out.println(a1  instanceof B) ;// true
             }
    };

    所以,以后在进行向下转型操作之前,一定要先使用instanceof关键字进行验证,验证通过了,才可以放心安全的执行向下转型的操作

    四、构造方法

    构造方法的定义:在一个类中定义的方法名称与类名称相同,且无返回值声明的方法,称为构造方法。在一个类中如果没有明确的定义一个构造方法的话,则会自动生成一个无参的,什么都不做的构造方法,又名无参构造器。当一个类中已经明确的定义了一个构造方法的时候,则无参构造方法将不再自动生成,也就是说一个类永远都会  保证至少有一个构造方法。构造方法允许重载

    五、this关键字

    访问属性、调用方法(包含了构造)、表示当前对象

    5.1、访问属性

    明确的强调出要把构造方法中的name或age参数给类中的name和age属性的话,就需要通过this来表示出本类的属性。

    public Person(String name,int  age){
     
           this.name = name ;
     
           this.age = age ;
     
        }

    5.2、调用方法

    例如在构造方法中使用构造方法,以避免写重复的代码。

    如果使用this调用其他构造方法的话,有一点需要注意,即:如果使用this调用本类中其他构造方法的话,则此语句必须放在构造方法的首行。而且,在使用this调用构造方法的时候一定要注意:“一个类中如果有多个构造方法的话,则肯定保留有一个是不用this调用其他构造的情况,以作为出口”。而且当一个类中如果存在多个构造方法的时候,一定要按照以下的顺序进行:将参数少的构造方法放在最前面,参数多的构造方法放在最后面。

    5.3、表示当前

    只能在方法内部使用,表示对调用方法的那个对象的引用

    this的最大用法实际上就只有一个:“表示当前对象”,包括以上的访问属性或者是调用构造等等,实际上都是此概念的体现。当前调用类中方法的对象称为当前对象。   

    六、匿名对象

    new  Person("张三",30).tell() ;

    由于匿名对象没有对应的栈内存所指向,所以使用一次之后就等待被垃圾回收了。

    每一个字符串都是一个匿名的String对象。

    七、对象的引用传递

    范例:程序一

    class Demo {
     private int count = 10;
     public void setCount(int count) {
      this.count = count;
     }
    
     public int getCount() {
      return this.count;
     }
    
    };
    
    public class RefDemo01 {
    
     public static void main(String args[]) {
      Demo d1 = new Demo();
      d1.setCount(100);
      fun(d1);
      System.out.println(d1.getCount());
     }
    
     public static void fun(Demo d2) {
      d2.setCount(30);
     }
    };
    /* Output:
     30
     */

    范例:第二道程序

    public class RefDemo02 {
     public static void main(String args[]) {
      String str = "hello";
      fun(str);
      System.out.println(str);
     }
    
     public static void fun(String temp) {
      temp = "world";
     }
    
    };
    /*
     * Output: hello
     */

    字符串的内容无法改变,改变的只是内存地址的指向。

    范例:第三道程序

    class Demo {
    
     private String str = "hello";
    
     public void setStr(String str) {
      this.str = str;
     }
    
     public String getStr() {
      return this.str;
     }
    
    };
    
    public class RefDemo03 {
    
     public static void main(String args[]) {
      Demo d1 = new Demo();
      d1.setStr("world");
      fun(d1);
      System.out.println(d1.getStr());
     }
    
     public static void fun(Demo d2) {
      d2.setStr("!!!");
     }
    
    };
    /*Output: 
     !!!
    */

    实际上,本程序和第一道程序是完全一样的,下面观察内存关系图。

    八、对象比较

    public boolean equals(Object obj) {
      if (this == obj) {
       return true;
      }
    
      if (!(obj instanceof Person)) {
       return false;
      }
    
      Person per = (Person) obj;
      if (this.name.equals(per.name) && this.age == per.age) {
       return true;
      } else {
       return false;
      }
    
     }


     

     

  • 相关阅读:
    Spring-Cloud 学习笔记-(4)负载均衡器Ribbon
    Spring-Cloud 学习笔记-(5)熔断器Hystrix
    微信支付(APP)
    Resetting Frame Animation
    Java内部类与final关键字详解
    UML中关联(Association)和依赖(Dependency)的区别
    ListView 介绍
    android Activity类中的finish()、onDestory()和System.exit(0) 三者的区别
    AsyncTask和Handler对比
    create groups 和 create folder reference
  • 原文地址:https://www.cnblogs.com/xiaoqiangzhaitai/p/5429546.html
Copyright © 2011-2022 走看看