JAVA 面向对象
在java中最简单的类定义为
class Test{ 属性1; 属性2; 构造方法1; 构造方法2; 方法1; 方法2; }
构造器
public class You { String name; public You(String name) { this.name = name; } public void nihao(){ System.out.println("你好"+name); } }
- 构造器与类同名
- 每个类有一个以上的构造器
- 构造器可以有0个,1个或者多个参数
- 构造器没有返回值
- 构造器会伴随着new操作符一起使用
请注意不要在构造器中定义与实例域重名的局部变量
this关键字
在非构造方法中都会有一个隐式参数,是这个类的实例, 在每一个方法中关键字this表示隐式参数, 如果方法中有一个变量没有被声明, 他会去实例域寻找, 但是如果像上面的构造方法一样参数名与实例域的字段同名,可以通过this来寻找.
常用的封装
public class You { String name; String sex; public You(String name) { this.name = name; } public You(String name,String sex) { this.name = name; this.sex = sex; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public String getSex() { return this.sex; } }
getXXX通常被称为访问器方法, 因为他们只返回实例域值, 因此又称为与访问器.
只有getXXX的属性也叫只读域, 一旦在构造器中设置完毕, 就没有任何一个方法可以对他进行修改
一个类的对象可以访问所属类的所有对象的私有数据
public boolean equals(You other){ return this.name.equals(other.name); }
final常量实例属性
将实例属性定义为final. 构建对象时必须初始化这个属性, 也就是说必须在确保每一个构造器执行后,这个属性被设置, 并且在后面的操作中, 不能够再对他进行修改
final修饰符大多用于基本类型的字段或者不可变类型的字段(如果类中的每个方法都不会改变其对象,这种类就是不可变类)
对于可变的类使用final会造成混乱, final只是说明该变量的指向不会变, 但是如果他指向一个数组的话,其内部元素还是可以变的.
私有方法
使用private替换public即可将一个公共的方法替换为私有的, 私有方法不允许外部的其他类调用.
静态属性与静态方法
如果一个类中的属性声明为static, 那么这个类中的所有实例都会共享这个实例, 即使没有实例存在,这个属性也存在,它属于类而不属于任何独立的对象.
静态变量用的比较少, 但是静态常量使用的比较多, 比如Math类中定义了一个常量.
public final class Math { public static final double PI = 3.14159265358979323846; }
在程序中可以采用Math.PI的形式获得这个常量,
静态方法
静态方法是一种不能向对象实施操作的方法, 比如Math类下的一些方法, 他们不需要实例化Math类就可以调用, 可以认为这是没有this参数的方法, 静态方法不能够访问除静态属性外的其他属性, 因为他没有实例.在下面两种情况下使用静态方法
- 一个方法不需要访问对象状态, 其所需要的参数都是通过显示参数提供
- 二是只需要访问类的静态域
静态方法还有另外一种常见的用途: 工厂方法, 通过静态方法来生成对象
为什么不用构造器来完成这些操作呢, 主要由两个原因:
- 一是因为构造器的名字必须与类相同.
- 当使用构造器是, 无法改变构造对象的类型
方法参数
java的参数是按值调用的, 也就是说方法得到的是所有参数值的一个拷贝, 方法修改不了传递给他的任何参数变量的内容(或者说是指向吧), 但是方法参数有两种类型
- 基本数据类型
- 对象引用
一个方法修改不了一个基本数据类型的参数, 但可以修改一个对象的属性