封装是面向对象语言一个非常重要的思想,它借助类来完成。
封装与类包括以下内容:
一.类
1.成员变量与局部变量
2.成员修饰符
二.方法重载
三.对象
1.构造方法
2.创建对象
3.使用对象
4.对象参数传值
5.垃圾回收机制
四.实例变量和类变量
五.类的发现与设计
1.分类
2.抽象
3.封装
4.CRC卡
六.对象的交互
1.对象协作
2.不可变对象
七.UML类图及关系
1.类图
2.依赖
3.聚合
4.组合
八.日志分析系统的设计与测试
小结
一.类
类是对一类事物的特征的描述,是抽象概念的声明,对象是实际存在的该类事物的个体。
java中没有全局变量,java中的变量大致可以分为成员变量和局部变量。成员变量是指在类体里定义的变量,也称为类的属性或数据成员;在形参、方法内部定义的变量和代码块中定义的变量,属于局部变量。
成员变量在整个类内都有效,局部变量只在它定义的方法体内有效。
public class Variable {
int allChicks=0;
int i=0;
public void method()
{
int i=1;
System.out.println("输出方法中i的值:"+i);
}
public void print()
{
System.out.println("输出类中成员变量i的值:"+i);
}
public static void main(String[] args)
{
Variable var=new Variable();
var.method();
var.print();
}
}
输出方法中i的值:1
输出类中成员变量i的值:0
2.成员修饰符
类体的每个方法或成员变量的访问权限都可以通过修饰符(public,private,protected,default)来指定,访问权限是实现信息隐藏的重要首手段。
二.方法重载
当要使用某个方法时,需要通过它的方法名来实现调用。要实现多个不同方法的调用,就需要给每个方法起不同的名字,但是这样不便于记忆和使用时不方便。
java允许定义多个参数不同但名字相同的方法,即所谓的“方法重载”。
方法重载能方便程序员开发,减少相同功能方法记忆上的困扰。
重载方法需要满足以下特性:
(1)方法名相同。
(2)方法的参数签名(即参数类型,个数,顺序)不相同。
(3)方法的返回值类型不相同,方法的修饰符也可以不相同·。
package com.litte0;
public class Painter {
public void draw(int i)
{
System.out.println("draw a digit,int's"+i);
}
public void draw(int x,int y)
{
System.out.println("draw a point,it's coordinate is"+x+"and"+y);
}
public void draw(String m)
{
System.out.println("draw a string,it's"+m);
}
}
public class Paintertest {
public static void main(String[] args) {
Painter mt=new Painter();
mt.draw(3);
mt.draw(2,4);
mt.draw("a good day");
}
}
对象
对象代表了某个可以识别的单元或实体,它可以是物理存在的,也可以是抽象存在的。
对象是一个具有状态、行为和标识符的实体,结构和行为类似的对象定义在它们的类中。
构造方法
构造方法是一类特殊的方法,它的名字必须与类名完全相同,并且不返回任何数据类型,构造方法不能有任何非访问性质的修饰符,也不能用void赖修饰。
类可以不定义构造方法,这时编译器会为类隐含声明一个方法体为空的无参构造方法。但当类有明确声明的构造方法时,编译器就不会自动生成无参构造方法了。
构造方法通过new操作符创建对象时被自动调用,调用规则与方法重载的规则是一致的。
package com.lat;
public class Cat {
private String color;
private int legs;
private String colorOfEyes;
private String name;
public Cat()
{
}
public Cat(String color,int legs)
{
this.color=color;
this.legs=legs;
}
public Cat(String color,int legs,String colorOfEyes,String name,String name)
{
this(color,legs);
this.colorOfEyes=colorOfEyes;
name=name;
}
public void setLegs(int alegs)
{
legs=alegs;
}
public int getLegs()
{
return legs;
}
public void eat()
{
System.out.println("I like fish!");
}
public void run()
{
System.out.println("I can run fastly!");
}
public static void main(String[] args)
{
Cat cat=new Cat();
cat.setLegs(2);
cat.eat();
cat.run();
}
}
本例使用了三个构造方法,第2个构造方法中使用了this关键字,它表示一个对象的引用,其值指向正在执行方法的对象。在第三个构造方法中,this用来调用构造方法,此时,this用于调用同一个对象中不同参数的另一个构造方法。特别地,构造方法中通过this关键字调用其他构造方法时,必须放在第一行,否则会编译时报错,构造方法中只能通过this调用一次其他构造方法。