java静态实例
⑴ java静态方法(方法前冠以static)和实例方法(未冠以static)的区别
静态方法(方法前冠以static)和实例方法(前面未冠以static)的区别
调用静态方法或说类方法时,可以使用类名做前缀,也可以使用某一个具体的对象名;通常使用类名。
非static的方法是属于某个对象的方法,而static的方法是属于整个类的,不被任何一个对象单独拥有;
由于static方法是属于整个类的,所以它不能操纵和处理属于某个对象的成员变量,而只能处理属于整个类的成员变量,也即,static方法只能处理static域或静态方法。实例方法可以访问实例域, 静态域或静态方法, 记住都行。
声明为static的方法有以下几条限制: 1.它们仅能调用其他的static方法。
2.它们只能访问static数据。
3.它们不能以任何方式引用this或super(关键 字super与继承有关,在下一章中描述)。
static method Have No this Reference
All instance methods have a hidden parameter—this
So,
Static method can’t access instance methods and fields; it can only
invoke other static class
members.It can access class members only.
instance can use static method.
Instance methods:
If a method is declared without the static modifier keyword,
that method is known as an instance method. Instance methods
are associated with objects – not classes.
It can access either instance or class members.
本章源码
class StaticExa {
static int a = 4;
static int b = 9;
static void call() {
System.out.println("a = " + a);//静态方法可以访问静态属性
}
}
public class Test {
static int c = 43;
public static void main(String args[]) {
/*刚运行到这一步时,debug观察,StaticExa.a的值就等于42,Test.c的值就等于43,
说明系统在我们的程序一开始时,就会给所有的类变量赋值。如果是对象参考, 就是null,
见photoshop的例子*/
。。。。。。。。。。。。。。。。详情网上找“马克-to-win”,参考他的网站或他的网络空间:java第2章的内容
⑵ java静态方法和实例方法的区别
静态方法是用来操作这个类型的,方法被该类的所有实例共享。
而实例方法用来操作单个实例,不被该类所有实例共享。
静态方法中不能调用实例方法,也不能访问实例变量。
实例方法可以调用静态方法,也能访问静态变量。
总之静态方法对应的是类型,即Class,类。但是实例方法对应的是实例,即object,对象。
⑶ Java静态方法和实例方法在内存的分布情况
像类、静态(static)变量还有代码块都存储在方法区里,栈中存储的是静态方法、实例方法和变量,堆中存储的是实例对象和实例变量。
⑷ java静态变量的与实例变量的区别
java类的成员变量有俩种:一种是被static关键字修饰的变量,叫类变量或者静态变量;另一种没有static修饰,为实例变量。
1、在语法定义上的区别:
静态变量前要加static关键字,而实例变量前则不加。
2、在程序运行时的区别:
实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
举例说明:
对于下面的程序,无论创建多少个实例对象,永远都只分配了一个staticVar变量,并且每创建一个实例对象,这个staticVar 就会加1;但是,每创建一个实例对象,就会分配一个instanceVar,即可能分配多个instanceVar,并且每个instanceVar的值都只自加了1次。
结果则为:
0
1
0
⑸ java中,静态字段和实例字段有什么区别
静态方法和实例方法的区别主要体现在两个方面:
在外部调用静态方法时回,可以使用"类名.方法名"的方式答,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。
静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。
具体来说:
一、实例字段要实例化才能使用,没有实例化不能使用。静态字段反之。如:
name字段的使用:
cla1 i = new cla1();
i.name = "张三";
sex字段的使用:
cla1.sex = "男";
二、普通字段要在实例化时候才分配内存空间,而静态字段在装载程序集的时候就分配内存空间了。
⑹ java中静态类能否实例化
静态类,一般使用在某个类的内容,简称静态内部类。
静态Static又有全局的意思,对于一般的public定义的外部类,没有必要static关键词,因为可以直接导入包得到该类的引用(只是在访问其非静态成员时需要实例化它);
而在一个类内部定义另一个类,如果该内部类不是静态的,需要实例化它,就得先有一个外部类的对象,
如:public class A{
public class B{}
}
实例化B:
A a = new A();
B b = a.new B();
如果B是静态的(全局的),即如下:
public class A{
public static class B{}
}
实例化B:
B b = A.new B();或者B b = new A.B();
⑺ Java静态实例变量
问题出在这里:
static public Test getInstance(){
a=new Test();
return a;
}
每次调用getInstance()都会创建一个新的对象,并且给a赋值,所以a引用的对象每次都是不同的,加上一个判断,那么只有第一次的时候才会新建对象,后面两次都是直接返回原来的对象了
if (a == null) a=new Test();
return a;
补充:
楼主,有一个重要的概念你没有弄清楚,虽然a2,b2,c2都是使用a赋值的,但并不表示a变了它们会跟着变。
a2=a=new Test();
b2=a=new Test();
c2=a=new Test();
你理解的是最后给c2赋值的时候,因为a变了,而a2和b2是“等于”a的,所以它们也会跟着变为最后一个Test对象。
虽然看着好像符合数学上的等号传递性,但是楼主,其实不是这样的。这也是程序和数学的差别所在。
第一句a2=a=new Test()的结果是a2指向new Test(),而不是指向a。
所以第二句的a改变时,a2并没有变。同理,第三句a改变时,a2和b2也没有改变,它们分别指向三个不同的对象。