java别名机制

别名现象主要出现在赋值的问题上:
       对基本数据类型的赋值是很简单的.基本数据类型存储了实际的数值,而并非指向一个对象的引用,所以在为其赋值的时候,是直接将一个地方的内容复制到了另一个地方.例如,对基本数据类型使用a=b,那么b的内容就复制给a.若接着又修改了a,而b根本不会受这种修改的影响.
           但是在为对象"赋值"的时候,情况却发生了变化.对一个对象进行操作时,我们真正操作的是对对象的引用.所以倘若"将一个对象赋值给另一个对象",实际是将"引用"从一个地方复制到另一个地方.这意味着假若对对象使用c=d,那么c和d都指向原本只有d的指向的那个对象.下面这个例子将向大家阐述这一点.
[java]
<span style="font-size:18px;">package com.glacier.demo; 
 
class Tank { 
    int level; 

 
public class Main { 
 
    /**
     * @param args
     */ 
    public static void main(String[] args) { 
        // TODO Auto-generated method stub 
        Tank t1 = new Tank(); 
        Tank t2 = new Tank(); 
        t1.level = 9; 
        t2.level = 47; www.2cto.com
        System.out.println("1:  t1.level: " + t1.level + "       t2.level: " 
                + t2.level); 
        t1=t2; 
        System.out.println("2:  t1.level: " + t1.level + "       t2.level: " 
                + t2.level); 
        t1.level=27; 
        System.out.println("3:  t1.level: " + t1.level + "       t2.level: " 
                + t2.level); 
         
    } 
 
}</span> 

运行结果:
1:  t1.level: 9       t2.level: 47
2:  t1.level: 47       t2.level: 47
3:  t1.level: 27       t2.level: 27
            tank类非常简单,它的两个实例(t1和t2)是在main()里建立的.对每个tank类对象的level域都赋予了一个不同的值,然后,将t2赋给t1,接着有修改了t1.在许多编程语言中,我们可能会期望t1和t2总是相互独立的.但由于赋值操作的是一个对象的引用,所以修改了t1的同时也改变了t2!这是由于t1和t2包含的是相同的引用,它们指向相同的对象.(原本t1包含的对对象的引用,是指向一个值为9的对象.在对t1赋值的时候,这个引用被覆盖,也就是丢失了;而那个不再被引用的对象会由"垃圾回收器"自动清理.)
这种特殊的想象通常称作"别名想象",是java操作对象的一种基本方式.在这个例子中,如果想避免别名问题的话可以这样写:
t1.level=t2.level;
这样便可以保持两个对象彼此独立,而不是将t1和t2绑定到相同的对象.但你很快会意识到,直接操作对象内的域容易导致混乱,并且,违背了良好的面向对象程序设计的原则.这可不是一个小的问题,所以从现在开始大家应该留意,为对象赋值可能会产生意想不到的后果.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数字证书是一种用于验证和保护数据传输的安全机制,它可以用于身份验证、数据加密和数字签等应用。在Java中,数字证书的实现需要使用Java密钥库(Java KeyStore)和Java加密扩展(Java Cryptography Extension,JCE)。 以下是数字证书的Java实现步骤: 1. 生成密钥对 首先需要生成一个公钥和私钥对,这可以使用Java的密钥对生成器(KeyPairGenerator)类完成。以下示例代码展示了如何生成一个2048位的RSA密钥对: ``` KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); keyPairGenerator.initialize(2048); KeyPair keyPair = keyPairGenerator.generateKeyPair(); ``` 2. 创建数字证书请求 然后需要创建一个数字证书请求,这可以使用Java的证书请求(Certification Request)类完成。以下示例代码展示了如何创建一个数字证书请求: ``` X500Name subject = new X500Name("CN=example.com,O=Example Organization,C=US"); PKCS10CertificationRequest request = new PKCS10CertificationRequest("SHA256withRSA", subject, keyPair.getPublic(), null, keyPair.getPrivate()); ``` 其中,X500Name表示证书主体的信息,PKCS10CertificationRequest表示数字证书请求的类型,"SHA256withRSA"表示使用SHA-256算法和RSA密钥对进行签。 3. 签数字证书请求 接下来需要将数字证书请求发送到数字证书颁发机构(CA)进行签。在实际应用中,可以使用Java的证书签请求(CSR)类将数字证书请求发送到CA进行签,或者使用其他第三方工具完成此操作。 4. 导入数字证书 签完成后,数字证书将被发送回来。可以使用Java的密钥库(KeyStore)类将数字证书导入到Java密钥库中,以便在应用程序中使用。以下示例代码展示了如何将数字证书导入到Java密钥库中: ``` KeyStore keyStore = KeyStore.getInstance("JKS"); keyStore.load(null, null); keyStore.setCertificateEntry("example", certificate); ``` 其中,"example"为数字证书别名,certificate为数字证书的Java对象。 以上就是数字证书的Java实现步骤。需要注意的是,在实际应用中,数字证书的生成、签和导入通常需要更多的配置和参数设置,具体实现方式可能会有所不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值