当前位置: 首页 > news >正文

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();
}

}

相关文章:

  • TypeError init() got an unexpected keyword argument ‘n_iter‘
  • 基于Perlin Noise的法线扰动
  • Cannot find reference ‘joblib‘ in ‘init.py‘
  • OperaMasks能否开创Java Web新格局
  • 机器学习预测的概率如何表示?
  • 外包误区:价格达成一致,怎么就那么难——外包实践(66)
  • 快速读懂词性标注和命名实体识别的区别
  • CCF 202012-1期末预测之安全指数
  • 从DOS到7 细说Windows成长历程
  • 为什么图像预处理矩阵要除以255?
  • 纹理映射
  • 21考研复试务必要注意的3点!
  • “微软技术魔鬼训练”二十天杂谈
  • 更改排序规则
  • 又入选Fractal Window Weekly了,Yeah!
  • 深入了解以太坊
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • JavaScript标准库系列——Math对象和Date对象(二)
  • JavaScript设计模式系列一:工厂模式
  • Java新版本的开发已正式进入轨道,版本号18.3
  • JS笔记四:作用域、变量(函数)提升
  • Python爬虫--- 1.3 BS4库的解析器
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  •  一套莫尔斯电报听写、翻译系统
  • const的用法,特别是用在函数前面与后面的区别
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (3)(3.5) 遥测无线电区域条例
  • (4)logging(日志模块)
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • .NET Core 项目指定SDK版本
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .net与java建立WebService再互相调用
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • @DataRedisTest测试redis从未如此丝滑
  • @PreAuthorize注解
  • [ 数据结构 - C++] AVL树原理及实现
  • [] 与 [[]], -gt 与 > 的比较
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [BZOJ2281][SDOI2011]黑白棋(K-Nim博弈)
  • [BZOJ4010]菜肴制作
  • [BZOJ5250][九省联考2018]秘密袭击(DP)
  • [C#]C# winform实现imagecaption图像生成描述图文描述生成
  • [ffmpeg] x264 配置参数解析