- 浏览: 1309339 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (732)
- Java_about (146)
- Spring_Hibernate_Struts_OpenSource (27)
- linux_unix (62)
- life_sth (22)
- js_css_html_xml_nodejs (69)
- design_pattens (1)
- Perl (8)
- php_ecshop (4)
- DB_Mysql_Oracle_Informix_SqlServer (43)
- JSTL (8)
- Testing_自动化测试 (42)
- DB_ID_UUID (4)
- SEM_SEO (1)
- english_study_improvement (4)
- SVN_Git (9)
- WebService_SOA_CloudComputing (3)
- E-Commerce (1)
- Lucene_Solr (7)
- others (2)
- Regex (2)
- tomcat_jetty (8)
- zeroc-ice (1)
- java_excel (5)
- ant_maven_gradle (5)
- Unity_VR_AR_C# (2)
- jmeter (1)
- XPath_dom4j (1)
- Ruby_and_Rails (68)
- write_a_rails (17)
- manage_and_team (1)
- getting_real (1)
- ubuntu (20)
- git_and_git_flow (7)
- TODO (1)
- PM_design (2)
- Python_and_Django (8)
- NoSql_mongo_redis (24)
- C/C++ (3)
- vi_vim_gvim (0)
- c#_.Net_windows编程_dll (10)
- Php_and_Yii (9)
- Android_IOS (31)
- Mysql (5)
- sa_运维_network_硬件 (37)
- lua (2)
- c_cpp_VisualStudio (21)
- 硬件-RM-Arduino (6)
最新评论
-
shenkun58:
...
NoClassDefFoundError: Could not initialize springframework.BeanCreationException -
liaojia1:
正解,感谢
NoClassDefFoundError: Could not initialize springframework.BeanCreationException -
flingfox63:
谢谢分享,电脑上有IPV6,导致了Guard启动不了……
ruby错误解决: Address family not supported by protocol - connect(2) -
c39274936:
s = "hello_world_ruby" ...
驼峰格式和下划线格式转换_translation between camel and snake format -
yfj300:
学习了学习了学习了学习了
硬盘基本知识(磁道、扇区、柱面、磁头数、簇、MBR、DBR)
如果有两个方法,互相调用,那么何时了呢?
这个问题早在1、2年前就发现过了,可以用 来解决,但是这种先有鸡还是先有蛋的问题还是又碰见了~
/**
* 下面有问题吗?请仔细看看
* 如果告诉你是考试类的加载机制的,你能看出问题来吗?
* 看不出来就看看答案吧~
*/
public class SimpleTest {
public void f(){
B b = new B();
}
public static void main(String[] args) {
SimpleTest obj = new SimpleTest();
obj.f();
}
}
class A{
static{
System.out.println("class A loaded!");
}
public A(){
System.out.println("A init!");
}
B b = null;
}
class B{
static{
System.out.println("class B loaded!");
}
public B(){
System.out.println("B init!");
}
A a = null;
}
/*
* 答案是:没有问题。
* 运行输出是:
class B loaded!
B init!
* class A并没有被加载,虽然类B中看见了A,但是类A并没有被用到,既没有用到new
* 也没有碰到使用类A的静态成员,因此类A没有被加载!
*/
/**
* 再往下看吧~
* 看不出来就看看答案吧~
*/
public class SimpleTest {
public void f(){
B b = new B();
}
public static void main(String[] args) {
SimpleTest obj = new SimpleTest();
obj.f();
}
}
class A{
static{
System.out.println("class A loaded!");
}
public A(){
System.out.println("A init!");
}
B b = null;
}
class B extends A
{
static{
System.out.println("class B loaded!");
}
public B(){
System.out.println("B init!");
}
A a = null;
}
/*
* 答案是:没有问题。
* 运行输出是:
class A loaded!
class B loaded!
A init!
B init!
* new B时,先加载父类static成员,之后加载子类static成员,
* 接着父类A的实例成员b初始化null(此时因为只是看到了B并没有用,因此不加载类B)
* 最后初始化B
*/
/** 继续吧~ */
class A{
static{
System.out.println("class A loaded!");
}
public A(){
System.out.println("A init!");
}
B b = new B()
;
}
class B extends A
{
static{
System.out.println("class B loaded!");
}
public B(){
System.out.println("B init!");
}
A a = null;
}
/*
* 答案是:有问题!!
* 运行输出是:
class A loaded!
class B loaded!
Exception in thread "main" java.lang.StackOverflowError
at com.june.study.class_compile_resircle.A.<init>(SimpleTest.java:53)
...
* new B时,先加载父类static成员,之后加载子类static成员,
* 接着父类A的实例成员b初始化new B()(此时因为不只是看到了B还要用,因此必须加载类B)
* 但是加载类B的前提是类A的成员b必须正确初始化后才行,这就导致了不停的循环:有B需先有A,有A需先有B
* ,最后java的stack检测到运行期异常了!这里编译确实没有问题的!!
*/
这是运行期异常,但编译期没有异常哦!!
再看看这个吧~
package study_sun.reflect.Reflection;
public class A {
B b = null;
public void link(B b){
this.b = b;
b.link(this);
}
}
package study_sun.reflect.Reflection;
public class B {
A a = null;
public void link(A a){
this.a = a;
a.link(this);
}
public static void main(String[] args){
A a = new A();
B b = new B();
a.link(b);
}
}
/* 结果:Exception in thread "main" java.lang.StackOverflowError
*/
如果换成这样呢!
class A {
B b = null;
public void link(B b){
this.b = b;
// b.link(this);
if(Reflection.getCallerClass(2) != B.class)b.link(this);
}
}
class B {
A a = null;
public void link(A a){
this.a = a;
//a.link(this);
if(Reflection.getCallerClass(2)
!= A.class) a.link(this);
}
}
// okay~
发表评论
-
如何在IDEA单元测试中使用Scanner获取输入内容
2024-10-25 21:19 38如何在IDEA单元测试中使用Scanner获取输入内容 = ... -
java播放音频声音mp3等
2024-05-22 15:16 413java播放音频声音mp3等 = = = 这个方法 ... -
打包Java程序为.exe文件
2023-09-27 16:25 374= = = 打包Java程序为.exe文件 fro ... -
Java怎么生成exe可执行文件【图文讲解】
2023-09-27 16:21 380= 开发的工具,让客户体验一下再说。此时又不想发源码,怕 ... -
Java8 List集合Stream流方法操作详解
2023-09-27 16:02 145= = = from: https://zhuanl ... -
Java8 List集合Stream流方法操作详解
2023-09-27 15:59 548= = = from: https://zhuan ... -
Java8 List集合Stream流方法操作详解
2023-09-27 15:56 99= = = from: https://zhuanl ... -
【原创】Cannot create property=xxx for JavaBean=【lombok 和 yaml包 混合报错】
2023-02-04 23:31 987= = = 问题: 同时使用lombok 和 ... -
【摘】Java文档注释用法+JavaDoc的使用详解
2022-09-12 16:32 446= = 节约重复注释 使用@inheritDo ... -
【朝花夕拾】java内部类,原理,使用
2022-08-09 22:52 377= 碰到类似问题,多读《thinking in java ... -
【拾遗】java数组copy拷贝复制的工具类方法
2022-06-11 21:20 620= 对工具类来说,copyOfRange 最好用。 这 ... -
利用Httpclient下载图片,java不用httpClient下载图片
2022-05-30 22:25 463= = = from:https://blog.csd ... -
为什么要使用lombok?
2022-04-04 20:46 399= = = 参考:https://blog.csd ... -
朝花夕拾:java-向上转型中变量覆盖要小心使用_继承过程中Java子类父类属性的覆盖问题
2022-01-13 17:31 414==== 现在的代码结构设计的复杂起来了,为了后来人编写 ... -
【Mysql数据库】Cause: java.sql.SQLException: The table 'xxx' is full
2022-01-04 17:03 1506= 本地开发测试,怎 ... -
JAVA工具类学习-java 两个list 交集 并集 差集 去重复并集
2021-09-10 16:17 870= = = List<String> ... -
java汉字判断,中文符号判断,中文标点符号判断
2021-09-02 19:07 1188=== = = 一、判断中文汉字 st ... -
velocity的模板笔记总结文档-方便查阅
2020-04-28 14:41 384= 最好把这几个官网文档看了: 官网官方文档refer ... -
mjson:像python和ruby一样好用的java类库操作json_js
2020-04-17 20:54 526= = = JSON Library for Jav ... -
关于idea2019.2-2019.3版本中文控制台乱码问题,tomcat7-tomcat8乱码
2020-04-04 23:20 478= 1 idea2019.2-2019.3版本中文控制台乱 ...
相关推荐
在描述中提到的工具,是一个小巧而实用的Java Class反编译器,用户只需运行`.exe`可执行文件,然后选择要反编译的`.class`文件,即可在指定目录下生成对应的`.java`文件。 Java字节码是Java源代码经过编译后的中间...
Java Class文件是Java程序编译后的二进制格式,它包含了类和接口的定义、方法体、常量池等信息,但这些信息是以机器可读的字节码形式存在,对于人类来说不易理解。为了查看和理解Class文件内部的源代码,我们就需要...
Java类反编译后的代码还原是指将编译后的Java类文件(.class)转换回Java源代码的过程。在这个过程中,可能会出现一些不正常的代码,例如label0 :_L1 MISSING_BLOCK_LABEL_30、JVM INSTR ret 7、JVM INSTR ...
Java反编译是一种技术,它允许开发者从已编译的.class文件中恢复原始的.java源代码。这在一些情况下非常有用,例如分析第三方库的内部实现、研究代码逻辑或者在丢失源代码时恢复源码。Java编译器将源代码转换成字节...
Java的反编译工具通常能够处理.class(单个类文件)和.jar(包含多个类文件的打包文件)格式,生成接近原始Java源代码的文本。 在Java领域,有许多知名的反编译工具,例如JD-GUI、Procyon、FernFlower等,这些工具...
在IT行业中,有时候我们需要对已编译的.class文件进行反编译,以便查看或理解其原始的源代码,这通常是由于失去了源代码或者需要研究已有的二进制代码。在这个场景下,Xjad是一个非常实用的工具,专门用于将.class...
Java反编译工具是开发者在特定情况下非常有用的工具,它们能够将已编译的Java字节码(.class文件)转换回源代码形式,帮助我们理解或修复已有的Java程序,尤其是在没有源代码的情况下。标题提到的“java 反编译工具...
JAVA反编译工具JAD是Java开发者和逆向工程爱好者常用的一款工具,它能够将已编译的Java字节码(.class文件)转换回源代码格式,使得开发者可以查看和理解原本被编译隐藏的代码逻辑。在软件开发、调试、学习开源库...
了解和掌握Java反编译工具,对于Java开发者来说是一项重要的技能,它能帮助我们更好地理解和利用已存在的Java资源,提升开发效率和问题解决能力。在使用这些工具时,应遵循相关法律法规,并尊重他人的知识产权。
### Java批量编译技术解析与应用 在软件开发过程中,特别是在大型项目中,代码的管理...无论是通过编写Java代码、使用构建工具还是自定义脚本,掌握批量编译的技术和方法对于每一个Java开发者来说都是不可或缺的技能。
Java的编译过程将源代码(.java文件)转换为字节码(.class文件),这个字节码是平台无关的,并能在任何支持Java的JVM(Java虚拟机)上运行。然而,字节码并不直接对应于源代码,因此,如果没有源代码,理解和修改...
Java反编译工具,如XJad,是程序员在研究和学习Java代码或者逆向工程时的重要工具。它们能够将已编译的.class文件转换回源代码格式,这对于理解闭源软件的工作原理、修复错误或者查找病毒代码等活动非常有用。在Java...
Java反编译工具是开发者和逆向工程人员用于查看Java字节码的工具,它们能够将编译后的`.class`文件转换回可读的源代码形式。这些工具对于理解已有的库函数、学习代码实现或者在没有源码的情况下调试Java程序非常有用...
Java Class文件是Java虚拟机(JVM)运行的二进制代码形式,它们是通过Java编译器将源代码编译后的产物。这些文件包含了方法、变量、常量池等元数据,但不包含原始的注释和源代码结构。因此,当需要查看类文件的具体...
Java反编译工具是开发人员在理解和学习Java代码或者对已有的Java类库进行逆向工程时常用的工具。这些工具可以将已经编译过的.class文件转换回可读性较高的源代码形式,虽然不能完全恢复原始的.java文件,但能够帮助...
Java反编译是Java开发中一个重要的辅助工具,主要用于查看和理解Java字节码(.class文件)的内容。由于Java的源代码(.java文件)在编译后会被转化为字节码,这些字节码是机器不可读的,因此,当我们需要查看或分析...
#### 一、Java 程序的编辑、编译和运行环境 ##### 实验目的概述 本次实验旨在帮助学习者掌握Java程序的基本开发流程,包括但不限于环境配置、基本语法理解以及简单程序的设计与实现。通过实践操作加深对Java语言的...