`
totoxian
  • 浏览: 1074560 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

Java疑惑点解析(二)

阅读更多

用过C++的人都知道,C++中有个"拷贝构造函数"的概念。这个概念是为了解决C++中把一个对象指针赋值给另外一个对象指针,从而两个指针指向同一块内存区域而提出的。

同样,Java做为一门高级语言,它也无法避免这样的问题。Java中没有"拷贝构造函数"的概念,而是提出了一个"Clone"的概念。其实现机制还是利用C++中的"深拷贝"进行的。

下面是两个例子程序,对比一下前后就很容易得出结论了。

使用Clone机制前:

/*
* Main.java
*
* Created on 2007年8月4日, 下午6:34
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/

package testjavaclone;

/**
*
* @author df.sun
*/
public class Main {
private String name;
/** Creates a new instance of Main */
public Main() {
}

void setName(String name)
{
this.name = name;
}

String getName()
{
return this.name;
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Main a = new Main();
Main b = a;

a.setName("aaa");
b.setName("bbb");

System.out.println(a.getName());
System.out.println(b.getName());
}

}

使用Clone机制后:

/*
* Main.java
*
* Created on 2007年8月4日, 下午6:34
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/

package testjavaclone;

/**
*
* @author df.sun
*/
public class Main implements Cloneable{
private String name;
/** Creates a new instance of Main */
public Main() {
}

void setName(String name)
{
this.name = name;
}

String getName()
{
return this.name;
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws Exception{
// TODO code application logic here
Main a = new Main();
Main b = (Main)a.clone();

a.setName("aaa");
b.setName("bbb");

System.out.println(a.getName());
System.out.println(b.getName());
}

}

关于线程共享数据的问题。

程序1:

/*
* Main.java
*
* Created on 2007年8月4日, 下午7:00
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/

package testthread;

/**
*
* @author df.sun
*/
public class Main extends Thread{

private int couter = 10;
/** Creates a new instance of Main */
public Main() {
}

public void run()
{
for(int i = 0;i < 10;i++)
{
couter--;
}
System.out.println(couter);
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Thread a = new Thread(new Main());
Thread b = new Thread(new Main());

a.start();
b.start();
}

}

程序2:

/*
* Main.java
*
* Created on 2007年8月4日, 下午7:00
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/

package testthread;

/**
*
* @author df.sun
*/
public class Main extends Thread{

private int couter = 10;
/** Creates a new instance of Main */
public Main() {
}

public void run()
{
for(int i = 0;i < 10;i++)
{
couter--;
}
System.out.println(couter);
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Main m = new Main();
Thread a = new Thread(m);
Thread b = new Thread(m);

a.start();
b.start();
}

}

分享到:
评论

相关推荐

    JAVA谜思.doc JAVA 常见疑惑及解析

    在Java中,`double` 类型的数值表示是基于二进制浮点数的,这意味着某些十进制小数无法精确表示。当尝试从2.00中减去1.10时,由于1.1不能精确表示为二进制浮点数,计算结果会产生微小的误差,导致打印出的值是 `0....

    JAVA 解惑(解析JAVA开发中的95个疑惑点)

    ### JAVA 解惑(解析JAVA开发中的95个疑惑点) #### 知识点一:取余操作符在处理负数时的行为 **标题**: 奇数性 **描述**: 本节通过一个示例解释了Java中取余操作符(`%`)在处理负数时的行为特点。 **详细解释*...

    基于Java的NetCDF文件解析

    基于Java语言的NetCDF文件解析,使用了netcdf4和opencsv两个库,最终将解析后的数据导出为CSV,附依赖文件、源代码及一个测试数据样例。 可结合本人的博客...

    JAVA解惑.大全和问题解析

    它涵盖了Java的基础知识、常见疑惑点以及易错知识点,旨在帮助Java初学者和进阶者解决实际编程中的困扰。 1. **基础概念解析**: - 类与对象:Java是一种面向对象的语言,理解类的定义、对象的创建及其生命周期至...

    关于CoreJava同步的疑惑例子

    在这个“关于CoreJava同步的疑惑例子”中,我们将探讨Java中的同步机制,以及如何通过示例代码`Bank.java`, `TransferRunnable.java`, 和 `SynchBankTest.java`来理解这个概念。 1. **同步的必要性** 当多个线程...

    java期末考试试题两套(答案)+选择(附解析

    通过这套试题集,学习者不仅可以检验自己的Java知识水平,还可以通过答案和解析加深对每个知识点的理解,从而提升编程技能。同时,解析部分将帮助解答疑惑,使学习过程更为高效。记得理论结合实践,多做练习,才能...

    最新版的Java-解惑

    《Java解惑》是一本专为Java初学者和进阶者设计的指南,旨在帮助读者解决在学习和...以上知识点只是《Java解惑》中的一部分,通过深入学习和实践,你可以逐步解开Java编程中的种种疑惑,成为一名更优秀的Java开发者。

    4,JAVA解惑 高清PDF 下载

    《JAVA解惑》是Java开发者领域的一本经典著作,它被广大...总之,《JAVA解惑》是一本涵盖了Java核心知识点、实战技巧和高级特性的宝典,无论你是Java新手还是老手,都能从中受益匪浅,解决你在Java编程中的种种疑惑。

    Java面试解惑宝典(高清PDF版)

    "Java面试解惑宝典(高清PDF版)"提供了一份全面的学习资源,帮助Java开发者准备面试,解答疑惑。 首先,《Java程序员面试宝典》涵盖了基础语法、面向对象编程、集合框架、多线程、网络编程、I/O流、设计模式等核心...

    Java语言程序设计基础篇(Y.Daniel Liang 著)课后编程答案(全)

    课后编程答案集是学习过程中非常重要的参考资料,它能够帮助学生检验自己的理解和实践能力,解决在学习过程中遇到的疑惑。 Java是一种广泛使用的高级编程语言,由Sun Microsystems(现为Oracle Corporation)于1995...

    java 解惑

    6. **Java 十大基础笔记整理(PDF).zip**:这是一份整理好的Java基础知识点的笔记,涵盖了类、对象、接口、继承、异常处理、输入输出、集合框架等关键概念,适合初学者和复习者参考。 通过这些文件,我们可以系统...

    Java编程思想 Thinking in Java 课后习题答案

    该压缩包文件“Thinking In Java 练习题答案 第四版]Annotated+Solution+Guide+for+TIJ4.pdf”包含了《Thinking in Java》第四版的全部习题解答,这些解答通常会包括对问题的解析、代码实现以及可能的优化建议。...

    Java解惑(整理版本)

    《Java解惑(整理版本)》是一篇针对Java编程语言常见问题和疑惑的详细解析文章。博主通过深入探讨Java源码和使用工具的角度,帮助开发者解决实际开发中遇到的问题。以下将围绕标题和描述中的知识点进行展开: 1. *...

    java编程思想练习答案 the think in Java Annotated Solution Guide

    以下是对这份"Java编程思想练习答案"的详细解析: 1. **Java基础知识**:Java是一种面向对象的语言,其基础包括数据类型、变量、运算符、流程控制(如if-else、switch、for、while等)、类和对象、封装、继承、多态...

    JAVA编程利器Eclipse.pdf

    ### JAVA编程利器Eclipse——深度解析与应用指南 #### 一、引言 在现代软件开发领域,Java作为一门主流的编程语言,其强大的功能和广泛的适用性使其成为众多开发者和企业的首选。然而,高效的Java开发离不开优秀的...

    浅谈java面向对象和引用

    本文将围绕这两个概念进行深入探讨,并针对初学者常见的疑惑点进行解答。 #### Java面向对象基础 Java是一种完全面向对象的语言,几乎所有的功能都是通过类和对象来实现的。在Java中,类(Class)是一种定义对象的...

    零点起飞学Java随书源代码

    通过逐步解析和修改源代码,学习者将能够更好地掌握Java编程,并逐步建立起自己的编程思维。记住,实践是检验理解的最好方式,所以一定要动手尝试,遇到问题不要怕,这是成长的过程。在"万卷图书论坛"中寻找答案,...

    thinging in java 第四版 英文版

    通过实例解析,帮助读者理解如何设计和实现复杂的类和对象,以及如何利用接口来实现多态性。 2. **基础语法**:涵盖了变量、数据类型、运算符、流程控制语句(如if、switch、for、while)、方法定义与调用等基础...

    《Java2实用教程》课后习题参考答案(第三版)

    《Java2实用教程》是Java...这本书的答案集可以帮助解决自学过程中的疑惑,避免因为问题积累而导致的学习瓶颈,从而更加高效地掌握Java编程技能。在实践中不断应用和巩固所学,是成为一名优秀的Java程序员的关键步骤。

Global site tag (gtag.js) - Google Analytics