面向对象之封装

1、设计类并使用

一、类和对象

  • 类(设计图):是对象共同特征的描述
  • 对象:是真实存在的具体东西。

 在Java中,必须先设计类,才能获得对象

1、如何定义类

/*public class 类名{
    1、成员变量(代表属性,一般是名词)
    2、成员方法(代表行为,一般是动词)
    3、构造器(后面学习)
    4、代码块(后面学习)
    5、内部类(后面学习)
}*/
public class Phone{
    //属性(成员变量)
    String brand;
    double price;
    
    //行为(方法)
    public void call(){
        
    }
    public void playGame(){
        
    }
    
}

    2、如何得到类的对象

public class 类名{
    1、成员变量(代表属性的,一般是名词)
    2、成员方法(代表行为的,一般是动词)
        类名 对象名 = new 类名();
		Phone p = new Phone();
}

    3、拿到对象后能做什么?

  • 对象.成员变量;
  • 对象.成员方法(……)

二、定义类的补充注意事项

        1、用来描述一类事物的类,专业叫做:Javabean类。

                在Javabean类中,是不写main方法的。

        2、在以前,编写main方法的类,叫做测试类。

                我们可以在测试类中创建Javabean类的对象并进行赋值调用

  • 类名首字母建议大写,需要见名知意,驼峰模式
  • 一个Java文件中可以定义多个class类,且只能一个类是public修饰,而且public修饰的类名必须成为代码文件名

实际开发中建议还是一个文件定义一个class类

  • 成员变量的完整定义格式是:修饰符 数据类型 变量名称 = 初始化值; 一般无需指定初始化值,存在默认值。

        对象的成员变量的默认值规则

数据类型明细默认值
基本类型byte、short、int、long0
基本类型float、double0.0
基本类型booleanfalse
引用类型类、接口、数组、Stringnull

练习、女朋友类

​    编写女朋友类,创建女朋友类的对象

​    给女朋友的属性赋值并调用女朋友类的对象

    自己思考,女朋友类中又哪些属性,有哪些行为?

//Javabean类
public class GirlFriend{
    //属性
    String name;
    int age;
    String gender;
    
    //行为
    public void sleep(){
        System.out.println("女朋友在睡觉");
    }
    
    public void eat(){
        System.out.println("女朋友在吃饭");
    }
}


//测试类
public class GirlFriendTest{
    public static void main(String[] args){
        //创建女朋友的对象
        Girlfriend gf1 = new GirlFriend();
        gf1.name = "小诗诗";
        gf1.age = 18;
        gf1.gender = "萌妹子";
        
        System.out.println(gf1.name);
        System.out.println(gf1.age);
        System.out.println(gf1.gender);
        
        gf1.eat();
        gf1.sleep();
        
        System.out.println("==================");
        
        Girlfriend gf1 = new GirlFriend();
        gf1.name = "小丹丹";
        gf1.age = 19;
        gf1.gender = "萌妹子";
        
        System.out.println(gf2.name);
        System.out.println(gf2.age);
        System.out.println(gf2.gender);
        
        gf2.eat();
        gf2.sleep();
    }
}

2、封装

  • 对象代表什么,就封装对应的数据,并提供数据对应的行为
  • 降低我么的学习成本,可以少学、少记,或者说压根不用学,不用记对象有哪些方法,有需要时去找就行

private关键字

  • 是一个权限修饰符
  • 可以修饰成员(成员变量和成员方法)
  • private修饰的成员只能在本类中才能访问
//Javabean类
public class GirlFriend{
    private String name;
    private int age;
    private String gender;
    
    //针对于每一个私有化的成员变量,都要提供get和set方法
    //set方法:给成员变量赋值
    //get方法:对外提供成员变量的值
    
    //作用:给成员变量name进行赋值的
    public void setName(String n){
        name = n;
    }
    
    //作用:对外提供name属性的
    public String getName(){
        return name;
    }
    
    //set(赋值)
    public void setAge(int a){
        if(a >= 18 && a<= 50){
            age = a;
        }else{
            System.out.println("非法数据");
        }
    }
    
    //get(获取)
    public int getAge(){
        return age;
    }
    
    public void setGender(String g){
        gender = c;
    }
    
    public String getGender(){
        return gender;
    }
    
    //行为
    public void sleep(){
        System.out.println("女朋友在睡觉");
    }
    
    public void eat(){
        System.out.println("女朋友在吃饭");
    }
}


//测试类
public class GirlFriendTest{
    public static void main(String[] args){
        //创建女朋友的对象
        Girlfriend gf1 = new GirlFriend();
        //赋值操作
        gf1.setName("小诗诗");
        gf1.setAge(18);
        gf1.setGender("萌妹子");
        
        System.out.println(gf1.getName());
        System.out.println(gf1.getAge());
        System.out.println(gf1.getGender());
        
        gf1.eat();
        gf1.sleep();
        
    }
}

总结

  1. private关键字是一个权限修饰符

  2. 可以修饰成员(成员变量和成员方法)

  3. 被private修饰的成员只能在本类中才能访问

  4. 针对private修饰的成员变量,如果需要被其他类使用、提供相应的操作

  5. 提供"setXxx(参数)"的方法,用于给成员变量赋值,方法用public修饰

  6. 提供"getXxx()"方法,用于获取成员变量的值,方法用public修饰

this关键字

this的作用:

​    用来区分成员变量和局部变量

this:表示当前方法调用者的地址值。

这个this:是由虚拟机赋值的。

3、构造方法

构造方法的概述:

        构造方法也叫作构造器、构造函数。

作用:在创建对象的时候给成员变量进行赋值的

构造方法的格式:

/*public class Student{
    修饰符 类名(参数){
        方法体;
    }
}*/

public class Student {

    private String name;
    private int age;

    public Student() {
    }

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

特点:

  1. 方法名与类名相同,大小写也要一致

  2. 没有返回值类型,连void都没有

  3. 没有具体的返回值(不能由return带回结果数据)

执行时机:

  1. 创建对象的时候由虚拟机调用,不能手动调用构造方法
  2. 每创建一次对象,就会调用一次构造方法

构造方法扫盲

        构造方法就是用来创建对象的。(这是不对的)

创建对象的时候,虚拟机会自动调用构造方法,作用是给成员变量进行初始化的。

4、标准的Javabean类

  1. 类名需要见名知意

  2. 成员使用private修饰

  3. 提供至少两个构造方法

    • 无参构造方法

    • 带全部参数的构造方法

  4. 成员方法

    • 提供每一个成员变量对应的setXxx()/getXxx()

    • 如果还有其他行为,也需要写上

public class Student {

    private String userName;
    private String passWord;
    private String email;
    private String gender;
    private int age;

    //快捷键:
    //alt+insert
    
    //插件PTG 1秒生成标准Javabean

}

插件安装:

        1、打开我们的IEDA,点击如下进入

    2、找到如下

    3、搜索,点击进行安装即可

 

4、教你如何使用

        右击,找到如下点击即可

        也可以使用快捷键Ctrl+Shift+逗号 

当你安装了上面的插件后你会来感谢我,非常的快速。行动起来吧

成员变量和局部变量的区别

区别成员变量局部变量
类中位置类中,方法外方法内、方法申明上
初始化值不同有默认初始化值没有,使用之前需要完成赋值
内存位置不同堆内存栈内存
生命周期不同随着对象的创建而存在,随着对象的消失而消失随着方法的调用而存在,随着方法的运行结束而消失
作用域整个类中有效当前方法中有效

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值