java基础巩固训练营【第一轮】(六) 面向对象的JAVA

本章的测试代码存放在 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 包路径下面产看

 

 

 

Code:
  1. public class Employee {   
  2.   
  3.        
  4.        
  5.     private Long     id; //员工编号   
  6.     private String   name; //员工姓名   
  7.     private Date     brithday; //出生年月   
  8.     private Double   weight; //体重   
  9.     private String   job;// 0,代表普通鱼啊弄,1,代表小组负责人,2,代表部门负责人   
  10.        
  11.        
  12.     /** 默认的构造方法 */  
  13.     public Employee(){   
  14.            
  15.            
  16.     }   
  17.         
  18.     // 其余代码可请参考com.j2ee110.csdn.leader.oob下面的同名类   
  19.   
  20. }   
  21.   
  22.   
  23. public class Teamleader extends Employee {   
  24.   
  25.     /**  
  26.      *   
  27.      */  
  28.     public Teamleader() {   
  29.            
  30.            
  31.         this.setJob("1");   
  32.            
  33.     }   
  34.   
  35.     /**  
  36.      *   
  37.      * @param id  
  38.      * @param name  
  39.      * @param brithday  
  40.      * @param weight  
  41.      * @param job  
  42.      */  
  43.     public Teamleader(Long id, String name, Date brithday, Double weight) {   
  44.         super(id, name, brithday, weight, "1");   
  45.        
  46.     }   
  47.        
  48.        
  49.        
  50.     /**  
  51.      * 在本类中重新改写了 toString()方法  
  52.      */  
  53.     public String toString() {   
  54.         return new ToStringBuilder(this).append("brithday"this.getBrithday())   
  55.                 .append("name"this.getName()).append("id"this.getId()).append("job",   
  56.                         this.getJob()).append("weight"this.getWeight()).append("title","我是组长").toString();   
  57.     }   
  58.        
  59.        
  60.        
  61.        
  62.   
  63. }   
  64.   
  65.   
  66.   
  67. public class DivisionPrincipal extends Employee {   
  68.   
  69.     /**  
  70.      *   
  71.      */  
  72.     public DivisionPrincipal() {   
  73.            
  74.         this.setJob("2");   
  75.     }   
  76.   
  77.     /**  
  78.      * @param id  
  79.      * @param name  
  80.      * @param brithday  
  81.      * @param weight  
  82.      * @param job  
  83.      */  
  84.     public DivisionPrincipal(Long id, String name, Date brithday, Double weight) {   
  85.         super(id, name, brithday, weight, "2");   
  86.     }   
  87.        
  88.        
  89.     /**  
  90.      * 在本类中重新改写了 toString()方法  
  91.      */  
  92.     public String toString() {   
  93.         return new ToStringBuilder(this).append("brithday"this.getBrithday())   
  94.                 .append("name"this.getName()).append("id"this.getId()).append("job",   
  95.                         this.getJob()).append("weight"this.getWeight()).append("title","我是部门经理").toString();   
  96.     }   
  97.        
  98.   
  99.        
  100. }   
  101.   
  102.   

 

上述代码中首先定义了一个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”之类命名

名称英文简称
产品productproduct
废品wastrelwastrel
次品defectivedefective
检查checkcheck

 

注意这些代码必须存放在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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值