封装(好比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基础笔记(十四)——封装的更多相关文章

  1. java基础(十四)集合(一)

    这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...

  2. Java基础(十四):泛型

    一.Java 泛型: Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型. 泛型的本质是参数化类型,也就 ...

  3. Java学习笔记十四:如何定义Java中的类以及使用对象的属性

    如何定义Java中的类以及使用对象的属性 一:类的重要性: 所有Java程序都以类class为组织单元: 二:什么是类: 类是模子,确定对象将会拥有的特征(属性)和行为(方法): 三:类的组成: 属性 ...

  4. Java基础笔记(四)——命名规则、数据类型

    标识符即Java程序中需要自定义的名称,如变量名.方法名.类名.包名.工程名等. 标识符的命名规则: 1.可由字母.数字.下划线(_)和美元符($)组成,不能以数字开头. 2.严格区分大小写. 3.不 ...

  5. 正则表达式、Calendar类、SimpleDateFormat类、Date类、BigDecimal类、BigInteger类、System类、Random类、Math类(Java基础知识十四)

    1.正则表达式的概述和简单使用 * A:正则表达式(一个字符串,是规则)     * 是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串.其实就是一种规则.有自己特殊的应用. * B: ...

  6. 夯实Java基础(十四)——Java8新的日期处理类

    1.前言 Java8之前处理日期一直是Java程序员比较头疼的问题,从Java 8之后,Java里面添加了许多的新特性,其中一个最常见也是最实用的便是日期处理的类——LocalDate.LocalDa ...

  7. java基础(十四章)

    1.Java中的包(package) 2.1 包,对应到磁盘中的文件夹 2.2 新建一个class,默认保存在缺省包中 2.3 声明包的关键字:package package语句,置顶位置 2.4 导 ...

  8. Java 读书笔记 (十四) Java 方法

    finalize() 方法 finalize() 用来清除回收对象.  //为什么要回收内存?怎样写可以避免内存过多占用?什么时候需要手动回收内存? protected void finalize() ...

  9. Java基础(十四)代理(Proxy)

    1.为什么要使用代理 代理可以在运行时创建一个实现了一组给定接口的新类.这种功能只有在编译时无法确定需要实现哪个接口时才有必要使用. 假设有一个表示接口的Class对象(有可能只包含一个接口),它的确 ...

  10. java基础第十四篇之Map

    一,Map集合的特点: *  * 1.Map集合和Collection集合,没有关系 *  * 2.Map集合的元素是成对存在(夫妻关系) *         Collection集合的元素是独立存在 ...

随机推荐

  1. 如何用Mendeley引用目标期刊要求的参考文献格式

    如果我们要向目标的杂志期刊投稿,则需要采用该期刊的参考文献格式.我用的mendeley管理文献,不收费且使用方便.那么,我们如何用mendeley引用目标期刊的参考文献呢?以Applied energ ...

  2. Agc019_D Shift and Flip

    传送门 题目大意 给定两个长为$n$的$01$串$A,B$,每次操作有三种 将$A$整体向左移动,并将$A_1$放在原来$A_n$的位置上. 将$A$整体向有移动,并将$A_n$放在原来$A_1$的位 ...

  3. uoj279温暖会指引我们前行

    暖气来啦~ 动态树维护最大生成树裸题 #include<iostream> #include<cstdio> #include<cstdlib> #include& ...

  4. Java面试题10(如何取到set集合的第一个元素)

    1.如何取到set集合的第一个元素. public static void main(String[] args) { Set set = new HashSet(); set.add("x ...

  5. MYSQL root密码修改找回命令

    方法1: 用SET PASSWORD命令 mysql -u root mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass ...

  6. fedora使用mac osx字体和渲染方式

    fedora 19的倒退(中文显示有问题)让人感到很沮丧,不过,后来还是找到了一个很好的解决方案:使用max osx的字体和渲染方式 1. 安装infinality字体渲染软件: rpm -Uvh h ...

  7. ACM学习历程—FZU2195 检查站点(树形DP || 贪心)

    Description 在山上一共有N个站点需要检查,检查员从山顶出发去各个站点进行检查,各个站点间有且仅有一条通路,检查员下山前往站点时比较轻松,而上山时却需要额外的时间,问最后检查员检查完所有站点 ...

  8. bzoj 2460: 元素 线性基

    题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=2460 题解: RT 线性基裸题 #include <cstdio> #inc ...

  9. 问题5:如何快速找到多个字典中的公共键(key)

    方法一:for in循环 from random import randint, sample a1 = {k; randint(1, 4) for k in 'abcdefg'} a2 = {k; ...

  10. css3 利用perspective实现翻页效果和正方体 以及翻转效果

    要点: 1 实现3D效果就需要使用perspective属性 1 页面旋转使用css3的rorate 2 使用backface-visibility 实现正面元素翻转之后背面不可见,显示出反面的元素 ...