Java基础笔记(十四)——封装
封装(好比ATM机)
将类的某些信息隐藏在类内部,不允许外部程序直接访问(隐藏对象的信息),通过该类提供的方法来实现对隐藏信息的操作和访问(留出访问的接口)。
特点:
1.只能通过规定的方法访问数据。
2.隐藏类的实例细节,方便修改和实现。
实现步骤:
1.修改属性的可见性——设为private。
2.创建getter/setter方法——设为public,用于属性的读写(只读属性(无法修改)/只写属性(无法获取))。
3.在getter/setter方法中加入属性控制语句——对属性值的合法性进行判断。
封装前
public class Dog {
int age;
} public class DogTest {
public static void main(String[] args){
Dog d=new Dog();
d.age=3;
System.out.println("年龄:"+d.age);
}
}
//运行结果
昵称:3
封装后
public class Dog {
private int age; public int getAge() {
return age;
} public void setAge(int age) {
if(age<0){
System.out.println("输入错误");
}else
this.age = age;
}
} public class DogTest {
public static void main(String[] args){
Dog d=new Dog();
d.setAge(3);
System.out.println("年龄:"+d.getAge());
Dog d1=new Dog();
d1.setAge(-3);
System.out.println("年龄"+d1.getAge());//因为没有赋值成功,所以值为默认初始值0
Dog d2=new Dog();
d1.setAge(-5);
if(d1.getAge()==0) //简单地加个判断处理
return;
System.out.println("年龄"+d1.getAge());
}
} //运行结果
年龄:3
输入错误
年龄0
输入错误
用带参构造函数给对象的属性赋值
public class Dog {
private int age;
public Dog(int age){
this.setAge(age); //这里若用this.age=age;则不能判断是否输入错误
}
public int getAge() {
return age;
} public void setAge(int age) {
if(age<0){
System.out.println("输入错误");
}else
this.age = age;
}
} public class DogTest {
public static void main(String[] args){
Dog d=new Dog(3);
if(d.getAge()==0)
return;
System.out.println("年龄:"+d.getAge()); Dog d1=new Dog(-3);
if(d1.getAge()==0)
return;
System.out.println("年龄"+d1.getAge());
}
} //运行结果
年龄:3
输入错误
包
作用:
1.提供多层命名空间,解决命名冲突,通过使用package,使处于不同package的类可以存在相同的名字(因为处在不同的文件夹下)。
2.对类按功能分类,使项目的组织更加清晰。当开发一个有非常多的类的项目时,如果不使用package对类进行分类,而是把所有类都放在一个package下,这样的代码不仅可读性差,而且可维护性也不好,会严重影响开发效率。
定义包:
语法:package 包名;
(1)必须放在Java源文件中的第一行
(2)一个Java源文件中只能有一个package语句
(3)包名全部英文小写
(4)命名方式:域名倒序+模块+功能
导入包:
语法:import 包名.类名
例:
导入util包中全部类:
import java.util.*;
导入包中指定类:
import java.util.Scanner;
常用系统包:
java.lang 包含java语言基础的类 (此包不需要显式地导入)
java.util 包含java语言中各种工具类
java.io 包含输入、输出相关功能的类
Java基础笔记(十四)——封装的更多相关文章
- java基础(十四)集合(一)
这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...
- Java基础(十四):泛型
一.Java 泛型: Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型. 泛型的本质是参数化类型,也就 ...
- Java学习笔记十四:如何定义Java中的类以及使用对象的属性
如何定义Java中的类以及使用对象的属性 一:类的重要性: 所有Java程序都以类class为组织单元: 二:什么是类: 类是模子,确定对象将会拥有的特征(属性)和行为(方法): 三:类的组成: 属性 ...
- Java基础笔记(四)——命名规则、数据类型
标识符即Java程序中需要自定义的名称,如变量名.方法名.类名.包名.工程名等. 标识符的命名规则: 1.可由字母.数字.下划线(_)和美元符($)组成,不能以数字开头. 2.严格区分大小写. 3.不 ...
- 正则表达式、Calendar类、SimpleDateFormat类、Date类、BigDecimal类、BigInteger类、System类、Random类、Math类(Java基础知识十四)
1.正则表达式的概述和简单使用 * A:正则表达式(一个字符串,是规则) * 是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串.其实就是一种规则.有自己特殊的应用. * B: ...
- 夯实Java基础(十四)——Java8新的日期处理类
1.前言 Java8之前处理日期一直是Java程序员比较头疼的问题,从Java 8之后,Java里面添加了许多的新特性,其中一个最常见也是最实用的便是日期处理的类——LocalDate.LocalDa ...
- java基础(十四章)
1.Java中的包(package) 2.1 包,对应到磁盘中的文件夹 2.2 新建一个class,默认保存在缺省包中 2.3 声明包的关键字:package package语句,置顶位置 2.4 导 ...
- Java 读书笔记 (十四) Java 方法
finalize() 方法 finalize() 用来清除回收对象. //为什么要回收内存?怎样写可以避免内存过多占用?什么时候需要手动回收内存? protected void finalize() ...
- Java基础(十四)代理(Proxy)
1.为什么要使用代理 代理可以在运行时创建一个实现了一组给定接口的新类.这种功能只有在编译时无法确定需要实现哪个接口时才有必要使用. 假设有一个表示接口的Class对象(有可能只包含一个接口),它的确 ...
- java基础第十四篇之Map
一,Map集合的特点: * * 1.Map集合和Collection集合,没有关系 * * 2.Map集合的元素是成对存在(夫妻关系) * Collection集合的元素是独立存在 ...
随机推荐
- 【leetcode刷题笔记】Reverse Linked List II
Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1-> ...
- ACM学习历程—HDU5422 Rikka with Graph(贪心)
Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he ...
- jcrop的bug
1 360(7.1.1.620,内核:31.0.1650.63)的极速模式下,出现裁剪框后,鼠标点击,页面就会滑动到底部. 查看了下源码,发现是下面的代码: function watchKeys() ...
- 使用Visual Studio进行单元测试-Part3
本文主要介绍Visual Studio(2012+)单元测试框架的一些技巧: 测试覆盖率的统计 测试分组 测试Setup/TearDown 测试调试 Exception测试 代码覆盖率的统计 VS下面 ...
- webpy+nginx+uwsgi安装配置
转:(1)安装Nginx1.1 下载nginx-1.0.5.tar.gz并解压1.2 ./configure (也可以增加--prefix= path指定安装路径)此时有可能会提示缺少pcre支持,如 ...
- Poj 3356 ACGT(LCS 或 带备忘的递归)
题意:把一个字符串通过增.删.改三种操作变成另外一个字符串,求最少的操作数. 分析: 可以用LCS求出最大公共子序列,再把两个串中更长的那一串中不是公共子序列的部分删除. 分析可知两个字符串的距离肯定 ...
- samba server导出/datasmb/目录;samba client挂载/data/至本地的/mydata目录;本地的mysqld或mariadb服务的数据目录设置为/mydata, 要求服务能正常启动,且可正常 存储数据;
实验环境:CentOS7 主机(mini2) :172.16.250.247 主机名::localhost 客户端(mini3):172.16.253.99 主机名:pxe99 #主机:配置文件的 ...
- linux日常管理-rsync格式
rsync支持网络到本地,本地到网络,本地到本地拷贝数据,支持增量拷贝.用作备份. man rsync rsync的两大用法.一种是通过shell,一种是deamon. shell pull远程机器 ...
- Android的系统结构简述
(该图片来自网络) Android系统结构主要分为四层,从上到下依次为,Application层,Application Framework层,lib层,Linux kernel层,下面对这四层进行简 ...
- 18_andriod常用布局&内容回顾
线性布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:androi ...