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类只可以被同一个包内部的类访问。
Java学习day10-面向对象特征之一:封装和隐藏的更多相关文章
- 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用
垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...
- 0028 Java学习笔记-面向对象-Lambda表达式
匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...
- 0025 Java学习笔记-面向对象-final修饰符、不可变类
final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...
- 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类
static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...
- Java学习-029-JSON 之三 -- 模仿 cssSelector 封装读取 JSON 数据方法
前文简单介绍了如何通过 json-20141113.jar 提供的功能获取 JSON 的数据,敬请参阅:Java学习-028-JSON 之二 -- 数据读取. 了解学习过 JQuery 的朋友都知道, ...
- JAVA学习之面向对象
面向对象是相对面向过程而言面向过程:强调的是功能行为面向对象:将功能封装进对象,强调具备了功能的对象 不论面向对象还是面向过程都是一种开发思想而已.举一个例子来理解面向对象和面向过程把大象装进冰箱分三 ...
- Java学习:面向对象三大特征:封装、继承、多态之封装性
面向对象三大特征:封装.继承.多态. 封装性在Java当中的体现: 方法就是一种封装 关键字private也是一种封装 封装就是将一些细节信息隐藏起来,对于外界不可见. 问题描述:定义Person的年 ...
- Java学习:面向对象的三大特征:封装性、继承性、多态性之继承性
面向对象的三大特征:封装性.继承性.多态性. 继承 继承是多态的前提 ,如果没有继承,就没有多态. 继承主要解决的问题就是:共性抽取. 继承关系当中的特点: 子类可以拥有父类的“内容” 子类还可以拥有 ...
- Java学习:面向对象三大特征:封装性、继承性、多态性之多态性。
面向对象三大特征:封装性.继承性.多态性之多态性. extends继承或者implemens实现,是多态性的前提. 例如:小菜是一个学生,但同时也是一个人.小菜是一个对象,这个对象既有学生形态,也有人 ...
- Java学习: 面向对象的使用与注意事项
面向对象的使用与注意事项 面向过程:当需要实现一个功能的时候,每一个具体的步骤都需要亲力,详细处理每一个细节面向对象:当需要实现一个功能的时候,不关心具体的步骤,而是找一个已经具有该功能的人,来帮我做 ...
随机推荐
- DevExpress v18.2版本亮点——Analytics Dashboard篇(一)
行业领先的.NET界面控件——DevExpress v18.2版本亮点详解,本文将介绍了DevExpress Analytics Dashboard v18.2 的版本亮点,新版30天免费试用!点击下 ...
- 数列前n项和
等差数列 等比数列 常见的前n项和
- hbase完全分布式搭建
1.解压缩hbase的软件包,使用命令: tar -zxvf hbase-1.3.0-bin.tar.gz 2.进入hbase的配置目录,在hbase-env.sh文件里面加入java环境变量.即: ...
- 【leetcode】494. Target Sum
题目如下: 解题思路:这题可以用动态规划来做.记dp[i][j] = x,表示使用nums的第0个到第i个之间的所有元素得到数值j有x种方法,那么很容易得到递推关系式,dp[i][j] = dp[i- ...
- 对webpack从零配置
一.新建配置文件,文件名一般为webpack.config.js: 二.配置文件目录,一般为根目录,一般会放在./build文件夹下 三.配置文件格式一般为module.exports={}, 四.结 ...
- js 文件下载 兼容ie
前置条件:后台接口返回二进制流文件 一.设置前端请求的的 responseType: 'blob' 二.接收请求数据并调用下载 var content = res.data // 接口返回的二进制流v ...
- Day_04-数组,元组,列表
# for i in range(5): # for j in range(5): # print(i,j) # import re # def rm(): # a = ' 1 2 3 4 5 ' # ...
- Serverless Kubernetes入门:对kubernetes做减法
背景 Kubernetes作为通用的容器编排系统,承载了广泛的应用和场景,包括CI/CD,数据计算,在线应用,AI等,然而由于其通用性和复杂性,管理一个kubernetes集群对于很多用户而言还是充满 ...
- react native之封装离线缓存框架
请求数据=>本地有无缓存+缓存数据是否过期 =>可用 =>不可用 将代码封装成一个DataStore.js文件, 这里面主要提供:从本地获取数据,从网络获取数据,创建本地时间戳,请求 ...
- mysql LIKE通配符 语法
mysql LIKE通配符 语法 作用:用于在 WHERE 子句中搜索列中的指定模式.惠州大理石平板 语法:SELECT column_name(s) FROM table_name WHERE co ...