JAVA类与对象
Employee类:
public class EmployeeTest
{
public static void main(String[] args)
{
// fill the staff array with three Employee objects
Employee[] staff = new Employee[3]; staff[0] = new Employee("Carl Cracker", 75000, 1987, 12, 15);
staff[1] = new Employee("Harry Hacker", 50000, 1989, 10, 1);
staff[2] = new Employee("Tony Tester", 40000, 1990, 3, 15); // raise everyone's salary by 5%
for (Employee e : staff)
e.raiseSalary(5); // print out information about all Employee objects
for (Employee e : staff)
System.out.println("name=" + e.getName() + ",salary=" + e.getSalary() + ",hireDay="
+ e.getHireDay());
}
} class Employee
{
public Employee(String n, double s, int year, int month, int day)
{
name = n;
salary = s;
GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
// GregorianCalendar uses 0 for January
hireDay = calendar.getTime();
} public String getName()
{
return name;
} public double getSalary()
{
return salary;
} public Date getHireDay()
{
return hireDay;
} public void raiseSalary(double byPercent)
{
double raise = salary * byPercent / 100;
salary += raise;
} private String name;
private double salary;
private Date hireDay;
}
对象变量是一个引用
例如:Employee zhangsan = new Employee("zhangsan",2000,2009,2,1);
其中new Employee建立了一个对象,但是new操作符返回对该对象的引用,并赋值给zhangsan变量,所以zhangsan仅为对象的引用,
而在Employee zhangsan2 = zhangsan中,将zhangsan引用赋值给zhangsan2,此时zhangsan和zhangsan2都将引用同一个对象。
对象变量可以初始化为null,例如Employee zhangsan = null;
在一个源文件中,只允许有一个公有类,但可以有任意数目的非公有类
例如EmployeeTest类即公有类,Employee 为非公有类
注意不要编写返回引用可变对象的方法
在函数getHireDay中,返回的是Date类对象的引用,这样会破坏封装性,例如下面的代码:
Employee harry = new harry("Harry",2000,1990,10,12);
Date date = harry.getHireDay();
double tenYearInMilliSeconds = 10 * 365 * 24 * 60 * 60 *1000;
d.setTime(d.getTime() - (long)tenYearInMilliSeconds);
出错的原因很简单,就是因为d和harry.hireDay引用同一个Date对象,对d调用setTime方法,就可以任意修改雇员对象的私有状态,如果需要返回一个可变对象的引用,应该首先对它进行克隆,即建立一个对象副本,修改代码如下:
public Date getHireDay()
{
return (Date) hireDay.clone();
}
每个类成员方法都有一个隐式参数,即调用该方法的对象,关键字this表示隐式参数
例如可以这样编写raiseSalary方法:
public void raiseSalary(double byPercent)
{
double raise = this.salary * byPercent / 100;
this.salary += raise;
}
java的所有方法都需要在类内部定义,但并不是在类内部就代表内联方法,是否将某个方法设置为内联方法是java虚拟机的任务
JAVA类与对象的更多相关文章
- Java类和对象初始化
类的生命周期: Java类的初始化: 本阶段负责为类变量赋正确的初始值.(类变量即静态变量) Java编译器把所有的类变量初始化语句和静态初始化器通通收集到<clinit>方法中,该方法只 ...
- java类和对象之间的差
java类和对象之间的差别是一个普遍的问题,刚开始学习java当它来到与类和对象接触.今天就来总结一下它们之间的差异. 先说说class和object差异.事实上,词:object是全部class的父 ...
- 危险代码:如何使用Unsafe操作内存中的Java类和对象
危险代码:如何使用Unsafe操作内存中的Java类和对象—Part1 危险代码:如何使用Unsafe操作内存中的Java类和对象—Part2 危险代码:如何使用Unsafe操作内存中的Java类和对 ...
- [Java初探08]__简单学习Java类和对象
前言 在前面的学习中,我们对面向对象的编程思想有了一个基本的了解,并且简单的了解了类和对象的定义.那么类和对象在Java语言中是如何表现的,这次,就从实际出发,学习一下一下类和对象在Java语言中的使 ...
- java类和对象
类是对象的抽象 对象是类的一个实例类 对象 = new 类();拿对象可以操作这个类里的方法 java类与对象的区别是个老生常谈的问题,刚开始学java的时候就开始接触类和对象,今天来总结一下他们之间 ...
- 解析Java类和对象的初始化过程
类的初始化和对象初始化是 JVM 管理的类型生命周期中非常重要的两个环节,Google 了一遍网络,有关类装载机制的文章倒是不少,然而类初始化和对象初始化的文章并不多,特别是从字节码和 JVM 层次来 ...
- JAVA类和对象课后作业
1.使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向它查询"你已经创建了多少个对象?" 代码: //显示类 //YiMingLai 2 ...
- Java类与对象的基础学习
1. 请输入并运行以下代码,得到什么结果? public class Test{ public static void main(String args[]){ Foo obj1=new Foo(); ...
- JAVA类与对象作业——动手动脑以及课后实验性问题
一: 1.源代码 //MAO2015.10.6 //foo class Foo { int value; public Foo(int initValue) { value = initValue; ...
- JAVA类与对象(九)------多态
多态是同一个行为具有多个不同表现形式或形态的能力.多态性是对象多种表现形式的体现. 多态存在的三个必要条件: 继承 重写 父类引用指向子类对象 例:Parent p = new Child(); 当使 ...
随机推荐
- Web Compiler
Web Compiler The easiest and most powerful way to compile LESS, Scss, Stylus, JSX and CoffeeScript f ...
- mysql 主命令总结
mysql 登录和恢复命令 mysqladmin 管理 mysql 命令 mysqldump 备份命令 mysqlbinlog 解析 binlog 命令 source 恢复数据命令
- treeview所有节点递归解法(转+说明)或者说递归的实际应用
public void PrintTreeViewNode(TreeNodeCollection node) { foreach (TreeNode n in node) { Response.Wri ...
- 写了一个简易的GBK文件向UTF8文件转换的工具
package com.bocom.framework.util; import java.io.BufferedReader; import java.io.BufferedWriter; impo ...
- iOS中什么是superView?(新手概念简述版)
文/司马陶冶(简书作者)/文章有删改原文链接:http://www.jianshu.com/p/8537dac37852 著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 在iPhone ...
- 关于yuv格式
首先,内存分布 1:YUV420 (1):I420: YYYYYYYY UU VV =>YUV420P (2): ...
- VS2012使用中容易出现的小问题(长期更新,错多少记多少)
1:各种属性之间一定要有空格!比如id 和 runat中间一定要有,在编译系统里虽然也能显示红色,但是...调试的时候一定会报错!而且这样的错误很难发现(相信我曾经花了半个小时才找出问题) 2:在类中 ...
- ADB server didn't ACK * failed to start daemon *
问题描述:在eclipse的Logcat出现错误 [2014-01-08 14:00:07 - adb] ADB server didn't ACK [2014-01-08 14:00:07 - ad ...
- JS动态添加option和删除option
1.动态创建select function createSelect(){ var mySelect = document.createElement("select"); ...
- Android动态方式破解apk进阶篇(IDA调试so源码)
一.前言 今天我们继续来看破解apk的相关知识,在前一篇:Eclipse动态调试smali源码破解apk 我们今天主要来看如何使用IDA来调试Android中的native源码,因为现在一些app,为 ...