Java基础笔记(十四)——封装

封装(好比ATM机)

将类的某些信息隐藏在类内部,不允许外部程序直接访问(隐藏对象的信息),通过该类提供的方法来实现对隐藏信息的操作和访问(留出访问的接口)。

特点:

1.只能通过规定的方法访问数据。

2.隐藏类的实例细节,方便修改和实现。

实现步骤:

1.修改属性的可见性——设为private。

2.创建getter/setter方法——设为public,用于属性的读写(只读属性(无法修改)/只写属性(无法获取))。

3.在getter/setter方法中加入属性控制语句——对属性值的合法性进行判断。

封装前

public class Dog {
    int age;
}

public class DogTest {
    public static void main(String[] args){
        Dog d=new Dog();
        d.age=3;
        System.out.println("年龄:"+d.age);
    }
}
//运行结果
昵称:3

封装后

public class Dog {
    private int age;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if(age<0){
            System.out.println("输入错误");
        }else
            this.age = age;
    }
}

public class DogTest {
    public static void main(String[] args){
        Dog d=new Dog();
        d.setAge(3);
        System.out.println("年龄:"+d.getAge());
        Dog d1=new Dog();
        d1.setAge(-3);
        System.out.println("年龄"+d1.getAge());//因为没有赋值成功,所以值为默认初始值0
        Dog d2=new Dog();
        d1.setAge(-5);
        if(d1.getAge()==0)  //简单地加个判断处理
            return;
        System.out.println("年龄"+d1.getAge());
    }
}

//运行结果
年龄:3
输入错误
年龄0
输入错误

 用带参构造函数给对象的属性赋值

public class Dog {
    private int age;
    public Dog(int age){
        this.setAge(age);   //这里若用this.age=age;则不能判断是否输入错误
    }
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if(age<0){
            System.out.println("输入错误");
        }else
            this.age = age;
    }
}

public class DogTest {
    public static void main(String[] args){
        Dog d=new Dog(3);
        if(d.getAge()==0)
            return;
        System.out.println("年龄:"+d.getAge());

        Dog d1=new Dog(-3);
        if(d1.getAge()==0)
            return;
        System.out.println("年龄"+d1.getAge());
    }
}

//运行结果
年龄:3
输入错误

 包

作用:

1.提供多层命名空间,解决命名冲突,通过使用package,使处于不同package的类可以存在相同的名字(因为处在不同的文件夹下)。

2.对类按功能分类,使项目的组织更加清晰。当开发一个有非常多的类的项目时,如果不使用package对类进行分类,而是把所有类都放在一个package下,这样的代码不仅可读性差,而且可维护性也不好,会严重影响开发效率。

定义包:

语法:package 包名;  

(1)必须放在Java源文件中的第一行

(2)一个Java源文件中只能有一个package语句

(3)包名全部英文小写

(4)命名方式:域名倒序+模块+功能

导入包:

语法:import  包名.类名

例:

导入util包中全部类:

import java.util.*;

导入包中指定类:

import java.util.Scanner;

常用系统包:

java.lang   包含java语言基础的类 (此包不需要显式地导入)

java.util     包含java语言中各种工具类

java.io       包含输入、输出相关功能的类

posted @ 2019-03-09 10:06  tendo  阅读(227)  评论(0编辑  收藏  举报