本章的测试代码存放在 com.j2ee110.csdn.leader.oob 包路径下面
大家的练习代码存放在 com.j2ee110.csdn.student.姓名标识.oob 包路径下面
面向对象又叫OOB,当他出来的时候被认为是一项软件开发的革命,我记得我当时但是公司的大牛们整天都是OO,方式谁还在面向过程谁就已经落后了。时至今日我们依然可以在各大招聘网站的招聘要求中依旧可以看到,“属性面向对象编程”,“熟悉OO”,等词汇。但是,到底什么是对象,什么是面向对象的方法,怎么样的代码算是面向对象,其实让我将我也不能描述清楚,但是我觉得java语言的面向对象我们还是可以探讨一下的。
首先对于OOB的灵魂类,java做了很好也很简单的定义
任何java代码都必须包含在类中,而在源代码级别,一个java类的源代码总是定义的一个类(当然java可以将两个类定义一个源文件中,但是一个源文件一个类已经成了事实上的标准,关于这部分具体的内容可以参考“java基础的链接”),因此当我们开始写java代码的时候总是先创建一个类,然后在类里面编写相关的业务方法。
有了类,下面就是对象和对象的生命周期。java对象的定义非常简单,new 关键字,至于对象的生命周期这个是java最让人放心的地方,JVM提我们管理了,它会把不需要的对象自动删除。
这个时候有人会提出这样的问题,JVM怎么知道哪些对象已经不在被使用呢?这就引出了GC,俗称“垃圾收集器”,他专门负责把不要使用的对象销毁并释放出这些对象占据的空间,那GC有根据哪些参数来判断呢?(这是大家在面试的时候可能会碰到的问题,虽然我个人认为这个问题很无聊,但还是有人问)
如果深入的去探究这些问题可能会写一本书,还真有这么一本书《深入java虚拟机》,大家可以看看,这里我想大家推荐一篇文章,因为我觉得这篇文章将的比我好
原文地址 Java GC 算法总结
因为原文的网站不太稳定,所以我在大本营中专贴了一篇
之所以在这里提到GC的相关算法,那是为了面试准备的。
java面向对象的三要数
我知道面向对象有三大基本核心就是 继承、函数重载、和多态。说到这三点,我想已经参加过面试的朋友既爱又恨,爱的是面试的时候总是会被问到这样的问题,恨的是每当被问到这个问题总是有这样的感觉,“我知道这三个概念,但是我不知道如何描述这三个概念”,呵呵,恕我直言,我觉得“不知道如何描述就是不知道这个概念”,那么java中是如何来体现这三大概念呢,我觉得用代码来说会更加清楚一点。
首先我们先看看在java中继承是怎么实现的,其实很简单只要用到extends 这个关键字即可。代码(这些代码都是部分摘要,详细的代码请到com.j2ee110.csdn.leader.oob 包路径下面产看)
- public class Employee {
- private Long id; //员工编号
- private String name; //员工姓名
- private Date brithday; //出生年月
- private Double weight; //体重
- private String job;// 0,代表普通鱼啊弄,1,代表小组负责人,2,代表部门负责人
- /** 默认的构造方法 */
- public Employee(){
- }
- // 其余代码可请参考com.j2ee110.csdn.leader.oob下面的同名类
- }
- public class Teamleader extends Employee {
- /**
- *
- */
- public Teamleader() {
- this.setJob("1");
- }
- /**
- *
- * @param id
- * @param name
- * @param brithday
- * @param weight
- * @param job
- */
- public Teamleader(Long id, String name, Date brithday, Double weight) {
- super(id, name, brithday, weight, "1");
- }
- /**
- * 在本类中重新改写了 toString()方法
- */
- public String toString() {
- return new ToStringBuilder(this).append("brithday", this.getBrithday())
- .append("name", this.getName()).append("id", this.getId()).append("job",
- this.getJob()).append("weight", this.getWeight()).append("title","我是组长").toString();
- }
- }
- public class DivisionPrincipal extends Employee {
- /**
- *
- */
- public DivisionPrincipal() {
- this.setJob("2");
- }
- /**
- * @param id
- * @param name
- * @param brithday
- * @param weight
- * @param job
- */
- public DivisionPrincipal(Long id, String name, Date brithday, Double weight) {
- super(id, name, brithday, weight, "2");
- }
- /**
- * 在本类中重新改写了 toString()方法
- */
- public String toString() {
- return new ToStringBuilder(this).append("brithday", this.getBrithday())
- .append("name", this.getName()).append("id", this.getId()).append("job",
- this.getJob()).append("weight", this.getWeight()).append("title","我是部门经理").toString();
- }
- }
上述代码中首先定义了一个employee类,然后定义了类teamleader,这个类继承了类 employee, 代码的形式很简单。但是如果从业务角度说,关于上面的定义在业务上的解释是这样的“所有员工具有的特性组长都用,但是组长具有一些员工不具备的特性”,在代码中我们可能会看到employee中的方法teamleader中也可以用,但是如果我们仔细研究便会发现,在“也可以用”之前需要加上两个字部分,由此引出了类中方法和变量的使用范围,其实很简单只有三个关键字,private,property,public。只要记住这三个关键字,即可。
我一直认为代码是说明一门编程语言特性的最好的方式,为了说明这三个关键字,我在teamleader类和DivisionPrincipal类中使用到了这三个关键字。我强烈建议大家动手试一试,大家可以创建相关的对象然后尝试调用一下。注意大家可以在本章包路径以外的路径从新声明一个类然后调用teamleader类和DivisionPrincipal类的对象,如果还不清楚赶快跟我联系。
接口和抽象类
类和对象的基本要素我们介绍完了,但是对于java来说还有一个比较重要但是也是比较搞人的概念,接口和抽象类。曾经无数次在面试中被问及这个概念,我的答案也是从网上看来的:“接口说明一个对象像什么,而抽象类说明一个对象是什么”。这就是我的回答,似乎每次都能混过关,但是我觉得能混过关的原因是问的人也不是很清楚他们之间的概念。
因为我很快也成了问这个问题的人,但是我依旧不能很好的对二者做出区别,既然我也不是很清楚,按我也就不在这里胡说误导大家乐,我建议大家看看《Thinking in java》,这本书做出了一个比较好的解释,但是许多人跟我说他看不懂。但是我还是建议大家仔细阅读阅读,要想看懂,读一遍肯定是不行的。
一点建议
大家仔细研究一下 Employee类,可以发现这个类定义了一些 private filed ,然后又很多针对这些 filed 的get和set方法。其实这就是传说中的值对象。值得对象就是把数据用对象组织起来,我想大家以后一定会非常多的见到这类对象的。再个合理我想大家一定发现了在这个对象有个 toString() 方法,至于这个方法是做什么用的,大家可以仔细的考虑考虑,后面遇到的我们在跟大家解释。
课后练习
今天的课后练习是:
假设我们要对产品进行描述,产品的属性有(编号,名称,数量,类型),但是产品还会分为次品和废品,次品额外的增加了(发现日期,次品原因)这个两个属性,而废品增加了(报废时间,发现日期)这两个属性。要求用创建相关的类型来确定他们之间的关系
我提供一些英文单词给大家参考,如果自己词汇比较丰富的可以不用,但是我强烈反对用 “aaa” “bbb”之类命名
名称 | 英文 | 简称 |
产品 | product | product |
废品 | wastrel | wastrel |
次品 | defective | defective |
检查 | check | check |
注意这些代码必须存放在com.j2ee110.csdn.student.姓名标识.oob 包路径下面
暑期java基础巩固训练营开始
java基础巩固训练营 简介
java基础巩固训练营【第一轮】(一)项目环境和规范
java基础巩固训练营【第一轮】(二)JAVA基础
java基础巩固训练营【第一轮】(三) 编写、编译、运行
java基础巩固训练营【第一轮】(四) 利器(IDE工具)
java基础巩固训练营【第一轮】(五) 基本数据类型
java基础巩固训练营【第一轮】(六) 面向对象的JAVA
java基础巩固训练营【第一轮】(七) 数据结构中的java
java基础巩固训练营【第一轮】(八) 文件读写
java基础巩固训练营【第一轮】(九) 用java通信
java基础巩固训练营【第一轮】(十) 多线程
java基础巩固训练营【第一轮】(十一) 直面错误--java异常
java基础巩固训练营【第一轮】(十二) 我们一起来找茬
ava基础巩固训练营【第一轮】(十三) java桌面应用
java基础巩固训练营【第一轮】(十四) 大家一起做项目
如果您对我的文章感兴趣的话,请点击这里加我为好友,让我们一起进步
http://student.csdn.net/invite.php?u=106708&c=2383a3846076c876