Java学习day10-面向对象特征之一:封装和隐藏

一、包package和引用import

1.关键字package

  package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包(若缺省该语句,则指定为无名包)。包的存在是为了区别同名类名的命名空间。

包的语法格式

package 顶层包名.子包名;

 实例:

package P1;//指定类Test属于包p1
public class Test{
    public void display(){
        System.out.println("in method display());
    }
}

   注意:包对应于文件系统的目录,package语句中,用”.“来指明包(目录)的层次。

              Java中的包package等同于文件夹的概念,包和文件夹一样可以有多级,也就是包下可以有包和文件,多级的包使用”.“分隔,例如com包下的cn包下的test包,写法为com.cn.test。

         包通常用小写单词,类名首字母通常大写。

2.关键字import

  为使用定义在不同包中的Java类,需用import语句来引入指定包层次下所需要的类或全部类(.*)。import语句告诉编译器到哪里去寻找类。

语法格式:

import 包名.子包名.类名;

实例

import p1.Test;//指明p1中的Test类。(若是import p1.*;则表示引入p1包中的所有类)
public class TestPackage{
    public static void main(String args[]){
        Test t = new Test();
        t.display();
    }
}

  注意:若引入的包为java.lang,则编译器默认可获取此包下的类,不需要再显示声明。

        import语句出现在package语句之后、类定义之前。

     一个源文件中可包含多个import语句。

     可以使用import Lee.*;语句,表明引入lee包下的所有类。而lee包下的sub子包的类则不会被导入。

     import语句不是必须的,可坚持在类里使用其他类的全名

3.JDK中主要的包介绍

  java.lang----包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。

  java.net----包含执行与网络相关的类和接口。

  java.io----包含能提供多种输入/输出功能的类。

  java.util----包含一些实用工具类,如定义系统特性、接口的集合框架类、使用与日期日历相关的函数。

  java.test----包含了一些Java格式化相关的类

  java.sql----包含了Java进行JDBC数据库编程的相关类/接口

  java.awt----包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。

  java.applet----包含applet运行所需的一些类。

二、封装和隐藏

  使用者对类内部定义的属性(对象的成员变量)的直接操作会导致数据的错误、混乱或安全性问题。

 实例:

package day10;

public class Person {
    public int age;
    //我们需要对不能让调用者随意使用的属性做封装和隐藏
    public void printAge(){
        System.out.println("年龄是:" + age);
    }
}



package day10;
import day10.Person;//如果使用的是同一个包下的类,import可以省略
public class Test {
    public static void main(String[] args){
        Person p = new Person();
        p.age = -100;//这样的情况,程序是对的,但不符合实际情况
        //这种情况,类的属性是开放的,调用者可以随意调用,容易出问题。
        p.printAge();
    }
}

以上程序可以进行隐藏和优化更改为:

package day10;

public class Person {
    //public int age;
    //我们需要对不能让调用者随意使用的属性做封装和隐藏
    private int age;
    
    public int getAge(){
        return age;
    }
    
    public void setAge(int a){
        if(a <=150 && a>=0){
            age = a;
        }else{
            System.out.println("输出的年龄:" + a + "不在0到150之间");
        }
    }
    
    public void printAge(){
        System.out.println("年龄是:" + age);
    }
}


package day10;
import day10.Person;//如果使用的是同一个包下的类,import可以省略
public class Test {
    public static void main(String[] args){
        Person p = new Person();
        //p.age = -100;//这样的情况,程序是对的,但不符合实际情况
        //这种情况,类的属性是开放的,调用者可以随意调用,容易出问题。
        p.setAge(-100);
        p.printAge();
    }
}

打印结果:

  信息的封装和隐藏

  Java中通过将数据声明为私有的(private),再提供公共的(public)方法:getXxx()和setXxx()实现对该属性的操作,以实现下述目的:

    1.隐藏一个类中不需要对外提供的实现细节;

    2.使用者只能通过事先定制好的方法来访问数据,可以方便的加入控制逻辑,限制对属性的不合理操作;

    3.便与修改,增加代码的可维护性;

四种访问权限修饰符

  Java权限修饰符public、protected、private置于类的成员定义前,用来限定对象对该类成员的访问权限。

  

  对于class的权限修饰只可以用public和default(缺省)。

  public类可以在任何地方被访问,在同一个Java文件中可以写多个的class,但是只能有一个是public的,其他的只能是缺省的。

  default类只可以被同一个包内部的类访问。

猜你喜欢

转载自www.cnblogs.com/su-peng/p/11858727.html