您现在的位置是:主页 > news > 在马来西亚做博彩网站合法吗/郴州seo快速排名

在马来西亚做博彩网站合法吗/郴州seo快速排名

admin2025/5/1 5:47:28news

简介在马来西亚做博彩网站合法吗,郴州seo快速排名,广告设计制作税率,松溪网站建设(我猜很多书籍可能有java引用的解读,这里纯粹胡扯,见谅)在看java的引用的设计思想前,先考虑这样一个问题,为什么非静态内部类不可以定义静态成员?其实内部类不是不可以定义静态内部成员最终发现…

在马来西亚做博彩网站合法吗,郴州seo快速排名,广告设计制作税率,松溪网站建设(我猜很多书籍可能有java引用的解读,这里纯粹胡扯,见谅)在看java的引用的设计思想前,先考虑这样一个问题,为什么非静态内部类不可以定义静态成员?其实内部类不是不可以定义静态内部成员最终发现…

(我猜很多书籍可能有java引用的解读,这里纯粹胡扯,见谅)


在看java的引用的设计思想前,先考虑这样一个问题,为什么非静态内部类不可以定义静态成员?

其实内部类不是不可以定义静态内部成员


最终发现,只有第一行成功的通过了编译器的检查。但是和他相似的一行

private static final User u = new User();

却发现,不行!

这是为什么?

因为String只有可能存放在两个地方

1.常量池

2.堆

如果在堆中,那就意味着和对象一起存放。如果在常量池中,那就有的说了。

final String s = "abc";

这种形式的,默认会从常量池中去找!找不到就创建一个并缓存。

可是不用final修饰,就不会。

由此可见,final可以使得基本数据类型从常量池中取寻找。

而String s = "abc"这种情况是跟随着对象一起分配在堆中的。

所以你测试的时候,会发现

final String s = "abc";

final String t = "a";

final String u = "bc";

t + u == s是成立的,但是如果你不加final修饰,就不成立,哪怕你其中一个加了final也没用。

但是你用new String的形式,就算你加了final修饰,依然是在堆中。


这样一分析就清楚了。但是为什么这样就允许有静态内部成员了呢?


看看这个情况,如果String分配在堆中,就不通过了。

所以症结所在就是对象所在的位置,和引用无关!

但是为什么在堆中不可以,在常量池中就可以呢?


这里就牵扯到了一个容器思想。(没有学过jvm,这里班门弄斧,猜测分析一下)

class book在这个类中是以非静态的形式存在的,所以说在外部类的对象new出来之前,class book这个容器都不存在。

也就是说,堆中对应给book的内存空间都没有分配,那个new String("s")你又想放到哪里去??

所以这是症结所在。

但是存放在常量池的就可以!因为这个对象是放在常量池里的,并不依附堆空间而存在!!

所以问题就解决了。


最后胡扯一下用容器的角度看待引用和对象。

我以前认为引用就是简单的指向某个对象。

现在产生了些奇怪的看法:引用是一个伪对象。

比如这样一个类

class Book {public int i = 1;public static final int j = 2;private int k = 3;
}

当你Book book = null的时候

Book book = null;
int j = book.j;

你会发现这样一个事情,这和我们平时直接类名.静态对象不太一样啊!

我们平时都是Book.j就好了的,这样还可以这样搞???

事实发现,打印日志后,得到了j的值。

所以不难猜测类名.静态对象是java的语法糖,这里还原了真正的做法。

到了这一步,其实可以看得出来,引用可以看做是伪对象

Book book = null的时候,他代表着book对象未进入生命周期前的状态

这个时候,这个book引用(假对象)的内部是这样的:

外部一个容器

i = null;

j = 2;

k = null;

而new Book()是这样的

外部一个容器

i = 1;

j = 2;

k = 3;

当Book book = new Book()时。内部引用就会进行一个赋值

这个时候book引用内部是这样的

i = 1;

j = 2;

k = null;

由于k是private,引用没有权利得到

以上是我认为的java的引用的设计思维,其实很可能不是这样,引用如我之前所想的一样,依然是指向一个对象,但是这个对象 只开放public对象给这个引用。我所提出的这个容器思想和内部引用赋值思想,纯粹胡扯,这里仅仅记录下个人的一些奇怪的想法。