【Java个人笔记】类
参考:《Java核心技术 卷I》 菜鸟教程(www.runoob.com)
目录
本文知识体系如下:
类
描述:类(class)是构造对象的模板和蓝图
类与对象:以类为模板实例化一个对象,对象是类的一个实例,一个类可以有多种实例化(类—>对象),类的描述一类对象的行为和状态
类间关系:依赖(“uses-a”)用一个类A的方法操作另一个类B的对象,称为A依赖于B(尽可能地将互相依赖的类简直最少,即耦合度将至最低)
聚合(“has-a”)类A的对象包含类B的对象
继承(“is-a”)用于拓展类的功能,后面会着重学习
预定义类与自定义类:预定义类,已经封装好可供使用的叫预定义类,譬如Math类、Date类,无需自己重新编译同功能的类,也不太需要了解该功能如何实现,只需知道怎么使用即可;自定义类,自己编辑成员变量与成员方法,与要实现的目标关系较大。
以下是一个Person类
class Person{
\\以下是“人”类的实例变量,每个人都具有姓名性别年龄
private String name;
private String sex;
private int age;
\\构造方法
\\默认构造方法,如不添加构造方法,该方法会自动生成
Person(){
}
\\自定义构造,在实例化对象时可以给该对象附上实例变量name
Person(String name){
this.name = name;
}
\\成员方法(调用该方法Person表示长大1岁)
public void Grow(){
this.age += 1;
}
}
实例域
用final修饰实例域之后,该实力域将不可变
构造方法
1、与类同名,无返回值,总是伴随new操作调用
2、每个类都有构造方法。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。
即上面的Person(){};
3、在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。
实例变量
上面name,sex,age等变量,随着对象实例化而赋值、变得有意义。也就是对象某种属性(如年龄性别)的模板
成员方法
通俗来讲就是对象的行为,对象会做什么,对他做什么之后他有什么反应等等
显式参数和隐式参数:在调用方法时向方法传入的参数,例如public void Grow(a)中的a,称为显式参数;方法体中出现的对象成员变量称为隐式变量。
静态域
每个类只有这么一个域,用static修饰,为该类的所有对象所共用。并且不用实例对象便可使用,直接用类名调用
静态域中有静态变量,静态常量,静态方法
静态变量(类变量)
静态常量
例如Math.PI调用Math类中public static final double PI = 3.1415926535897932
静态方法
当方法与对象无关,没有隐式参数,或只需访问静态域时使用静态方法
工厂方法 静态构造方法
main方法 作为程序的入口(当需要测试某个类时可独立添加main方法,并单独执行该类,称为单元测试)
补充
1、静态变量(类变量),成员变量,局部变量
1.局部变量:在方法、构造方法、语句块中定义的变量。其声明和初始化在方法中实现,在方法结束后自动销毁
public class ClassName{
public void printNumber(){
int a;
}
// 其他代码
}
2.成员变量:定义在类中,方法体之外。变量在创建对象时实例化。成员变量可被类中的方法、构造方法以及特定类的语句块访问。
public class ClassName{
int a;
public void printNumber(){
// 其他代码
}
}
3.类变量:定义在类中,方法体之外,但必须要有 static 来声明变量类型。静态成员属于整个类,可通过对象名或类名来调用。
public class ClassName{
static int a;
public void printNumber(){
// 其他代码
}
}
2、封装,访问权限
在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
封装的优点
1. 良好的封装能够减少耦合。
2. 类内部的结构可以*修改。
3. 可以对成员变量进行更精确的控制。
4. 隐藏信息,实现细节。
实现Java封装的步骤
1. 修改属性的可见性来限制对属性的访问(一般限制为private),例如:
public class Person { private String name; private int age; }
这段代码中,将 name 和 age 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。
2. 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问,例如:
public class Person{ private String name; private int age; public int getAge(){ return age; } public String getName(){ return name; } public void setAge(int age){ this.age = age; } public void setName(String name){ this.name = name; } }
采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。
待更:方法参数,类设计技巧