Java 之 一个类怎样引用另外一个类的成员变量

通常常用的有:A类有个变量C,B类想调用C
方法一:
变量C是非静态的(static),那么在B类中创建一个A类的对象,用对象.变量名就可以了

public class A
{
    // b是不是静态变量,称为实例变量,只能通过实例使用。
    public int b;
}
 
// 在类B中使用类A中的变量
public class B
{
    public void Test1()
    {
        //存取A中的实例变量x,必须先实例化A,然后才能使用
        A a = new A();
        a.b = 70;
        Console.WriteLine(a.b);
    }
}

方法二:
(1)变量C是静态的(static),调用其他类文件的变量C或自身类文件中在其他类中定义的变量C,用类.变量名C
(2)变量C是静态的(static),调用自身类文件中外层类中定义的变量C,直接用变量名C

示例如下:
自身类文件中在其他类中定义的变量C,用类.变量名C示例如下

public class A
{
   // a是静态变量(static),称为类变量。类变量无需实例化就可以用了;
    public static int x;
}
 
// 在类B中使用类A中的变量
public class B
{
    public void Test1()
    {
        //存取A.a,不用实例化
        A.x= 56;
        Console.WriteLine(A.a);
    }
}

自身类文件中在其他类中定义的变量C,用类.变量名C具体应用举例

public class A
{
    public static long primarylength = 99;
    public void function(){
    primarylength += 20;
    }
}
 
// 在类B中使用类A中的变量
public class B
{
    public void Test1()
    {
       //这里面显示的结果是99+20 = 119,而不是99.
       System.out.println("A.primarylength");
    }

调用自身类文件中外层类中定义的变量C,直接用变量名C;调用其他类文件的变量C具体应用举例分别如下
在这里插入图片描述

参考:
https://www.cnblogs.com/McCa/p/4502718.html
https://blog.youkuaiyun.com/yezonghui/article/details/106890646

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

如果大家喜欢这篇文章的话,希望大家收藏、转发、关注、评论、点赞,转载请注明出自这里。 PS:本随笔属个人学习小结,文中内容有参考互联网上的相关文章。如果您博文的链接被我引用,我承诺不会参杂经济利益;如果有版权纠纷,请私信留言。其中如果发现文中有不正确的认知或遗漏的地方请评论告知,谢谢! 还是那句话:不是我喜欢copy,是站在巨人的肩膀上~~

<think>好的,用户想知道如何让两个Java共享一个。首先,我需要理解“共享”在这里的具体含义。通常来说,共享一个可能指的是多个能够访问同一个实例或共享某些数据。接下来,我需要考虑Java中实现这种共享的几种常见方法。 首先,静态成员。如果一个中的变量是静态的,那么所有实例都可以访问同一个变量。这样两个可以通过访问这个静态变量来共享数据。不过要注意线程安全问题,因为静态变量是全局的,可能被多个线程同时修改。 然后,依赖注入。通过构造函数或setter方法将共享的实例传递给需要它的。这样可以明确依赖关系,使代码更清晰,也便于测试。例如,两个都接收同一个SharedClass的实例作为参数,这样它们就共享了这个实例。 第三种方法是使用单例模式。单例确保一个只有一个实例,并提供全局访问点。这样两个都可以通过单例的getInstance方法获取同一个实例,从而实现共享。但单例模式可能引入全局状态,需要谨慎使用。 另外,组合模式也是一种可能。将共享作为成员变量包含在一个中,并通过方法暴露给需要的。不过这可能需要在多个中持有相同的实例引用。 接下来,我需要考虑用户可能的实际应用场景。比如,两个需要共享一个配置管理器或者数据库连接池,这时候单例或静态成员可能比较合适。如果是需要灵活替换共享实例的情况,依赖注入会更合适,比如使用Spring框架管理Bean。 还要注意用户可能对Java的面向对象概念不太熟悉,所以需要解释清楚每种方法的实现步骤,并提供代码示例。例如,静态成员需要将变量声明为static,依赖注入需要在构造函数中传递实例,单例模式需要私有构造函数和静态获取方法。 同时,用户提供的引用中提到方法重写和的组成,这可能与继承有关。但共享实例更多是组合或作用域的问题,而不是继承。不过可以提到,如果共享的是通过继承来扩展功能,可能涉及到父和子的关系,但这不是共享实例的主要方式。 最后,要确保回答覆盖了所有可能的方法,并比较它们的优缺点,帮助用户根据具体情况选择合适的方法。例如,静态成员简单但不够灵活,依赖注入提高了可测试性,单例模式控制实例数量但可能隐藏依赖关系。 总结起来,回答需要分点说明不同的实现方式,每种方式给出示例代码,并指出适用场景和注意事项,以帮助用户理解和应用。</think>在Java中实现两个共享一个,可以通过以下四种常用方式实现: ### 一、静态成员共享(直接访问) 通过`static`关键字声明共享的静态实例: ```java class SharedData { static String config = "default"; } class ClassA { void printConfig() { System.out.println(SharedData.config); // 直接访问静态成员 } } class ClassB { void modifyConfig() { SharedData.config = "modified"; // 修改共享数据 } } ``` *适用场景*:全局配置等需要高频访问的共享数据[^2] ### 二、依赖注入模式(推荐方式) 通过构造函数传递共享实例: ```java class Database { void connect() { /* 连接逻辑 */ } } class UserService { private final Database db; UserService(Database db) { // 构造函数注入 this.db = db; } } class OrderService { private final Database db; OrderService(Database db) { // 构造函数注入 this.db = db; } } ``` *优势*:提高代码可测试性,明确依赖关系[^1] ### 三、单例模式实现 使用私有构造器和静态方法控制实例化: ```java class Logger { private static Logger instance; private Logger() {} // 私有构造器 public static Logger getInstance() { if (instance == null) { instance = new Logger(); } return instance; } } class ClassA { void log() { Logger.getInstance().log("from A"); } } class ClassB { void log() { Logger.getInstance().log("from B"); } } ``` *注意*:需处理多线程安全问题(可使用双重检查锁) ### 四、组合模式实现 通过接口共享功能模块: ```java interface PaymentProcessor { void processPayment(); } class PayPalProcessor implements PaymentProcessor { @Override public void processPayment() { /* PayPal实现 */ } } class ShoppingCart { private PaymentProcessor processor; ShoppingCart(PaymentProcessor pp) { this.processor = pp; } } class CheckoutSystem { private PaymentProcessor processor; CheckoutSystem(PaymentProcessor pp) { this.processor = pp; } } ``` *特点*:支持多态,便于扩展 ### 最佳实践建议 1. 优先选择依赖注入模式,提升代码可维护性 2. 需要全局访问时使用单例模式 3. 静态成员适用于常量配置 4. 线程安全场景使用`AtomicReference`或`synchronized` 5. 使用Spring等框架时,可通过`@Autowired`自动注入Bean
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值