【面向对象(类)、封装、private、this】

面向对象

1.1 面向对象思想概述

Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计、开发计算机程序。 这里的对象泛指现实中一切事物,每种事物都具备自己的属性和行为。面向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。 它区别于面向过程思想,强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去操作实现。 

面向对象思想是一种更符合我们思考习惯的思想,它可以将复杂的事情简单化,并将我们从执行者变成了指挥者。 面向对象的语言中,包含了三大基本特征,即封装、继承和多态。

1.2 类和对象

类:是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。
属性:就是该事物的状态信息。
行为:就是该事物能够做什么。
对象:是一类事物的具体体现。对象是类的一个实例(对象并不是找个女朋友),必然具备该类事物的属性和行为
类与对象的关系 :
类是对一类事物的描述,是抽象的。
对象是一类事物的实例,是具体的。
类是对象的模板,对象是类的实体。

类

1.1类的概述

类是对某一类事物的抽象描述,即是现实世界的一类事物

1.2类的定义

public class ClassName {
//成员变量
//成员方法
}
定义类:就是定义类的成员,包括成员变量和成员方法。
成员变量:和以前定义变量几乎是一样的。只不过位置发生了改变。在类中,方法外。
成员方法:和以前定义方法几乎是一样的。

1.3类的调用

类名 对象名 = new 类名();

对象名.成员变量;

对象名.成员方法();
public class  People{
    String name;
    int age;
    public void eat(){
        System.out.println(name+"在吃饭");
    }
}点击并拖拽以移动
public class Demo {
    public static void main(String[] args) {
        People p = new  People();
        p.name="张三";
        p.eat();
    }
}

1.4类的内存图

​

1.5类作为方法参数

public class Person {
    private String name = "张三";
    public void eat(){
        System.out.println(name +"在吃饭");
    }
    public void sleep(){
        System.out.println(name +"在睡觉");
    }
}
点击并拖拽以移动
public class Test {
    public static void main(String[] args){
        Person p = new Person();
        operatorPerson(p);
    }
    public static void operatorPerson(Person p){
        p.eat();
        p.sleep();
    }
}

1.6类作为方法返回值

public class GetPerson {
    public Person get(){
        Person p = new Person();
        return p;
    }
}
public class TestReturn {
    public static void main(String[] args){
        GetPerson g = new GetPerson();
        Person p = g.get();
        p.sleep();
        p.eat();
    }
}

成员和局部变量区别

成员变量指的是类的成员,作用于整个类,局部变量即是方法中的成员,作用只限制在方法中

1. 定义位置上的区别
   成员变量,定义在类中,方法外
   局部变量,方法内,语句内

2. 作用域不同
  成员变量,作用范围是整个类
  局部变量,方法内,语句内

3. 默认值不同
   成员变量,有自己的默认值
   局部变量,没有默认值,不赋值不能使用

4. 内存位置不同

   成员变量,跟随对象进入堆内存存储
   局部变量,跟随自己的方法,进入栈内存

 5. 生命周期不同
   成员变量,跟随对象,在堆中存储,内存等待JVM清理 , 生命相对较长
   局部变量,跟随方法,方法出栈 生命相对较短

封装性

1.封装是面向对象思想的特征之一,通过隐藏了实现细节,对外提供可以访问的方式

如:①方法就是一个最基本封装体    ②类其实也是一个封装体 ③关键字private也是一种封装

2.封装好处

①提高了代码的复用性

②隐藏了实现细节,对外提供公共访问的方式

③提高了安全性

关键字private(私有化)

1.一旦使用了private进行修饰,那么本类当中仍然可以随意访问。但是!超出了本类范围之外就不能再直接访问了。

2.间接访问private成员变量,就是定义一对儿Getter/Setter方法 

注意:

①private是修饰符,属于成员修饰符,不能修饰局部变量

②被private修饰的成员,只能在自己的本类中被使用

③对私有变量,在类中要提供公共的访问方式: 方法

总结:类中不需要对外提供的内容都私有化,包括属性和方法。并提供setXxx getXxx方法对其进行访问
public class Person {
    private String name;
    private int age;
    public void setName(String n){
        name=n;
    }
    public String getName(){
        return name;
    }
    public void setAge(int a){
        age = a;
    }
    public int getAge(){
        return age;
    }
}
点击并拖拽以移动
public class TestPerson {
    public static void main(String[] args){
        Person p = new Person();
        p.setAge(20);
        p.setName("张三");
       System.out.println(p.getName()+"..."+p.getAge());
    }
}

关键字this

1、区分成员变量和局部变量同名情况

2、调用成员变量:this.成员变量名

3、构造方法之间的调用:this.(参数)

public class Person {
    private int age;
    public void setAge(int age) {
        this.age = age;
    }
    public int getAge() {
        return age;
    }
    public boolean compare(Person p){
        //自己和别人比年龄,自己是谁 this和p
        return this.age == p.age;
    }
}

构造方法

1、构造方法的定义:是对象创建时要执行的方法,在new 的同时对成员变量赋值, 给对象的属性初始化赋值

2、构造方法格式

权限 方法名(参数列表){
   }

注意事项:

①构造方法的名称必须和所在的类名称完全一样,就连大小写也要一样

②构造方法不要写返回值类型,连void都不写,不能return一个具体的返回值

③在new 的时候,自动执行只运行一次,仅此而已

④.每个类必须拥有构造方法,构造方法不写也有,如果无,编译器就会自动添加一个构造方法,如果有,不会自动添加构造方法

⑤构造方法也是可以进行重载的

⑥构造方法可以初始化对象,但对象在创建之后修改和访问相应的属性值时,还是只能通过set或者get方法来操作

 
public class Person {
    private String name;
    private int age;
    public Person(){
    }
    public Person(String name,int age){
        this.name = name;
        this.age = age;
    }
    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;
    }
}

 

 
 
posted @ 2020-07-27 18:43  忙路  阅读(137)  评论(0)    收藏  举报