`
snoopy7713
  • 浏览: 1151876 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

java常用类解析一:System类、Object类、Arrays类、Cloneable接口

    博客分类:
  • java
 
阅读更多
package test;
public class SystemDemo {
	public static void main(String[] args) {
		String[] s = new String[] { "liu" };
		String[] s2 = new String[] { "hai" };
		String[][] a = { s, s2, s, s, s, s2, s2, s };
		String[][] b = new String[10][10];
		/*
		 * System类包含一些有用的类字段和方法,是final类,无法被继承,构造方法是private,不能创建System对象。
		 * 所有public属性和方法都是final static
		 */
		// 1.数组复制,采用本地方法复制,实现了深拷贝
		System.arraycopy(a, 1, b, 0, 5);
		System.out.println(b[0][0]);
		// 2.已经过去的毫米数,从1970-1-1开始
		System.currentTimeMillis();
		// 3.提示虚拟机进行垃圾回收,通过调用Runtime.getRuntime().gc();实现
		System.gc();
		// 4.返回系统环境
		System.getenv();
		// 5.返回当前的系统属性。
		System.getProperties();
		// 6.可用於計數已過去的時間
		System.nanoTime();
		// 7.0表示正常退出,調用Runtime.getRuntime().exit(0);
		System.exit(0);
		// 8.返回给定对象的哈希码,该代码与默认的方法 hashCode() 返回的代码一样,无论给定对象的类是否重写 hashCode()。
		System.identityHashCode(null);
	}
}

 

package test;

public class ObjectDemo {
	/*
	 * 1.Object没有public 的静态属性和方法 
	 * 2.public final native Class<?> getClass()返回运行时类信息,
     * 3.toString 返回类名+@+哈希码值
	 * 4.其中wait和notify方法是final的,不可继承
	 * 5.equals方法只比较对象的引用,hashCode方法返回哈希码值。
	 * 6.重写equals方法要重写hashCode,因为相同的对象(通过equals比较返回true)
	 *   必须返回相同的哈希码。
	 * 7.finalize方法是一个protected空方法
	 * 8.protected native Object clone()返回一个副本,对象必须实现Cloneable接口
	 */
}
 
package test;

import java.util.Arrays;

public class ArraysDemo {
	/*
	 * 1.数组类提供了排序功能,对基本数据类型length<7采用直接插入排序,否则采用快速排序 如果数组元素时对象,采用合并排序
	 * 2.提供二分查找法实现,注意二分查找时先对数组进行排序,否则返回一个不确定值
	 */
	public static void main(String[] args) {
		int[][] a = { { 1, 2 } };
		int[][] b = { { 1, 2 } };
		System.out.println(Arrays.toString(a));
		// 3. 多维数组的toString
		System.out.println(Arrays.deepToString(a));
		System.out.println(Arrays.hashCode(a));
		System.out.println(Arrays.deepHashCode(a));
		System.out.println(Arrays.equals(a, b));
		// 4. 多维数组的比较
		System.out.println(Arrays.deepEquals(a, b));

		// 5. 并没有实现多维数组的复制
		int[][] c = Arrays.copyOf(a, 1);
		// 6.填充数组
		Arrays.fill(a[0], 5);// 在此改变a的值影响到了数组c的值
		System.out.println(Arrays.deepToString(c));
		System.out.println(Arrays.equals(a, c));
		System.out.println(Arrays.deepEquals(a, c));

	}
}
 
<span style="font-size:16px;">package test;

public class DeepCloneDemo {
	public static void main(String[] args) {
		B b = new B(2, new A(1));
		B b1 = (B) b.clone();
		System.out.println(b == b1);
		System.out.println(b.equals(b1));
		System.out.println(b.getClass() == b.getClass());
		System.out.println("改变b的副本b1前:y=" + b.getY() + ",x=" + b.getA().getX());
		b1.setY(5);
		b1.getA().setX(100);
		System.out.println("改变b的副本b1后:y=" + b.getY() + ",x=" + b.getA().getX());
		System.out.println("深克隆成功!!!");
	}
}

class A implements Cloneable {
	private int x;

	// 为了实现深克隆
	public Object clone() {
		A a = null;
		try {
			a = (A) super.clone();
		} catch (CloneNotSupportedException e) {
			e.printStackTrace();
		}
		return a;
	}

	public A(int x) {
		this.x = x;
	}

	public int getX() {
		return x;
	}

	public void setX(int x) {
		this.x = x;
	}
}

class B implements Cloneable {
	private int y;
	private A a;

	// 覆盖Object中clone方法
	// protected native Object clone() throws CloneNotSupportedException;
	// 注意到protected,这里把权限改为了public
	public Object clone() {
		B b = null;
		try {
			b = (B) super.clone();
			// 实现深克隆,没有这条语句只是克隆了a的引用
			b.a = (A) a.clone();
		} catch (CloneNotSupportedException e) {
			e.printStackTrace();
		}
		return b;
	}

	public B(int y, A a) {
		this.y = y;
		this.a = a;
	}

	public int getY() {
		return y;
	}

	public A getA() {
		return a;
	}

	public void setY(int y) {
		this.y = y;
	}

	public void setA(A a) {
		this.a = a;
	}
}
 

 

分享到:
评论

相关推荐

    java常用类解析及示例及一些工具类源代码

    主要讲解了System类、Object类、Arrays类、Cloneable接口、IO系统输入输出类及装饰类、IO系统文本读写工具类、IO系统二进制读写工具类、对象序列化工具类、File类及文件搜索工具类、java异常机制及自定义异常类、...

    JAVA经典教材笔记

    #### 第十一章:Java常用类库 - **StringBuffer类** - StringBuffer类的特点:线程安全的可变字符序列。 - StringBuffer类的常用方法:append、insert等。 - **Runtime类(单态)** - Runtime类的作用:获取与运行...

    12.【Object类、常用API】_API_

    Java中的`Object`类是所有类的根,无论是自定义的还是Java库中的类,它们都直接或间接地继承自`Object`。`Object`类提供了许多基础方法,这些方法对于理解和操作对象至关重要。在本知识块中,我们将深入探讨`Object`...

    java常用方法集合

    `Cloneable` 是一个标记接口,它不包含任何方法,其主要目的是表明实现该接口的类可以通过调用 `Object.clone()` 方法来进行对象克隆。由于 `clone()` 方法是受保护的,因此实现 `Cloneable` 接口的类需要重写该方法...

    JAVA面试题目

    常用接口有Comparable、Serializable、Cloneable等。 20. 类的反射机制 反射机制允许程序在运行期间访问和操作类、方法、接口等的内部信息。 21. 如何唤起类中的一个方法? 使用java.lang.reflect.Method类的...

    java编程基础,应用与实例

    15.3 java.util.Arrays类 236 15.4 java.util.StringTokenizer类 238 15.5 java.util.Calendar类 240 15.6 巩固练习 242 第16章 AWT程序设计 244 16.1 java.awt.Component类 244 16.2 java.awt....

    java 复制数组的资源

    - 自Java 5起,`java.util.Arrays`类提供了`copyOf()`方法,它也能用于复制数组。对于基本类型数组,这是与`System.arraycopy()`等价的,而对于对象数组,它同样执行浅拷贝。 ```java int[] original = {1, 2, 3,...

    JAVA容器试题.docx

    【JAVA容器试题解析】 一、不定选择题 1. Java 容器框架主要分为 Collection 和 Map 两种。其中,Collection 又分为A、List,B、Set,C、Queue,D、以上都是。答案:D。 2. 以下哪一个是线程安全的:A、Vector,B...

    arrayList源代码

    在Java集合框架中,`ArrayList`是一个非常重要的类,它实现了`List`接口,并提供了基于动态数组的数据结构。本篇将详细分析`ArrayList`的源码,帮助读者理解其内部实现机制。 #### 类定义 ```java public class ...

    java数组复制的四种方法效率对比

    System.arraycopy 是 Java 中最常用的数组复制方法。它可以将源数组的元素复制到目标数组中。该方法的参数包括源数组、源数组中的起始位置、目标数组、目标数组中的起始位置和要复制的元素数量。 public static ...

    实现数组复制常用的5种方式及组合类的深复制(深拷贝)

    这是Java util.Arrays类提供的一个便利方法,它创建一个新的数组,其内容与指定数组相同。性能介于`System.arraycopy()`和`for`循环之间。 ```java arr2 = Arrays.copyOf(arr, length); ``` 4. **使用clone()方法...

    ArrayList源码分析_016.pdf

    ArrayList是Java集合框架中的一种重要实现,它是List接口的一个具体类,提供了动态数组的功能。ArrayList在内部使用一个Object类型的数组来存储元素,因此它支持快速的随机访问,这是由其实现了RandomAccess接口所...

Global site tag (gtag.js) - Google Analytics