Java基础-封装

目录

Java基础-封装

1封装的概述

1.1封装的作用

1.2如何实现封装

2 this关键字

2.1 this关键字的含义

2.2this关键字的作用

3 static关键字

3.1 为什么需要static

3.2 static的作用

4 代码块

4.1 普通代码块

4.2 构造代码块

4.3 静态代码块


Java基础-封装

1封装的概述

1.1封装的作用

封装的作用就是有效地防止不正确、不准确的数据被录入系统,从而提高程序的安全性。

1.2如何实现封装

封装的步骤分三步:

(1)属性私有化 private;

(2)编写公有的取值赋值方法 getter/ setter方法;

(3)在赋值的方法中进行合法性验证。

【实例1】封装

public class Person {
    //1.属性私有化
    private String name;//姓名
    private Integer age;//年龄
    //2.编写公有的取值赋值方法
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {   
        return age;
    }
    public void setAge(Integer age) {
        if(age<0||age>120) {
            this.age=18;
        }
        else {
            this.age = age;
        }
    }
}

【实例2】测试Person类

public class PersonTest {
    @Test
    public void ageTest() {
        //调用无参构造方法创建对象
        Person person=new Person();
        //调用赋值的方法给年龄属性赋值
        person.setAge(-200);
        //调用取值的方法获取年龄的值
        System.out.println("年龄:"+person.getAge());
    }
}

 

2 this关键字

2.1 this关键字的含义

this是一个关键字,指代当前对象,存储的是当前对象的内存地址,实例3测试输出this的值,运行效果如图所示:

【实例3】输出this

public class Person2 {
​
    public Person2() {
        super();
        System.out.println("this="+this);
    }
    
    public static void main(String[] args) {
        //调用无参构造方法创建对象
        Person2 person=new Person2();
        System.out.println("person="+person);
    }
}

 

2.2this关键字的作用

(1)可以访问本类的属性:this.属性名,this可以省略。

(2)可以调用本类的方法:this.方法名(),this可以省略。

(3)可以调用本类的构造方法:(必须是构造方法中的第一句代码)

this():调用本类的无参构造方法

this(实参值):调用本类的带参构造方法。

(4)当局部变量与成员变量名称相同时,使用this代表成员变量。解决的是局部变量名称与成员变量名称冲突的情况。

【实例4】this关键字的作用

public class Person3 {
    //1.属性私有化
    private String name;//姓名
    private Integer age;//年龄
    //2.年龄属性:公有的取值赋值的方法
    public void setName(String name) {
        this.name = name;
    }
    //无参构造方法
    public Person3() {
        super();
    }
    //1个参数构造方法
    public Person3(String name) {
        super();
        this.name = name;
    }
    //2个参数构造方法
    public Person3(String name, Integer age) {
        super();
        this.name = name;
        this.age = age;
    }
    //3.编写类的方法
    public void show() {
        System.out.println("姓名:使用this="+this.name);
        System.out.println("姓名:省略this="+name);
    }
    public void intro() {
        System.out.println("调用show方法,使用this");
        this.show();
        System.out.println("调用show方法,省略this");
        show();
    }
}

编写测试方法

//测试Person3.intro()
@Test
public void introTest() {
    //使用带2个参数的构造方法实例化对象person
    Person3 person=new Person3("Tony",20);
    //调用方法intro()
    person.intro();
}

 

3 static关键字

3.1 为什么需要static

为了节约存储空间,在Java中有个关键字叫 static,在成员变量前加上 static之后,这个变量称为静态变量,将从堆内存中拿出放到方法区中的静态区去存储,可以被这个类的所有对象所共享。

【实例5】静态变量

public class Person5 {
    //1.类的属性
    private String name;
    private int age;
    public static String city;//城市
    //带参的构造方法
    public Person5(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    //编写show方法
    public void show() {
        System.out.println("姓名:"+name+"\t年龄:"+age+"\t城市:"+city);
    }
}

编写测试方法

//测试Person5类的show方法
@Test
public void showTest() {
    Person5.city="铁岭";
    //创建Person5类型的对象p1
    Person5 p1=new Person5("赵四儿", 56);
    //创建Person5类型的对象p2
    Person5 p2=new Person5("刘能二", 57);
    //调用方法
    p1.show();
    p2.show();
}

 

内存分析图:

 

主方法中的第一句 Person.city使用的是类名调用属性,在给这个属性赋值的时候并没有创建对象,所以 static修饰的属性是在创建对象之前就产生了,是在类加载到内存时就被加载到内存了。通过运行效果图可以看出,这个 static的属性在被赋了一次值之后,其他的对象都可以共享这个属性值了。

3.2 static的作用

static关键字的作用如下:

(1) static可以修饰成员变量,称为静态变量或者类变量;

(2) static可以修饰成员方法,称为静态方法或者类方法;

(3) static可以修饰代码块,称为静态代码块;

(4) static可以修饰内部类,称为静态内部类。

static修饰的方法或属性有两种调用形式

(1)类名.方法名()

类名.属性

(2)对象名.方法名()

对象名.属性

4 代码块

使用{}括起来的一段代码称为代码块 根据代码块的声明位置可分为以下四类:

4.1 普通代码块

声明在方法或语句中,通常用来限定变量的作用域。

【实例6】普通代码块

/*
 * 普通代码块
 * */
public class BlockDemo {
    public static void main(String[] args) {
        //普通代码块,定义在方法中的一对{},在{}中写代码
        {
            int i=10;
            System.out.println("我是普通代码块");
        }
    }
}

 

4.2 构造代码块

构造代码块与构造方法都是在创建对象时才被执行的,而且构造代码块优先于构造方法先执行。

【实例7】构造代码块

/*
 * 构造代码块
 * */
public class BlockDemo2 {
    //构造方法
    public BlockDemo2() {
        super();
        System.out.println("我是构造方法.......");
    }
    //构造代码块,声明在类中
    {
        System.out.println("我是构造代码块.......");
    }
    public static void main(String[] args) {
        BlockDemo2 blockDemo2=new BlockDemo2();
    }
}

 

4.3 静态代码块

静态代码块在类加载到内存时,一起被加载到内存中,而且只加载一次。

/*
 * 静态代码块,执行顺序优于构造代码块
 * 只执行一次
 * */
public class BlockDemo3 {
    //构造方法
    public BlockDemo3() {
        super();
        System.out.println("我是构造方法.....");
    }
    //构造代码块
    {
        System.out.println("我是构造代码块.....");
    }
    //静态代码块
    static {
        System.out.println("我是静态代码块.....");
    }
    public static void main(String[] args) {
        BlockDemo3 bd1=new BlockDemo3();
        System.out.println();
        BlockDemo3 bd2=new BlockDemo3();
        System.out.println();
        BlockDemo3 bd3=new BlockDemo3();
        System.out.println();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值