JAVA面向对象(OOP)总结----宏观的程序设计

类:使用关键字class,抽象的概念集合。例如人类,具有共性的产物。

对象:具有自己独立属性,具有个性的个体。

类中可以定义的内容:

  1.  成员变量(属性);
  2. 成员方法(功能);
  3. 构造方法;
  4. 内部类;
  5. 代码块

创建一个对象: new Scanner();      new int[];

类的构造方法:每一个类中都有一个默认的无参构造方法。构造方法名与类名一致。无返回值。不用void修饰。

无参构造方法与有参构造方法对比:

public class Round {
    int r;
    String color;
    public Round(){
        
    }
    public Round(String color)
    {
        this.color=color;
    }
    
}

构造方法的作用:初始化创建对象。

JAVA面向对象(OOP)总结----宏观的程序设计_第1张图片

 方法重载:在一个类中有多个名称相同的方法。

Q:当出现多个名称相同的方法该如何区分呢?

A:可通过传入的参数个数,类型顺序区分。

普通成员方法也可方法重载。

    public int area(int r)
    {
        return (int) (r*r*Math.PI);
    }
    public double area(double r)
    {
        return r*r*Math.PI;
    }

 

对象与引用

值传递:

1.基本类型值传递(形参改变不影响实参)

public class Myproject {
    public static void main(String[] args) {
        Round r1=new Round();
        int x=1;
        r1.draw(x);
        System.out.printf("x=%d\n",x);
    }
}
public class Round {
    int r;
    public void draw(int r)
    {
        r=10;
        System.out.printf("r=%d\n",r);
    }
}

 JAVA面向对象(OOP)总结----宏观的程序设计_第2张图片

如上述所示,当main函数传入一个实参x,成员方法中改变了形参的大小,可是并没有影响实参最终大小。因此,基本类型的值传递时,形参的改变不影响实参的大小。 

 

2.引用类型值传递 (形参改变影响实参)

首先,我们介绍一下何谓引用类型的值,引用类型包括类(例如字符串),数组,接口。

 

public class Myproject {
    public static void main(String[] args) {
        Person p1=new Person();
        p1.name="adele";
        p1.Read_name(p1);
        System.out.println("对象p1最终的名字为:");
        System.out.println(p1.name);
    }
}
public class Person {
    String name;
    public void Read_name(Person person)
    {
        person.name="amy";
        System.out.println("调用Read_name方法并且在成员方法中更改p1名字,输出的p1对象名字:");
        System.out.println(person.name);
    }
}

JAVA面向对象(OOP)总结----宏观的程序设计_第3张图片 

 神奇的,我们发现最终在main函数中对象的name改变了,形参影响了实参。这是为什么呢?

这是因为在创建一个对象的时候,对象名指向的是持有对象在内存空间的地址(即引用变量)。

传入实参,形参也会指向实参地址,所以改变的是形参指向的地址上的值。接下来我们看看实参和形参所指向的内存地址是否相同来验证。

public class Myproject {
    public static void main(String[] args) {
        Person p1=new Person();
        p1.name="adele";
        System.out.println(p1);
        p1.Read_name(p1);
//        System.out.println("对象p1最终的名字为:");
//        System.out.println(p1.name);
    }
}
public class Person {
    String name;
    public void Read_name(Person person)
    {
        System.out.println(person);
//        System.out.println(person.name);
        person.name="amy";
        System.out.println(person);
//        System.out.println("调用Read_name方法并且在成员方法中更改p1名字,输出的p1对象名字:");
//        System.out.println(person.name);
    }
}

 结果输出:

JAVA面向对象(OOP)总结----宏观的程序设计_第4张图片

 通过结果发现,指向的的内存地址始终指向同一个,而改变的是该地址上的值。

所以可以得到结论:使用引用类型值传递时,形参改变会影响实参。


this关键字:表示当前正在操作的对象。

使用this关键字可以引用成员变量,成员方法。

static关键字(静态的意思):

  • 被static修饰的变量,在内存中只有一份。(比如创建了10个学生,他们都来自清华大学,那么此时可以使用static关键字,创建一个成员变量,节省内存空间)
  • 静态成员随着类的加载而加载
  • 使用类名可以直接对静态成员进行访问
  • 静态成员优先于对象存在
  • 修饰的成员被所有对象共享 

代码块:类似于没有名称的方法。

类的加载执行:

  1. 先加载类
  2. 加载静态成员(静态变量,方法,代码块)
  3. 创建对象
  4. 调用构造方法,初始化对象成员

访问权限修饰符(控制能否被外界访问)

  • public:修饰类,成员变量,成员方法。在任何地方均可访问
  • protected:修饰成员变量,成员方法。自己类中和同包类中访问,在不同包子类访问。
  • default(默认):修饰类,成员变量,成员方法。在自己类中和同包中访问。
  • private:修饰成员变量,方法。只能在自己类中访问。 

 

 

 

你可能感兴趣的:(JAVA,java,开发语言)