java静态调用非静态方法
1. java中如何在静态方法中实现对非静态方法的调用,请问各位有没有具体的例子。
public class A{
//类A中非静态方法
public void func(){ ...... }
//类A中静态方法(主函数)
public static void main(String[] args){
A a=new A();//需实例化A的对象后才可以调用A中非静态方法
a.func();
}
如上面这个简单的例子,静态方法对非静态方法发起调用时,需实例化包含非静态方法的类的对象。如果类A中静态方法需调用类B中非静态方法时,也需实例化B的对象。
原因解释:类中静态的方法或者属性,本质上来讲并不是该类的成员,在java虚拟机装在类的时候,这些静态的东西已经有了对象,它只是在这个类中"寄居",不需要通过类的构造器(构造函数)类实现实例化;而非静态的属性或者方法,在类的装载是并没有存在,需在执行了该类的构造函数后才可依赖该类的实例对象存在。所以在静态方法中调用非静态方法时,编译器会报错(Cannot make a static reference to the non-static method func() from the type A)。
不知这么说你懂了没,如果还有什么不懂可以继续问我。
2. java中带静态方法可不可以调用非静态方法
当然可以,最常见的main调用不就是静态方法调用非静态方法吗
static方法内部不能直接调用非静态方法,
可以在调用之前实例化非静态方法所在的类,再用类点方法来调用。
3. java中静态方法中不能调用非静态方法
静态static方法中不能调用非静态non-static方法是值得是不能直接调用non-static方法
public
class
Test01
{
public
static
void
main(String[]
args)
{
hello();
}
public
void
hello()
{
}
}
是指的这种
在静态的main方法中,直接调用了本类的非静态方法hello(),这种是不允许的
4. JAVA 里既然静态方法无法调用非静态方法,那主方法main 里面,为什么可以通过对像,来调用非静态方法的呢
非静态成员函数在执行前必须先构造并实例化该函数所在的类。
如果允许非静态的main,那么main函数所在的类必须先进行实例化,
那么就需要再写个函数去实例化main所在的类,再调用main,这个实例化代码又写在哪呢?如果它也是非静态的,岂不是又要写个函数去实例化它所在的类嘛?
因此,java语言就规定了main必须是静态的。
5. 关于java的无法从静态上下文中引用非静态 方法
由于tostring()方法是非静态的,故不能直接通过类名引用,上面的这句代码:
system.out.println(course.tostring());
改为
system.out.println(cs.tostring());
即可。
有问题欢迎提问,满意请采纳,谢谢!
6. java 静态方法里面可以调用非静态方法吗
//可以的!
publicclassStaticTest
{
publicstaticvoidmain(String[]args)
{
System.out.println(" 如何实现静态方法调用非静态方法有哪些 ");
//方式1:匿名调用!
newStaticTest().show();
//方式2:创建对象调用!
StaticTestst=newStaticTest();
st.show();
}
//非静态方法!
voidshow()
{
doublep=(double)2.0-(double)1.1;
System.out.println("测试调用:非静态方法show.....!"+p);
}
}
7. java静态方法能调用非静态方法么
当然可以。你可以参考示例。
public class A{
//类A中非静态方法
public void func(){ ...... }
//类A中静态方法(主函数)
public static void main(String[] args){
A a=new A();//需实例化A的对象后才可以调用A中非静态方法
a.func();
}
8. java 静态方法可以调用非静态方法吗
//必须可以!
publicclass非静态方法
{
publicstaticvoidmain(String[]args)
{
System.out.println(" ==========java静态方法可以调用非静态方法吗!========== ");
init();
}
//测试案例,静态方法!
privatestaticvoidinit()
{
//这里调用下面的,看控制台输出!
new非静态方法().show();
//很好调用,创建对象即可!
}
//测试2,非静态方法!
privatevoidshow()
{
System.out.println("show--是非静态方法!");
}
}
9. 在Java中,为什么静态区域的方法不能调用非静态区域的方法
理解起来很简单,因为两者的加载时机不同,静态区的先加载,非静态区的后加载。
具体说:
静态区的方法,在虚拟机加载类文件(.class)的时候,就加载了,而非静态区的方法,是直到有对象被new出来的时候才会加载。
也就是说,如果在非静态区的方法加载之前就调用了它,显然是无法调用到的。所以才会规定静态方法中不能调用非静态的。
10. java主方法如何调用非静态方法
java主方法调用非静态方法的步骤:
1、新建一个类,本例类名“NoStaticMethod”,声明一些成员变量,创建一个主方法main(),一个非静态方法Method_1()。
2、类的全部代码。
** * Created by Administrator on 2016/7/25.
*/
public class NOstaticMethod {
//satement new variable name: studentName
public static String studentName = "xxx";
//satetment new variable nmae: country
public static String country;
//satement new variable name: nation
private static String nation;
//satement new variable name: subject
public String subject = "物理";
//satement new variable name: school
private String school;
//create main method
public static void main(String[] args) {
//NOstaticMethod.Method_1(); 在静态方法main中是不能直接调用非静态方法Method_1的
//只能通过创建类的对象,再由对象去调用成员方法以及成员变量。
NOstaticMethod wangyan = new NOstaticMethod();
//call methol
wangyan.Method_1();
// String physics= subject;在静态方法中也是不能访问非静态成员变量的
//call not static variable
String physics = wangyan.subject;
System.out.println("在主方法main()中只能通过对象来调用非静态成员变量subject:" + physics);
}
//create new method name: Method_1()
public void Method_1() {
System.out.println("Method_1是一个公共的、非静态的方法");
System.out.println("在非静态方法Method_1中访问静态成员变量“学生姓名”(studentName):" + studentName);
System.out.println("在method_1中直接调用非静态成员变量subject:" + subject);
}
3、运行结果
Method_1是一个公共的、非静态的方法
在非静态方法Method_1中访问静态成员变量“学生姓名”(studentName)
在method_1中直接调用非静态成员变量subject(科目)
在主方法main()中只能通过对象来调用非静态成员变量subject
4、分析代码
public static void main(String[] args) {
//NOstaticMethod.Method_1(); 在静态方法main中是不能直接调用非静态方法Method_1的
//只能通过创建类的对象,再由对象去调用成员方法以及成员变量。
NOstaticMethod wangyan = new NOstaticMethod();
//call methol
wangyan.Method_1();
// String physics= subject; 在静态方法中也是不能访问非静态成员变量的
//call not static variable
String physics = wangyan.subject;
System.out.println("在主方法main()中只能通过对象来调用非静态成员变量subject:" + physics);
}