文档章节

Java基础知识2

DouDouLee
 DouDouLee
发布于 2016/04/29 10:56
字数 1048
阅读 27
收藏 0

1、构造函数

通常用来在对象实例化时初始化对象的成员变量。

1)构造函数必须与类的名字相同,并且不能有返回值(也不能返回void)

2)每个类都有一个默认的无参构造函数,修饰符只与所在的class有关(类为class,构造函数也是class)。一个类可以有多个构造函数,构造函数可以有n个参数,即可以被重载。

3)构造函数伴随着new一个类的时候一起调用。

4)构造函数不能被继承,因此不能被覆盖。

2、接口

由于Java不支持多重继承,为了克服单继承的缺点,引入了接口,可以实现多个接口的方式间接达到多重继承的目的。

接口中成员的作用域修饰符都是public,常量值默认使用public static final修饰。接口中只包含方法的定义不包括方法的实现。

Java语言中有些接口内部并没有声明任何方法,此种接口又叫标识接口,仅有标识作用类似汽车的标志图标,人们看到图标就知道是哪款车,目前Java类库中存在的标识接口有Cloneable,Serializable等。

3、clone()

protected Object clone()
                throws CloneNotSupportedException

继承自Object的clone()方法返回Object对象的新对象,不是引用。

深复制和浅复制:

浅复制:不复制对象的引用,即对象的引用仍指向原来的值,如b复制a,则a,b仍指向同一个存储空间,改变其中一个的值另一个也会跟着改变。

深复制:在对对象调用clone()完成复制后,对对象中非基本类型的方法等clone().如Obje.java中对getBirth()进行clone()。

浅复制:

package Four;

class Obj implements Cloneable{
 private int aInt = 0;
 public int getInt(){
  return aInt;
 }

 public void changeInt(){
  this.aInt = 1;
 }  
 public Object clone(){
  Object o = null;  
  try{
   o = (Object)super.clone();
  }catch(CloneNotSupportedException e){
   e.printStackTrace();
  }
  return o;
 }

}
public class CloneTest {
 public static void main(String[] args){
  Obj a = new Obj();
  //Creates and return a copy of this Object
 
  Obj b = (Obj)a.clone();//若是 Obj b = a;则changeInt()不会改变aInt的值,此时b是a的引用
  
   Obj c = a;
  b.changeInt();
  System.out.println("a: "+a.getInt());
  System.out.println("b: " + b.getInt());
  System.out.println("c: " + c.getInt());
 }
}/*
a: 0
b: 1
c: 0*/

深复制:

package Four;

//深复制

import java.util.Calendar;
class Obje implements Cloneable{

  Calendar date = Calendar.getInstance();//类中包含对象(即非基本类型,需要深度复制)

 public Calendar getBirth(){
  return date;
 }
 public void setBirth(Calendar date){
  this.date = date;
 }
 public void changeDate(){
  // Calendar.set(Calendar.MONTH, int month).
  this.date.set(Calendar.MONTH, 5);
 }
 public Object clone(){
  Obje obj = null;
  try {
   obj = (Obje)super.clone();
  } catch (CloneNotSupportedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

  obj.date = (Calendar)this.getBirth().clone();//深复制

  return obj;
 }
}
public class DeepClone {
 public static void main(String[] args){
  Obje a = new Obje();
  Obje b = (Obje)a.clone();
  b.changeDate();
  System.out.println("a = "+a.getBirth());
  System.out.println("b = " + b.getBirth());
 }
}
/*如果不对getBirth()进行clone()则输出a,b的Month都改变,输出5,深复制后只有b的Month改变了*/

4、反射机制(待补充)

Java语言一个非常重要的特性,允许程序在运行时进行自我检查,同时对内部成员进行操作,能够实现在运行时对类进行装载。

反射机制的功能主要有:得到一个对象所属的类:实例.getClass();获取一个类的所有成员变量和方法;在运行时创建对象;在运行时调用对象的方法。

3种方法获取到class类:

1)class.forName("Test");//创建一个类的引用

2)类名.class;//每个类都有一个Class对象,每当编写并编译了一个新类,就会产生一个Class对象(保存在一个.class文件中)

3)实例.getClass()

Java中4种创建对象的方法:

1)new语句

2)反射机制

Class c = Class.forName("Test");
Base b = (Base)c.newInstance();

3)clone()

 Obje b = (Obje)a.clone();

4)反序列化

5、回调函数

利用接口与类实现实现类似指针的效果:定义一个接口,在接口中声明要调用的方法,接着实现这个接口,最后把实现接口类的对象作为参数传递给调用程序,调用程序通过参数来调用指定的函数,从而实现接口回调。

© 著作权归作者所有

上一篇: Java基础3
下一篇: Java基础知识1
DouDouLee
粉丝 6
博文 95
码字总数 45242
作品 0
西安
私信 提问
Java培训实战教程之Java基础知识精华部分(一)(二)(三)

Java培训实战教程之Java基础知识精华部分(一)_java概述 =============================================================================Java培训实战教程之Java基础知识精华部分(一)_java概...

黑泽明军
2018/04/13
0
0
BAT等大厂Android面试书单和知识点清单

java是Android开发的基础,在BAT的初面中,会涉及到比较多的java基础知识,所以比较重要,下面我介绍的书籍内容是由浅到深。 1.Thinking in java:这本书被称为Java的三大圣经之一,虽然书比...

android自学
2018/07/25
0
0
Java程序员必读书单,家族又添新成员

点击关注异步图书,置顶公众号 每天与你分享IT好书 技术干货 职场知识 参与文末话题讨论,每日赠送异步图书。 ——异步小编 有些革命出其不意地吸引了全世界的眼球。Twitter、Linux操作系统和...

异步社区
2018/05/09
0
0
如果你想学习Java,那么就来看这篇文章

一、前言 我是从大二开始学习的Java,当时的目标是Java Web开发,当时并不想考研,所以当时的学习是以就业为主,现在我大三了,学习Java Web开发已经一年了,因为种种原因,决定要考研,所以...

Jivanmoon
2018/08/27
0
0
大数据开发培训:0基础学习Java编程语言有哪些知识点?

Java 技术通用、高效、具有平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网等,学习Java首先要知道学习知识点有哪些。在这就用加米谷大数据培训...

加米谷大数据
2018/07/25
2
0

没有更多内容

加载失败,请刷新页面

加载更多

好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
今天
6
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
今天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
今天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
今天
17
0
浅谈java过滤器Filter

一、简介 Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码、做一些业务逻辑判断如是否有权限访问页面等。其工作原理是,只要你在web.xml...

青衣霓裳
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部