一、包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类只可以被同一个包内部的类访问。

Java学习day10-面向对象特征之一:封装和隐藏的更多相关文章

  1. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  2. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  3. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

  4. 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类

    static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...

  5. Java学习-029-JSON 之三 -- 模仿 cssSelector 封装读取 JSON 数据方法

    前文简单介绍了如何通过 json-20141113.jar 提供的功能获取 JSON 的数据,敬请参阅:Java学习-028-JSON 之二 -- 数据读取. 了解学习过 JQuery 的朋友都知道, ...

  6. JAVA学习之面向对象

    面向对象是相对面向过程而言面向过程:强调的是功能行为面向对象:将功能封装进对象,强调具备了功能的对象 不论面向对象还是面向过程都是一种开发思想而已.举一个例子来理解面向对象和面向过程把大象装进冰箱分三 ...

  7. Java学习:面向对象三大特征:封装、继承、多态之封装性

    面向对象三大特征:封装.继承.多态. 封装性在Java当中的体现: 方法就是一种封装 关键字private也是一种封装 封装就是将一些细节信息隐藏起来,对于外界不可见. 问题描述:定义Person的年 ...

  8. Java学习:面向对象的三大特征:封装性、继承性、多态性之继承性

    面向对象的三大特征:封装性.继承性.多态性. 继承 继承是多态的前提 ,如果没有继承,就没有多态. 继承主要解决的问题就是:共性抽取. 继承关系当中的特点: 子类可以拥有父类的“内容” 子类还可以拥有 ...

  9. Java学习:面向对象三大特征:封装性、继承性、多态性之多态性。

    面向对象三大特征:封装性.继承性.多态性之多态性. extends继承或者implemens实现,是多态性的前提. 例如:小菜是一个学生,但同时也是一个人.小菜是一个对象,这个对象既有学生形态,也有人 ...

  10. Java学习: 面向对象的使用与注意事项

    面向对象的使用与注意事项 面向过程:当需要实现一个功能的时候,每一个具体的步骤都需要亲力,详细处理每一个细节面向对象:当需要实现一个功能的时候,不关心具体的步骤,而是找一个已经具有该功能的人,来帮我做 ...

随机推荐

  1. Postman—cookie

    postman中可以直接添加cookie.查看响应中的cookie: 什么是cookie HTTP协议本身是无状态的.什么是无状态呢,即服务器无法判断用户身份.Cookie实际上是一小段的文本信息(k ...

  2. linux文件系统的类型

    文件系统的类型 兄弟连介绍-Linux有四种基本文件系统类型:普通文件.目录文件.连接文件和特殊文件,可用file命令来识别. 普通文件:如文本文件.C语言元代码.SHELL脚本.二进制的可执行文件等 ...

  3. 「概率,期望DP」总结

    期望=Σ概率*权值 1. Codeforces 148-D 考虑用$f[i][j]$表示princess进行操作时[还剩有i只w,j只b]这一状态的存在概率.这一概率要存在,之前draw out的一定 ...

  4. TCP服务器并发编程构架:完成端口IOCP模式

    windows下socket网络编程模式:IOCP 完成端口 1)IOCP异步事件的获取放到操作系统的网络驱动层来处理,实际上反而是降低了编程难度, 2)同时对于多线程的并发调度,也放到操作系统级别来 ...

  5. Codeforces Round #603 (Div. 2) E. Editor

    E. Editor 题目链接: https://codeforces.com/contest/1263/problem/E 题目大意: 输入一个字符串S1含有‘(’ , ‘)’ , ‘R’ , ‘L’ ...

  6. Broken pipe

    出现broken pipe 的一种情况是向socket写数据,但是对端已经关闭socket连接,此时会触发SIGPIPE信号,该信号可以捕获. signal(SIGPIPE, SIG_IGN);

  7. C3P0 详解

    定义: C3P0是一个开源的JDBC连接池,目前使用它的开源项目有Hibernate,Spring等. 数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”.预先在缓冲池中放入一定数量的连接,当需 ...

  8. URL里的分号';'一定要编码为%3b!!!!

    http://en.wikipedia.org/wiki/Query_string The series of pairs is separated by the ampersand, '&' ...

  9. Chrome谷歌页面翻译增强插件开发

    最近想做一个Chrome的插件(看别的博客说其实叫插件不准确,应该叫拓展,大家叫习惯了就按习惯的来吧).一开始咱先直接看了Chrome开发(360翻译)和chrome extensions(这个官方的 ...

  10. SpringBoot系列:一、SpringBoot搭建

    打开IDEA,新建一个spring工程,然后无脑下一步就行. 新建完成后的目录结构 java文件夹下是java源码 resources下是配置文件 test下是测试文件 添加web模块支持,在pom. ...