一、包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. 原始http下载图片生成文件

    package com.example.demo.util; import java.io.*;import java.net.URL;import java.net.URLConnection;im ...

  2. mysql 在查字符串字段中 条件参数传为数字0查到与实际数据不匹配问题

    比如: CREATE TABLE `e` ( `id` int(11) DEFAULT NULL, `status` varchar(255) DEFAULT NULL, `b` varchar(25 ...

  3. 如何判断系统是32位还是64位的linux系统

    如何判断系统是32位还是64位的linux系统 某日,需要下载个安装包,忽然忘记了自己的系统是32位还是64位的系统了,一时想不起来怎么查看时32位还是64位,呵呵,随便百度下,就发现有好多方法,这里 ...

  4. delphi 10.3 控件遮挡 webbrowser

    听闻10.3的新特性之一,webbrowser可以被其他控件遮挡, 在等待10.3.1出来后才开始来尝鲜, 但在webbrowser上添加控件后, 发现控件还是被挡住了, 研究发现需要将控件的cont ...

  5. 组件的属性props

    组件的属性props 是不能自己改的,一般是从外面传进来.在组件的视图中用,this.props.XXX 表示该组件的XXX 属性

  6. nginx 静态资源WEB服务

    1.静态资源类型 非服务器动态运行生成的文件 类型种类 浏览器端渲染     HTML.CSS.JS 图片            JPEG.GIF.PNG 视频            FLV.MPEG ...

  7. pandas中的describe方法

  8. Mac sublime安装package controller

    https://packagecontrol.io/installation#st2  链接被墙了这个. 我拿来放在这里. The simplest method of installation is ...

  9. MySQL主主模式

    mysql主主复制配置: HOSTNAME IPADDR PORT节点1:my-prod01.oracle.com 192.168.10.97 3306 节点2:my-prod02.oracle.co ...

  10. Tarjan算法整理

    众所周知,tarjan是个非常nb的人,他发明了很多nb的算法,tarjan算法就是其中一个,它常用于求解强连通分量,割点和桥等.虽然具体实现的细节不太一样,但是大体思路是差不多的.先来说一下大体思路 ...