1、封装的作用和含义
我们程序设计追求“高内聚,低耦合”。
- 高内聚 :类的内部数据操作细节自己完成,不允许外部干涉;
- 低耦合 :仅对外暴露少量的方法用于使用。
封装就是用来达成这种目的的。
封装性的设计思想:隐藏对象内部的复杂性,只对外公开简单的接口,便于外界调用,从而提高系统的可扩展性、可维护性。通俗的说,把该隐藏的隐藏起来,该暴露 的暴露出来。
2、包
(1)包对应于文件系统的目录,package语句中,用 “.” 来指明包(目录)的层次。
(2)作用:为了将我们类进行分目录管理。
(3)包的命名规则:
- 包名所有的字母都小写
- 包名采用公司域名的逆序
(4)语法格式
package 顶层包名.子包名
(5)JDK中主要的包介绍
- java.lang----包含一些Java语言的核心类,如String、Math、Integer、 System和 Thread,提供常用功能
- java.net----包含执行与网络相关的操作的类和接口。
- java.io ----包含能提供多种输入/输出功能的类。
- java.util----包含一些实用工具类,如定义系统特性、接口的集合框架类、使用与日 期日历相关的函数。
- java.text----包含了一些java格式化相关的类
- java.sql----包含了java进行JDBC数据库编程的相关类/接口
- java.awt----包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这 些类被用来构建和管理应用程序的图形用户界面(GUI)。
(6)导包–import
import语句告诉编译器到哪里去寻找类,来引入指定包层次下所需要的类或全部类(.*)。
语法格式:
import 包名.类名;
注意事项:
- 在源文件中使用import显式的导入指定包下的类或接口。
- 声明在包的声明和类的声明之间。
- 如果需要导入多个类或接口,那么就并列显式多个import语句即可。
- 可以一次性引入指定包层次下所需要的全部类或接口(.*)。 例如:
import java.util.*;//一次性导入util包下所有的类或接口
- 如果导入的类或接口是java.lang包下的,或者是当前包下的,则可以省略此import语句。
- 如果在代码中使用不同包下的同名的类。那么就需要使用类的全类名的方式指明调用的是哪个类。
- 如果已经导入java.a包下的类。那么如果需要使用a包的子包下的类的话,仍然需要导入。
- import static组合的使用:调用指定类或接口下的静态的属性或方法。
3、访问权限修饰符
Java权限修饰符public、protected、(缺省)、private置于类的成员定义前, 用来限定对象对该类成员的访问权限。
对于class的权限修饰只可以用public和default(缺省)。
- public类可以在任意地方被访问。
- default类只可以被同一个包内部的类访问。
4、信息隐藏
(1)使用者对类内部定义的属性(对象的成员变量)的直接操作会导致数据的错误、混乱或安全性问题,应该将属性保护起来, 防止乱用。
保护的方式:信息隐藏
(2)Java中通过将数据声明为私有的(private),再提供公共的(public) 方法:getXxx()和setXxx()实现对该属性的操作,以实现下述目的:
- 隐藏一个类中不需要对外提供的实现细节;
- 使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑, 限制对属性的不合理操作;
- 便于修改,增强代码的可维护性。
(3)例子
改前:
class Animal {
public int legs;
}
public class Zoo {
public static void main(String args[]) {
Animal xb = new Animal();
xb.legs = 4;
System.out.println(xb.legs);
xb.eat();
xb.move();
}
}
改后:
class Animal {
private int legs;// 将属性legs定义为private,只能被Animal类内部访问
public void setLegs(int i) { // 在这里定义方法 eat() 和 move()
if (i != 0 && i != 2 && i != 4) {
System.out.println("Wrong number of legs!");
return;
}
legs = i;
}
public int getLegs() {
return legs;
}
}
public class Zoo {
public static void main(String args[]) {
Animal xb = new Animal();
xb.setLegs(4); // xb.setLegs(-1000); //xb.legs = -1000; // 非法
System.out.println(xb.getLegs());
}
}
5、构造方法 / 构造器
(1)特征
- 它具有与类相同的名称
- 它不声明返回值类型。(与声明为void不同)
- 不能被static、final、synchronized、abstract、native修饰,不能有 return语句返回值
(2)构造方法的作用:
- 创建对象
- 完成对象的初始化(为成员属性赋值)
- 为成员属性设置默认值
(3)语法格式
修饰符 类名 (参数列表) {
初始化语句;
}
(4)分类
根据参数不同,构造器可以分为如下两类:
- 隐式无参构造器(系统默认提供)
- 显式定义一个或多个构造器(无参、有参)
注 意:
- Java语言中,每个类都至少有一个构造器,默认提供一个无参构造器
- 默认构造器的修饰符与所属类的修饰符一致
- 一旦显式定义了构造器,则系统不再提供默认构造器
- 一个类可以创建多个重载的构造器,父类的构造器不可被子类继承
public Person() {
System.out.println("构造方法执行");
}
public Person(String n) {
name = n;
}
public Person(int a) {
age = a;
}
public Person(String n ,int a) {
name = n;
age =a;
}
6、关键字this
this:表示当前对象
- this可用于区分同名的成员变量和局部变量
- this可以调用本类的其他的重载的构造方法。在构造方法中使用this调用其他构造方法,必须位于该构造方法的第一句,故this调用构造方法只能调用一次。
- this也可以用于setter()和getter()方法中。
- 使用this访问属性和方法时, 如果在本类中未找到,会从父类中查找
public Person() {
System.out.println("构造方法执行");
}
public Person(String name) {
this.name = name;
System.out.println(name);
}
public Person(int age) {
this.age = age;
}
public Person(String name ,int age) {
this(name);
this.age = 18;
}
7、JavaBean
JavaBean是一种Java语言写成的可重用组件。 所谓javaBean,是指符合如下标准的Java类:
- 类是公共的
- 有一个无参的公共的构造器
- 有属性,且有对应的get、set方法
//类是公共的
public class Student {
//成员属性
private String stuNo;
private String stuName;
private int stuAge;
//构造器
//1 先写无参
public Student() {
}
//有参构造若干
public Student(String stuName,int stuAge) {
this.stuName = stuName;
this.stuAge = stuAge;
}
public Student(String stuNo,String stuName,int stuAge) {
this(stuName,stuAge);
this.stuNo = stuNo;
}
//对应的get、set方法
public void setStuNo(String stuNo) {
this.stuNo = stuNo;
}
public String getStuNo() {
return this.stuNo;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public String getStuName() {
return this.stuName;
}
public void setStuAge(int stuAge) {
this.stuAge = stuAge;
}
public int getStuAge() {
return this.stuAge;
}
}