java 不new java对象调用静态方法另一个类的方法,而且不是static 的方法?

Java 中,为什么在静态方法中可以调用的方法、可以使用的成员变量必须是静态的? - 知乎36被浏览16754分享邀请回答202 条评论分享收藏感谢收起81 条评论分享收藏感谢收起更多1 个回答被折叠()与世界分享知识、经验和见解java中一个类中为什么不能调用另一个类的方法? ava中一个类中为什么不能调用另一_微博生活网
你目前正在浏览:& > &
java中一个类中为什么不能调用另一个类的方法?
java中一个类中为什么不能调用另一个类的方法?
&#47.eat()public class Animal {public void eat(){System.println(&&#47.吃&}}public class test { Animal a=new Animal();); a
name(这个调用时类Int,直接就new一个对象a.name(不建议) 2
你可以定义一个private的属性
调用时就直接I }
3 就定义个公有静态的变量 public
static String name,你创建了一个Int类,就要在Int这个类中实现getName()方法
public String getName() {
return name举个例子,里面有个属性name,然后就a,你想取得这个那么可以通过一下几种方法
1 将这个属性定义为public,但是要调用时还要调用这个类的变量的
Java中的一个类怎么调用另一个类中的方法? ……
  java类有两种方法一种是类方法就是用static修饰的,一种是实例方法,就是没有static修...java中一个类中为什么不能调用另一个类的方法? ……
举个例子,你创建了一个Int类,里面有个属性name,你想取得这个那么可以通过一下几种方法 1 将这...Java中可不可以在一个类中调用另一个类的静态共有方法 ……
Java中当然可以在一个类中调用另一个类的静态公有方法。 首先公有方法,其他类是可以访问的。 调用静...java中怎么在一个类中调用另一个类中的方法 ……
最简单的方法,就是先实例化该类,然后调用类中的方法,比如说,member mem = new mem...java如何调用另一个类里面的&非静态&方法里面的变量 ……
实例化需要调用的类,为这个类增加get*方法(); 例如 class Test(){ static ...Java中的一个类怎么调用另一个类中的方法 ……
第一步 导入包第二步就是实例化/应用 一般智能编译器都会帮忙实现第一部。java中可以在一个类的方法中调用另一个类的对象吗? 如果可以怎么调用呢?如果不可以,是不是得 ……
对象不可调用,只有方法和静态函数才能调用 倒是可以说“使用”对象。在方法中自然是可以“使用”对象的java中一个类怎么调用另一个类中的函数 ……
1、导入包:import md5.md5; 2、创建对象:md5 obj=new md5(); 3、...java中一个类想调用另一个类的变量,必须到方法里面吗,直接在类里面能不能调用? ……
举个例子,你创建了一个Int类,里面有个属性name,你想取得这个那么可以通过一下几种方法 1 将这...JAVA如何调用另一个文件中的类? ……
1、定义两个public类 1)TestA.java public class TestA{//定义...
你可能感兴趣的内容?Java中五种不同方法的创建对象
投稿:daisy
字体:[ ] 类型:转载 时间:
本文为大家详细介绍了在Java中5种不同创建对象的方法和实例代码,感兴趣的小伙伴们可以参考一下
作为Java开发者,我们每天都会创建大量的对象,但是,我们总是使用管理依赖系统(如Spring框架)来创建这些对象。其实还有其他方法可以创建对象,在接下来的文章中我会进行详细介绍。
1.使用new关键字
这是最常见的创建对象的方法,并且也非常简单。通过使用这种方法我们可以调用任何我们需要调用的构造函数。
Employee emp1 = new Employee();
// class org/programming/mitra/exercises/Employee
4: invokespecial #21
// Method org/programming/mitra/exercises/Employee."":()V
2.使用class类的newInstance方法
我们也可以使用class类的newInstance方法来创建对象。此newInstance方法调用无参构造函数以创建对象。
我们可以通过newInstance() 用以下方式创建对象:
Employee emp2 = (Employee) Class.forName("org.programming.mitra.exercises.Employee").newInstance();
Employee emp2 = Employee.class.newInstance();
51: invokevirtual
// Method java/lang/Class.newInstance:()Ljava/lang/O
3.使用构造函数类的 newInstance方法
与使用class类的newInstance方法相似,java.lang.reflect.Constructor类中有一个可以用来创建对象的newInstance()函数方法。通过使用这个newInstance方法我们也可以调用参数化构造函数和私有构造函数。
Constructor&Employee& constructor = Employee.class.getConstructor();
Employee emp3 = constructor.newInstance();
111: invokevirtual #80 // Method java/lang/reflect/Constructor.newInstance:([Ljava/lang/O)Ljava/lang/O
这些 newInstance() 方法被认为是创建对象的反射手段。实际上,内部类的newInstance()方法使用构造函数类的 newInstance() 方法。这就是为什么后者是首选并且使用不同的框架如Spring, Hibernate, Struts等。
4.使用clone方法
实际上无论何时我们调用clone方法,JAVA虚拟机都为我们创建了一个新的对象并且复制了之前对象的内容到这个新的对象中。使用 clone方法创建对象不会调用任何构造函数。
为了在对象中使用clone()方法,我们需要在其中实现可克隆类型并定义clone方法。
Employee emp4 = (Employee) emp3.clone();
162: invokevirtual #87 // Method org/programming/mitra/exercises/Employee.clone ()Ljava/lang/O
5.使用反序列化
无论何时我们对一个对象进行序列化和反序列化,JAVA虚拟机都会为我们创建一个单独的对象。在反序列化中,JAVA虚拟机不会使用任何构造函数来创建对象。
对一个对象进行序列化需要我们在类中实现可序列化的接口。
ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj"));
Employee emp5 = (Employee) in.readObject();
261: invokevirtual #118
// Method java/io/ObjectInputStream.readObject:()Ljava/lang/O
正如我们在以上的字节代码片段中所看到的,除第一种被转换为一个新的函数和一个 invokespecial 指令以外,其它4种方法都被调用并转换为invokevirtual。
让我们来看看准备创建对象的 Employee 类:
class Employee implements Cloneable, Serializable {
private static final long serialVersionUID = 1L;
public Employee() {
System.out.println("Employee Constructor Called...");
public String getName() {
public void setName(String name) {
this.name =
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
public boolean equals(Object obj) {
if (this == obj)
if (obj == null)
if (getClass() != obj.getClass())
Employee other = (Employee)
if (name == null) {
if (other.name != null)
} else if (!name.equals(other.name))
public String toString() {
return "Employee [name=" + name + "]";
public Object clone() {
Object obj =
obj = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
在下面的Java程序中我们用5种方式来创建 Employee对象。
public class ObjectCreation {
public static void main(String... args) throws Exception {
// By using new keyword
Employee emp1 = new Employee();
emp1.setName("Naresh");
System.out.println(emp1 + ", hashcode : " + emp1.hashCode());
// By using Class class's newInstance() method
Employee emp2 = (Employee) Class.forName("org.programming.mitra.exercises.Employee")
.newInstance();
// Or we can simply do this
// Employee emp2 = Employee.class.newInstance();
emp2.setName("Rishi");
System.out.println(emp2 + ", hashcode : " + emp2.hashCode());
// By using Constructor class's newInstance() method
Constructor&Employee& constructor = Employee.class.getConstructor();
Employee emp3 = constructor.newInstance();
emp3.setName("Yogesh");
System.out.println(emp3 + ", hashcode : " + emp3.hashCode());
// By using clone() method
Employee emp4 = (Employee) emp3.clone();
emp4.setName("Atul");
System.out.println(emp4 + ", hashcode : " + emp4.hashCode());
// By using Deserialization
// Serialization
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("data.obj"));
out.writeObject(emp4);
out.close();
//Deserialization
ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj"));
Employee emp5 = (Employee) in.readObject();
in.close();
emp5.setName("Akash");
System.out.println(emp5 + ", hashcode : " + emp5.hashCode());
此程序输出结果如下:
Employee Constructor Called...
Employee [name=Naresh], hashcode : -
Employee Constructor Called...
Employee [name=Rishi], hashcode :
Employee Constructor Called...
Employee [name=Yogesh], hashcode : -
Employee [name=Atul], hashcode : 2051657
Employee [name=Akash], hashcode :
以上内容是关于java创建对象的5种不同方法,希望给大家学习java时有所帮助。也谢谢大家对脚本之家的支持。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具}

我要回帖

更多关于 java 调用对象 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信