V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  amiwrong123  ›  全部回复第 30 页 / 共 35 页
回复总数  697
1 ... 22  23  24  25  26  27  28  29  30  31 ... 35  
2019-10-23 11:14:29 +08:00
回复了 bbman 创建的主题 程序员 想屯波书,大家有什么推荐的吗?
java 编程思想,我已经读了两个月了…才一半
2019-10-21 15:53:00 +08:00
回复了 amiwrong123 创建的主题 程序员 Java new 关键字调用默认构造器,在反编译后就看不懂了
@jyounn
也许我应该,把书中的代码弄下来,自己编译出 class 再自己看看。。。
2019-10-21 15:51:32 +08:00
回复了 amiwrong123 创建的主题 程序员 Java new 关键字调用默认构造器,在反编译后就看不懂了
@jyounn
emmm, 源文件就是《 java 编程思想》——17.2.3 小节.使用 abstract 类里面的 Countries 类啊。

源文件确实不是这样的,好多代码顺序都变了。还有就是,有的语句声明和初始化本来是在一句里面,反编译后声明语句和初始化语句也分开了。 但这些变化都没有本质区别。

除了我在帖子里的那个疑问==
2019-10-21 13:04:47 +08:00
回复了 amiwrong123 创建的主题 程序员 Java new 关键字调用默认构造器,在反编译后就看不懂了
是我提问姿势不对吗,怎么还没有大佬现身。。。你们要是不信,可以自己把 net.mindview.util 的 jar 包加入工程看看,找到 Countries 这个 class,再对比原书代码。

下载地址: https://www.cnblogs.com/togeek/p/thiking_in_java_net_mindview_util_package.html
2019-10-13 20:14:30 +08:00
回复了 ZredoC 创建的主题 Java [不懂就问]局部内部类怎么访问其外部方法的同名变量?
不好意思,我看错了。我觉得好像没法访问吧。。应该外部类方法的 n 只是一个局部变量。而内部类只是说可以直接调用到外部类对象的成员,一个局部变量也不是个外部类的成员啊
2019-10-13 20:06:43 +08:00
回复了 ZredoC 创建的主题 Java [不懂就问]局部内部类怎么访问其外部方法的同名变量?
提问前记得百度,网上博客一大堆
2019-10-13 20:04:48 +08:00
回复了 ZredoC 创建的主题 Java [不懂就问]局部内部类怎么访问其外部方法的同名变量?
2019-10-13 16:32:54 +08:00
回复了 amiwrong123 创建的主题 Java [不懂就问] Java .lang.Enum 源码的两个疑问
@xuanyu66
这本书挺好的,之前和它比还纠结 java 核心技术先看哪本,还是选了它。其实更重要的是,选了一本就好好看==
2019-10-13 16:11:13 +08:00
回复了 amiwrong123 创建的主题 Java [不懂就问] Java .lang.Enum 源码的两个疑问
@xuanyu66
是呀,正在学呢。主要是看 java 编程思想这本书,不过看得仔细就读得慢了。关注你一波,以后好再 @你,哈哈哈。
2019-10-13 15:36:03 +08:00
回复了 amiwrong123 创建的主题 Java [不懂就问] Java .lang.Enum 源码的两个疑问
@xuanyu66 #20
你这个例子我懂啦,其实你只是想强调 内部类有没有外部类对象的引用,这个意思嘛。
而 MyEnum$1 是没有持有的。

@xuanyu66 #21
这个我说一下吧,匿名内部类要分情况的:
你 20 楼的说这个例子,就是 new Thread(){},因为它处于 non-static cnotext 这样的上下文里( countDown 是个成员方法嘛,所以就是非静态的上下文),所以这时匿名内部类持有了外部类的引用。

然后你最开始给我说的例子:
public enum MyEnum {
```
A {
void doSomething() { }
},


B {
void doSomethingElse() { }
};
```
其实我认为它在实现上相当于:
```
public static final MyEnum A = new MyEnum{
void doSomething() { }
}
```
但偏偏这个匿名内部类赋值给了一个静态变量,那么它便是 static cnotext 的了。所以此时,匿名内部类不能持有外部类的引用。
2019-10-13 15:00:34 +08:00
回复了 amiwrong123 创建的主题 Java [不懂就问] Java .lang.Enum 源码的两个疑问
@xuanyu66
就是我以为 MyEnum$1 是作为 MyEnum 的匿名内部类存在的(因为它的名字长得就像)

你却说 MyEnum$1 是作为 MyEnum 的静态内部类存在的
2019-10-13 14:48:26 +08:00
回复了 amiwrong123 创建的主题 Java [不懂就问] Java .lang.Enum 源码的两个疑问
@xuanyu66
懂啦,给新类新加了个静态方法,里面再去调用了父类的静态方法。
2019-10-13 14:46:58 +08:00
回复了 amiwrong123 创建的主题 Java [不懂就问] Java .lang.Enum 源码的两个疑问
@xuanyu66
谢谢回答啦,那我理解成匿名内部类(还是静态内部类)是不是理解错了=-=

虽说,static context 下的匿名内部类和静态内部类是一样的。
2019-10-13 12:00:49 +08:00
回复了 amiwrong123 创建的主题 Java [不懂就问] Java .lang.Enum 源码的两个疑问
有大佬能解释一下第一个疑问吗,反正就是解释成:编译器帮我加了这两个方便的方法呗?
2019-10-13 11:50:34 +08:00
回复了 amiwrong123 创建的主题 Java [不懂就问] Java .lang.Enum 源码的两个疑问
@wleexi
视频教程呗,哎,想看的资源都太多,都眼花缭乱了。现在只看 java 编程思想,今年能搞完这本就不错了。
2019-10-13 11:48:33 +08:00
回复了 amiwrong123 创建的主题 Java [不懂就问] Java .lang.Enum 源码的两个疑问
@xuanyu66
可能是因为 MyEnum$1 是匿名内部类,所以我没法看到 MyEnum$1 的类定义吧
2019-10-13 11:27:14 +08:00
回复了 amiwrong123 创建的主题 Java [不懂就问] Java .lang.Enum 源码的两个疑问
@xuanyu66
大概懂了,只是有点气,不管怎么看,都看不到内部类 A 继承了 MyEnum,这是 javap -c 后看见的:
```asm
static {};
Code:
0: new #16 // class MyEnum$1
3: dup
4: ldc #17 // String A
6: iconst_0
7: invokespecial #18 // Method MyEnum$1."<init>":(Ljava/lang/String;I)V
10: putstatic #9 // Field A:LMyEnum;
13: new #19 // class MyEnum$2
16: dup
17: ldc #20 // String B
19: iconst_1
20: invokespecial #21 // Method MyEnum$2."<init>":(Ljava/lang/String;I)V
23: putstatic #22 // Field B:LMyEnum;
```
只能勉强看到静态代码块里面,分别初始化了 MyEnum$1 和 MyEnum$2 给自己的静态变量。但就是看不到内部类 A 继承了 MyEnum==
2019-10-13 11:11:19 +08:00
回复了 amiwrong123 创建的主题 Java [不懂就问] Java .lang.Enum 源码的两个疑问
@xuanyu66
这位大哥,我好像懂你意思, 你第二个例子,运行结果居然是:
class MyEnum
class MyEnum$1
class MyEnum
class MyEnum$SS
class java.lang.Object

合着第二个例子里面的 A 和 B 都是内部类了呗,所以 MyEnum.A.getClass()打印出来是 class MyEnum$1 内部类的样子。

而 MyEnum.A.getDeclaringClass()这里我好像还有点懵,我再看下哈==
2019-10-13 10:33:41 +08:00
回复了 amiwrong123 创建的主题 Java [不懂就问] Java .lang.Enum 源码的两个疑问
@tigerfyj
静态方法可以继承这么说可能有点不恰当,毕竟它是类相关的,而且可以被隐藏。

enum 就算实现了别的新的接口,`Class<?> zuper = clazz.getSuperclass();`getSuperclass 应该也是返回直接继承的类 Enum 啊,而不可能是接口吧==
1 ... 22  23  24  25  26  27  28  29  30  31 ... 35  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2115 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 23ms · UTC 11:34 · PVG 19:34 · LAX 04:34 · JFK 07:34
Developed with CodeLauncher
♥ Do have faith in what you're doing.