我可以在不声明对象的情况下使用不同类中的声明对象吗?
我最近才开始学习java,遇到了一个问题。我通过类构造函数创建了一些对象,并且我想在不同的类中使用这些声明的对象。对象的内容通过变量设置。我可以在不声明对象的情况下使用不同类中的声明对象吗?
因此,一个简单的解决办法是通过做(就像一个例子)来设置变量为静态,然后调用他们在其他类
Originalclass.staticVariable
,并以此作为我的参数。
因此可以说我的原始类是Firstclass,我想要创建的对象叫做superObject,而我想要应用在我的对象中的变量叫做variableIneed。如果我要创造我在其他类对象,我会键入
Firstclass superObject = new Firstclass(Firstclass.variableIneed);
这个工作,但我想知道,这将有可能在原来的类来创建对象,然后在不同的使用类?这样做有什么好处吗?
对不起,如果这是一个重复的问题或它不够具体,这是我的第一篇文章。 :)
如果我的代码可以帮助回答我的问题,我会很乐意将其解决,但是由于我的代码很好,我觉得它与提问无关。
如果你在一个类中创建一个对象,你通常不希望“共享创建的对象”,只需将其设为static
(特别是当你不确定静态方式时)。
不要滥用static
。 static
成员实际上属于这个类本身,而不是一个特定的对象。所以在你开始声明变量为static
之前,你想考虑它是属于这个类的属性吗?或者它属于个人客体?
更多更多static
变量在所有对象之间共享。 (你只有它的一个副本)。因此,如果您将它与其他许多类分享,那么它的价值可能会从您“共享”它的类中的任何一个变为可能,从而使您的类紧密耦合(并且您希望防止这种类)。
除非对象属于该类,可能它是一个常量(声明为final
),否则您可能不想通过将其声明为static
来共享该对象。
这有效,但我想知道,是否有可能在原始类中创建对象,然后在不同的类中使用它?这样做有什么好处吗?
如果我是你,如果我需要与其他类“共享”我的对象,我会通过一个方法(一个getter方法)传递它。
〔实施例:
class Car{
private Engine engine;
//Constructor not shown
//a getter method
public getEngine(){
return engine;
}
}
class Runner{
public static void main(String[] args){
Car c = new Car();
Engine engine = car.getEngine(); //retrieve engine from car (for whatever use)
}
}
您正在使用与构造函数参数相同的类的静态变量创建Firstclass,这对我没有任何意义。您可以在Firstclass类中使用该变量而不将其作为参数,它已经可以访问它。对于你的主要问题,我认为你想要的是这样的:
class Firstclass{
private String someString = "";
public void createString(String myString){
someString = myString;
}
public String getSomeString(){
return someString;
}
}
class Original{
public void sometMethod(Firstclass first){
//using someString from 'first'
System.out.println(first.getSomeString());
}
}
我喜欢这个问题,因为它问“有没有更好的方法来做到这一点?
这听起来像你有一种情况,你有一些价值,让我们假设一个整数,将用于几个对象。 “我应该复制这个值,还是应该使用相同的值?”是一个重要的问题。
让我们假设字符串是多个地方使用的东西,并且不会在应用程序的生命周期中发生变化,但您希望灵活地在一个地方更改字符串的内容。例如,如果您正在构建游戏,则允许用户使用的人数可能是整个应用程序中使用的整数。一个好的模式是constant。例如:
public interface ApplicationConstants {
public static Integer PLAYER_LIVES_COUNT = 3;
}
然后需要的常量可以简单地实现常量接口的任何类:
public class Application implements ApplicationConstants {
public static void main(String[] args) {
FirstClass firstClass = new FirstClass(PLAYER_LIVES_COUNT);
FirstClass superObject = new FirstClass(PLAYER_LIVES_COUNT);
}
}
这比硬编码数字3在你的应用程序,因为你有一个地方,一个更好的模式控制这个数字。没有“查找和替换”。
如果FirstClass对象本身是一个将在应用程序中使用的对象,该怎么办?它有多个属性,其他类需要在应用程序中访问。在这种情况下,一个好的模式是singleton pattern。
公共final类FirstClassFactory {
private static FirstClass instance = null;
private FirstClassFactroy() {
}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new FirstClass();
}
return instance;
}
}
然后在你的应用程序,你可以在运行时更改您的Firstclass实例的值,和值将用于正在使用的任何对象更改的Firstclass:
public class Application {
public static void main(String[] args) {
FirstClass firstClass = FirstClassFactory.getInstance();
firstClass.setPlayerLives(3);
}
}
如果您的应用程序的另一个类调用FirstClassFactory.getInstance()
,就会收到alread实例y将playerLives设置为3.
最后,假设您有一个用例,需要向FirstClass对象添加更多数据和功能。一个好的模式可能是扩展或wrapper or decorator pattern。例如:
public class LivesManager {
private FirstClass firstClass;
private String statusMessage = "Number of lives remaining: ";
public LivesManager(FirstClass firstClass) {
this.firstClass = firstClass;
}
public void decrementRemainingLives() {
--firstClass.getLives();
}
public String getLivesMessage() {
return statusMessage + firstClass.getLives();
}
}
最后要注意的:如在评论中提到的,这是很好的做法,使类变量私有和使用getter和setter方法来访问的变量。例如:
public class FirstClass {
private Integer lives;
public FirstClass(Integer lives) {
this.lives = lives;
}
public Integer getLives() {
return lives;
}
public void setLives(Integer lives) {
this.lives = lives;
}
}
希望这会有所帮助,祝你好运!
“这个工作,但我想知道,这将有可能在原来的类来创建对象,然后在不同的类中使用它是否有一个有利于做到这一点?“
是的,这是可能的。我将说明它的一个简单的例子:
A类:
具有在其内定义一个随机对象(随机兰特=新的随机())。 而且通常getter方法称为getRandomizer();
public Random getRandomizer(){
return rand;
}
B类:
B类可以实例化类A.
A _object = new A();
随机对象是在类A创建的,但是之后在B类,我们有 实例化类甲现在可以访问一般的公共方法。
现在,我们可以简单地通过访问随机对象:
_object.getRandomizer();
(_object就是我定义一个变量名)。
看到代码不会有什么伤害。 –
曾听说过吸气剂? – Stultuske