一、包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. layui table 分页 记住之前勾选的数据

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. R语言-变量命名规则

    1.大原则:只有字母(区分大小写).数字.“_”(下划线).“.”(英文句号)可以出现. 2.数字.下划线不能开头. 3.英文句号开头不能紧接数字. 就这么简单!

  3. 【python】对于程序员来说,2018刑侦科推理试卷是问题么?

    最近网上很火的2018刑侦科推理试卷,题目确实很考验人逻辑思维能力. 可是对于程序员来说,这根本不是问题.写个程序用穷举法计算一遍即可,太简单. import itertools class Solu ...

  4. Codecombat 游戏攻略(计算机科学三)

    第二关 赋值运算符-=字符串拼串循环语句while // 你可以把字符串连起来,或者把数字连接到字符串. // 一起唱歌,使用字符串连接: // X potions of health on the ...

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

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

  6. 2018 CCPC 秦皇岛 I (状压DP)

    题意: 首先t组数据  (t<=5),一个n代表有n件东西,每个东西可以代表两个物品,商品或者袋子,每个都有个值,如果这个要代表袋子的话,当前就代表是容量,而且必须把其他几件不是袋子的物品放一些 ...

  7. 大数据笔记(六)——HDFS的底层原理:JAVA动态代理和RPC

    一.Java的动态代理对象 实现代码如下: 1.接口类MyService package hdfs.proxy; public interface MyService { public void me ...

  8. mui初级入门教程(七)— 基于native.js的文件系统管理功能实现

    文章来源:小青年原创发布时间:2016-08-01关键词:mui,nativejs,android转载需标注本文原始地址: http://zhaomenghuan.github.io... 前言 这段 ...

  9. 豆瓣镜像安装python库

  10. MVC2: 路由 及 遇到问题记录

    MVC 路由 重定向 问题记录 1)MVC 路由 入口方法: (Global.asax)Application_Start()--->(App_Start/RouteConfig.cs)Regi ...