Java中的静态内部类与非静态类
关于他们的区别,可能有的人想问:是不是静态类的类就是静止固定的,不能被修改调用的?还是系统内部的类?而非静态类是活跃的,可以被修改?被调用?非也!
正式归纳之前我想给大家讲一个比方。很多人看过武侠片,那些四海扬名的大虾有自己的亲儿子也或许有自己收的义子。那么静态类(static)就好像是大虾亲生的一样,调用其中的方法的时候直接(静态类名.函数名)就可以了,就好像别人看见静态类就知道他是大虾的亲儿子(大家就理解长得像就可以);而非静态类就不同了,为什么不同呢?非静态类就好像大虾的义子一样,江湖人或许并不知道大虾有这样一个义子,所以使用非静态类的方法时总要先new一个非静态类,告诉大家:嘿你们知道吗,我是义父是大虾。哈哈哈哈哈。。。。。。(好冷~~)
由于是借鉴大神的博客,那我就说说我还能记住的特点:
静态类: 非静态类:
a、拥有的属性: 是整个类共同所有 类的各个对象单独拥有
b、内存分配: 在内存上位置固定 为其中每个对象单独分配内存
c、分配顺序: 先分配 后分配
而我上面给大家的比方就是说静态类在调用其中的函数不需要将其实例化,直接调用就可以了,而非静态类在调用的时候则需要将其实例化再调用其中的函数(也就是new一个新的非静态类)
然后单独说一下静态类的特点吧:
1、如果在调用静态类的过程中修改了静态类变量的值或者静态类函数的内容则在静态类的整个作用域其改动都是有效的,也就是说整个工程文件中这个类的值都会跟着改变,不用一个个代码都跟着去改动
2、调用非常方便简单,直接调用,不用实例化
给出自己举的例子:
public class A {
public static class B{
public static int a(int m,int n){
return m+n;
}
}
public static void main(String[] agrs){
int test1,p=1,q=2;
test1=B.a(p, q);
System.out.print(test1);
}
}
public static class B{
public static int a(int m,int n){
return m+n;
}
}
public static void main(String[] agrs){
int test1,p=1,q=2;
test1=B.a(p, q);
System.out.print(test1);
}
}