Java对象

Java是一种面向对象的程序设计语言,面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。封装是将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。对象中的数据称为实例域,操作数据的过程称为方法。对于每个特定的类实例都有一组特定的实例域值。这些值的集合就是这个对象的当前状态。通过扩展一个类来建立另外一个类的过程称为继承。
类之间的关系
1. 依赖:如果一个类的方法操作另外一个类的对象,我们就说一个类依赖于另外一个类。应该尽可能的让类之间的耦合度最小。
2. 聚合:聚合关系意味着类A的对象包含类B的对象。
3. 继承:是一种表示特殊与一般关系的。
表达类关系的UML符号
图中的泛化表示的是继承,实现是指接口实现,聚集就是聚合,还有一种特殊的关联关系:直接关联(→)。

预定义类

并不是所有的类都是具有面向对象特征的。例如,Math类。Math类只是封装了功能,它不需要也不必隐藏数据。由于没有数据,因此也不必担心生成对象以及初始化实例域。

对象与对象变量

Date deadline,定义了一个对象变量deadline,它可以引用Date类型的对象。一个对象变量并没有实际包含一个对象,而仅仅引用一个对象。new操作符的返回值也是一个引用。下列语句:
Date deadline = new Date();
表达式 new Date()构造了一个Date类型的对象,并且它返回的值是对新创建对象的引用。这个引用存储在deadline中。
在Java中将时间和日历类分开是一种很好的面向对象设计。Date类的实例有一个状态即特定的时间点。时间是用距离一个固定时间点的毫秒数表示的,这个点就是所谓的纪元,它是UTC时间1970年1月1日00:00:00。GregorianCalendar类是用来表示日历的。两者可以使用如下的方法进行转换。

 GregorianCalendar gregorianCalendar = new GregorianCalendar();
        Date date = gregorianCalendar.getTime();
        gregorianCalendar.setTime(date);

隐式参数

Java 中的方法有两种参数类型:隐式参数和显式参数。隐式参数一般使用this来调用,显式参数是方法名后面括号中的数值。例如下面的代码:

 public void setName(String name){
        this.name = name;
    }

final实例域

final定义的实例域在构造对象时候必须初始化这样的域。也就是说必须确保在每一个构造器执行之后,这个域的值被设置,并且在后面的操作中,不能够再对它进行修改

对象包装器与自动装箱

基本数据类型对应的包装器类:Integer、Long、Float、Double、Short、Byte、Character、Void和Boolean,前面6个类派生于公共的超类Number。

注意:==运算符检测的是对象是否指向同一个存储区域,因此,下面的比较通常不会成立:

Integer a = 1000;
Integer b = 1000;
System.out.println(a == b);
解决这个问题的办法是在两个包装器对象比较时调用equals方法。自动装箱规范要求boolean,byte,char <= 127,介于-128 ~ 127之间的short和int被包装到固定的对象中。例如,如果在前面的例子中将a和b初始化为100,对他们比较的结果一定是成立的。

枚举类

由于枚举类限定了实例对象,所以在比较枚举类型的时候,可以直接使用“==”就可以了。所有的枚举类型都是Enum类的子类,toString方法能够返回枚举常量名。toString的逆方法是静态方法valueOf,可以将toString返回的枚举常量名称转换成枚举对象。ordinal方法返回enum声明中枚举常量的位置,位置从0开始计数。例如下面的枚举类代码:

enum Person {
    STUDENT("Student", 18), TEACHER("Teacher", 40);
    private String name;
    private int age;

    private Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

public class Test {
    public static void main(String[] args) {
        String student = Person.STUDENT.toString();
        System.out.println(student);
        Person STUDENT = Person.valueOf(Person.class, student);
        System.out.println(STUDENT.getAge() + ":" + STUDENT.getName());
        System.out.println(STUDENT.ordinal());
        Person[] persons = Person.values();
        System.out.println(persons);
    }
}

运行结果为:

STUDENT
18:Student
0
[Lcom.xzx.mvc.Person;@6ff4ff23
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值