JAVA part 6:面向对象和类

JAVA part 6:面向对象和类

面向对象和面向过程

面向过程:强调的是每一个功能的步骤
面向对象:强调的是对象,然后有对象去调用功能

面向对象的思想:
面向对象是基于面向过程的一种编程思想

面向对象的思想特点:
1.是一种符合我们思考习惯的思想
2.可以将复杂的事情简单化
3.让我们从执行者变成了指挥者

举例:洗衣服

面向过程:把衣服脱下来–找一个盆–防水–放洗衣液–浸泡10分钟–揉一揉–请洗衣服–拧干–晾起来
面向对象:把衣服脱下来–打开全自动洗衣机–放入衣服–按钮–晾起来

JAVA语言最基本的组成单位是类
类就是一组相关的属性和行为的集合

类中有成员变量和成员方法:

1.成员变量:和我们学习过的变量的定义是一样的,有两个小区别:
①位置不同:类中,方法外
②初始化值:成员变量不需要给初始化值也可以使用,因为有默认值
2.成员方法:和我们学习过的方法的定义是一样的,有一个小区别:
去掉了修饰符中的static关键字

// 需求:定义一个学生类
package cases;

public class x24 {

    // 成员变量
    
    // 姓名
    String name;
    // 年龄
    int age;

    // 成员方法

    // 学习的方法
    public void study(){
        System.out.println("好好学习天天向上");
    }
    //吃饭的方法
    public void eat(){
        System.out.println("学习饿了要吃饭");
    }
    
}

如何使用类:

package Day_6;

public class test1 {
    public static void main(String[] args) {

        // 类名 对象名 = new 类名();
        Student s = new Stuent();

        // 使用成员变量
        System.out.println("姓名:"+s.name);
        System.out.println("年龄:"+s.age);
        System.out.println("----------------------");

        //给成员变量赋值
        s.name = "林青霞";
        s.age = 30;

        //再次使用成员变量
        System.out.println("姓名:"+s.name);
        System.out.println("年龄:"+s.age);
        System.out.println("----------------------");

        // 调用成员方法
        s.study();
        s.eat();
    }
}

一个对象的内存图

一个对象的内存图

两个对象的内存图

1.公用方法区
公用方法区
2.两个引用指向同一个堆内存
两个引用指向同一个堆内存

成员变量和局部变量

区别:
1.在类中的位置不同:
成员变量:在类中,方法外
局部变量:在方法中或者方法声明上(形式参数)
2.在内存中的位置不同
成员变量:在堆内存
局部变量:在栈内存
3.生命周期不同:
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
4.初始化值不同:
成员变量:有默认值
局部变量:没有默认值,必须先定义,赋值,最后使用

package Day_6;
public class test2 {
    // 成员变量
    int x;
    
    public void show(){
        //局部变量
        int y = 10;
        
        System.out.println(x);
        System.out.println(y);
    }
}

private关键字

直接使用对象名访问成员变量,会存在数据的安全问题,如果不想让外界直接访问成员变量,就需要使用关键字private

private:
是一个修饰符;
可以修饰成员变量,也可以修饰成员方法;
被private修饰的成员只能在本类中被访问

使用方法:
private 数据类型 变量名;

package Day_6;
public class test3 {
    String name;
    
    //访问的时候使用getAge而不是age
    private int age;
    
    public void setAge(int a){
        if(a<0 || a>200){
            System.out.println("你给的年龄有误");
        }else{
            age = a;
        }
    }
    public  int getAge(){
        return age;
    }
    
    public void show(){
        System.out.println(name+"***"+age);
    }
}

常见应用:
把成员变量用private修饰;
提供对应的getXxx()/setXxx()方法;
一个标准的案例的使用

this关键字

在写代码的时候给方法和变量的命名要做到见名知意,但如果方法名和变量名相同的时候输出就会有问题。

this:
代表所在类的对象引用
方法被那个对象调用,this就代表谁

场景:
用于解决成员变量被隐藏的问题

package Day_6;
public class test4 {
    private String name;
    private int age;

    public void setName(String name){
        //name = name;
        //赋值采用就近原则,只能给变量赋值不能给方法赋值
        //所以使用this关键字
        this name = name;
    }
    public String getName(){
        return name;
    }
    public void serAge(int age){
        //age = age;
        this age = age;
    }
    public int getAge(){
        return age;
    }
}

封装

是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改

封装原则:
1.将不需要对外提供的内容都隐藏起来;
2.把属性隐藏,提供公共方法对其访问(成员变量private,提供对应的getXxx()/setXxx()方法)

优点:
1.通过方法来控制成员变量的操作,提高了代码的安全性;
2.把代码用方法进行封装,提高额代码的复用性

构造方法

用于给对象的数据惊醒初始化

tips:
1.方法名和类名相同
2.没有返回值类型,连void都不能写
3.没有具体的返回值

格式:

    public Student() {
        System.out.println("这是一个构造方法")
    }

使用:
类名 对象名 = new 构造方法名(…);

Student s = new Student();

给成员变量赋值的方式:
1.通过setXxx();赋值
2.通过构造方法

使用注意事项
1.如果我们没有给出构造方法,系统将给出一个默认的无参数构造方法供我们使用
2.如果给出了构造方法,系统将不再提供默认的构造方法供我们使用。如果还想使用无参数构造方法,就必须自己提供
推荐:自己给出无参构造
3.构造方法也可以重载的

// 方法
package Day_6;
public class Student {
    public Student(){}

    public Student(String name){
        this.name = name;
    }

    public Student(int age){
        this.age = age;
    }

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

    public void show(){
        System.out.println(name+"---"+age);
    }
}
// 使用
package Day_6;
public class test6 {
    public static void main(String[] args) {

        Student s = new Student();
        s.show();//null---0

        Student s2 = new Student("林青霞");
        s.show();//林青霞---0

        Student s3 = new Student(30);
        s.show();//null---30

        Student s4 = new Student("林青霞", 30);
        s.show();//林青霞---30
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值