精华内容
下载资源
问答
  • 编译java文件的时候会发现一个java文件可以生成的多个class文件,而且有的还含有“$”符号,这个符号代表的是内部类,举个例子: public class ClassA { private class ClassB { private void show() { ...

    编译java文件的时候会发现一个java文件可以生成的多个class文件,而且有的还含有“$”符号,这个符号代表的是内部类,举个例子:

    public class ClassA {
    	
    	private class ClassB {
    		private void show() {
    			System.out.println("哈哈哈");
    		} 
    	}
    	
    	private void display() {
    		new ClassB().show();
    	}
    	
    }
    

    编译ClassA.java
    生成了三个class文件
    在这里插入图片描述

    对应关系见下图
    在这里插入图片描述

    最后总结:
    1、编译后产生的.class文件个数:有多少个类,产生多少个.class文件
    2、.class文件命名规则:
    2.1普通内部类
    外部类名 + $ + 内部类名 [+ $ + 内部类名 + …]+ .class,类名之间使用符号ClassD隔开 例如:ClassDClassDd$ClassDdd.class,这里ClassDdd是对底层的普通内部类,它的父类ClassDd,而ClassDd的父类也是最外层的外部类ClassD
    2.2匿名内部类
    外部类名 + $ + 数字 [+ $ + 数字 + …]+ .class,类名之间使用符号$隔开,数字根据在外部类中定义的顺序决定
    例如:ClassE$1$1.class
    3、同一个.java文件中定义的其他非public声明的类,都遵循以上2点规范
    4、继承、或者接口实现,不影响编译产生的.class文件个数和命名规则

    展开全文
  • java文件编译生成class文件其基本规则是这样的:  内部类的class文件命名是:主类+$+内部类名  匿名类的class文件命名是:主类+$+(1,2,3....) 但是如果没有使用匿名类,会生成带$1.class文件么~~答案是会的...

    java文件编译生成class文件其基本规则是这样的:

            内部类的class文件命名是:主类+$+内部类名

            匿名类的class文件命名是:主类+$+(1,2,3....)

    但是如果没有使用匿名类,会生成带$1.class文件么~~答案是会的

    public class TestJavac { void Test() { innerClass lklk = new innerClass(); lklk.biubiu(); } private class innerClass { private innerClass() { // TODO 自动生成的构造函数存根 } void biubiu() { System.out.println("XXXX"); } } }

    TestJavac.class

    TestJavac$innerClass.class

    这两个你肯定知道,但是还会生成一个TestJavac$1.class

    这玩意儿是怎么来的?

    将其反编译内容为~~空的

    class TestJavac$1 { }

    展开全文
  • public Class<?> createClassObj(String className){ StringBuffer sb = new StringBuffer(); sb.append("package com.innovate.middleware.face.neo4j.entity;\r\n"); sb.append("import org....

    在eclipse下运行成功,tomcat下运行时找不到指定的类解决思路

    	public  Class<?> createClassObj(String className){	
    		
    		StringBuffer sb = new StringBuffer();
    		
    		sb.append("package com.innovate.middleware.face.neo4j.entity;\r\n");  
    		sb.append("import org.neo4j.ogm.annotation.RelationshipEntity;\r\n"); 
    		sb.append("@RelationshipEntity(type=\""+className+"\")\r\n"); 
    		sb.append("public class "+className+" extends BaseRelationship{}"); 
             
             try {  
                 //写入java文件
                 String path = BaseRelationship.class.getResource("").getPath();
                 String outputPath = path + className + ".java";   
                 FileWriter fw = new FileWriter(outputPath);  
                 PrintWriter pw = new PrintWriter(fw);  
                 pw.println(sb.toString());  
                 pw.flush();  
                 pw.close();
                //编译
                 Class<?> classObj = compilerJavaFile(className,outputPath);
     			return classObj;
       
             } catch (Exception e) {  
                 e.printStackTrace();  
             }  finally{  
    
             }
    		return BaseRelationship.class;  
               
         } 
    	private Class<?> compilerJavaFile(String className,String outputPath) throws Exception{
            //编译成class文件
    		JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    		StandardJavaFileManager sjfm = compiler.getStandardFileManager(null, null, null);
    		Iterable<? extends JavaFileObject> iter = sjfm.getJavaFileObjects(outputPath);
    		
    	    String classesPh = Thread.currentThread().getContextClassLoader().getResource("").getPath();
    
    	    
    	    String classPath1 = classesPh.replace("classes/", "lib/neo4j-ogm-api-2.1.1.jar");
    	    
            //指定编译时依赖的jar包 和class文件所在目录
    	    String classPath = classesPh+";"+ classPath1;
    
    		List<String> optionList = new ArrayList<String>(Arrays.asList("-classpath",classPath));
    		CompilationTask ct = compiler.getTask(null, sjfm, null, optionList, null, iter);
    		ct.call();
    		sjfm.close();
    		
    		 Class<?> clz = Class.forName("com.innovate.middleware.face.neo4j.entity."+className);
    		 return clz;
    	}

    注意 ! ! ! ! !

    javac classpath参数表示在指定路径下面寻找所依赖的类。 而寻找类的时候 是根据  包名+类名 进行寻找( com.xxx.类名);

    上面代码中 动态创建的子类依赖于同一个路径下的父类, 但是在查找的时候会在当前路径上加上父类的包名,而实际上他们是在同一目录下,所以找不到啦     那么指定classpath的时候就应该指定com之前的路径

    展开全文
  • Java生成class编译工具。这个真的很好用
  • Java编译生成带$符号的class

    千次阅读 2016-04-14 14:10:24
    Java编译生成带$符号的class

    java编译器会将每一个类编译成一个class文件,那问题来了,内部类和匿名类怎么办,答案就是"$"标识。

    package red.sea.daelly.pojo;
    
    import red.sea.daelly.inf.TestInterface;
    
    /**
     * @author liqingyang
     * @date 2016-4-14 下午1:24:50
     */
    public class Outer {
    	public Outer(){
    		AnotherOuter anotherOuter = new AnotherOuter();
    		System.out.println(anotherOuter);
    		Inner inner  = new Inner();
    		System.out.println(inner);
    		doSth(new TestInterface() {
    			
    			@Override
    			public void hello() {
    				System.out.println("I am in Outer's Construtor");
    			}
    		});
    	}
    	
    	public void doSth(TestInterface inf){
    		inf.hello();
    		System.out.println(inf);
    	}
    
    	public static class Inner {
    		
    	}
    	
    	public static void main(String[] args){
    		Outer outer = new Outer();
    		System.out.println(outer);
    	}
    }
    
    class AnotherOuter{
    	
    }
    得到输出

    red.sea.daelly.pojo.AnotherOuter@1690726
    red.sea.daelly.pojo.Outer$Inner@9931f5
    I am in Outer's Construtor
    red.sea.daelly.pojo.Outer$1@1f1fba0
    red.sea.daelly.pojo.Outer@1befab0

    可见,内部类会在$后面加上内部类的类名,匿名类会以数字表示,从1开始

    展开全文
  • 如图,每次运行其中一个main方法时,都会把该项目中所有的class文件生成一遍,不方便测试其中类的初始化关系。 解决方法:把下图红框中的钩去掉 ...
  • 将jsp生成java然后反编译class然后打入jar
  • 记录一下,有问题欢迎指正^_^ 默认存储在: C:\Users{your_name}\AppData\Roaming\Code\...比如我的某个项目的java文件对应class文件的全路径是: C:\Users\xxx\AppData\Roaming\Code\User\workspaceStorage\795d4...
  • 编译生成CLASS文件

    2011-12-01 18:43:46
    java中,如果在一个类中定义了内部类,刚会生成: super&this.class的文件,如果给某个控件添加了Listener事件,则会生成 super&i.class的文件,其中i为Listener的个数。
  • 最近新项目更新svn,将项目的程序clean了一下,死活不能编译class文件,最后发现是因为上传的人设置的项目的中的libraries 的jsp-api.jar、servlet-api.jar这两个文件与我电脑安装的tomcat的文件位置不一样导致编译...
  • Java生成成jar包 通过eclipse的dy web项目,,进行编译(晚点找一下直接编译的软件) 最后通过打包成zip格式,重命名jar即可作为jar包。 class文件反编译及代码复用 用jd-gui.exe直接把整个文件夹内的文件反编译...
  • 设置class文件的生成位置 file->project structure out put 选择第二个设置输出位置 设置resource和source 方法:点击文件右键->make direction as 需要运行和引用的java文件设置为source文件,将配置文件(xml...
  • ■前言 使用Jenkins自动打包,生成jar文件 检证时,和本地手动执行mvn命令生成的jar比较 使用winMerage进行比较。... 使用的JDK都是java 8, 大版本是相同的,小版本不同 ・①Jenkins所...
  • 程序员编写的是.java文件,经编译生成.class文件给计算执行。相信这两句话很形象的说明了这两个文件的关系了。1,首先反编译器就是jd-gui这个软件了,可以把jar包直接拖进这个软件就能够看到代码了。当然jd-gui不...
  • jdk编译.java文件生成.class文件

    千次阅读 2019-06-17 16:59:12
    首先请确保你的jdk是可用的 已命令行的形式进入到jdk的bin目录下 然后用javac命令进行编辑你要编辑的.java文件 在之后会生成相应的.class文件
  • Myeclipse不能编译java生成class文件

    千次阅读 2012-05-22 11:13:30
    不管是刷新还是clean都不能生成class文件。查看“Problem"视图,发现好像是lib路径中有问题,通过 “Properties"--->"Java Build Path"发现lib目录中有一个引用的jar包不存在或者指定的jdk不一样,原来该文件夹已经...
  • 你有没有在学习spring,ssh,mabatis的时候,像阅读源码,却发现都死class文件而导致无法继续阅读的情况呢,如果你有这方面的问题的话,你可以下载gui.exe试试哦,它可以很方便的将class文件反编译java源码,有...
  • linux下单个文件编译只需要 javac *.java,但如果该java文件有依赖的jar包以及其他class文件,咋办呢? 运行如下命令 java -cp 项目的最大包名的路径:lib的位置 *.java 例:java -cp /com/sanamaz/*:/home/user/lib/* ...
  • 参考:怎样将javaclass文件生成jar包 将一些*.class文件压缩成一个 .jar文件交付给用户使用。如果要想生成jar文件,直接使用JDK中bin目录里的jar.exe就可以将所有的类文件进行压缩。此命令是随JDK一起安装的,...
  • 通过数据库可以省去sql语句编写的麻烦,javacreate可以自动根据数据库自动生成java文件代码,凌乱的帮助文档可以用chm生成工具编译……
  • Java编译生成带为什么会生成带$符号的XXXX$1.class文件呢? 答:XXXX.class是匿名内部类 误删怎么处理呢? 答:project--&gt;(选中误删项目)clean
  • ![![图片说明](https://img-ask.csdn.net/upload/201505/01/1430489157_997901.jpg)图片说明](https://img-ask.csdn.net/upload/201505/01/1430489146_472820.jpg)
  • 本代码块为动态编译指定java文件,将编译后的class生成jar文件.调用示例为BuildRmi类
  • java中,如果在一个类中定义了内部类,则会生成: superthis.class的文件,如果给某个控件添加了Listener事件,则会生成 superi.class的文件(其中i为Listener的个数)。   例如:下面的程序: import ...
  • Eclipse不能自动编译 java文件,不会生成CLASS 每次修改类代码后都得重启 Tomcat 花了1天终于解决,网上所说基本是下面1和2的方法,使用之后还是不行最后重新建工作环境导入项目对比了一下找到第三种方法: ...
  • 那是常规的做法,但是对于像python,java这种解释性语言,就需要解释器去执行,python没有编译,写完了的脚本,直接用python命令来解释,它实际上是去调用一些动态库,这些动态库是由c/c++编译生成的。java就要把...
  • IEDA查看JVM反编译生成Class源码 步骤 找到代码编译后生成的Class文件 复制class文件到java代码所处的文件夹 打开IDEA就能看见Class当中的源代码了
  • java超强的反编译工具,可直接反编译class和jar后生成java 推荐,公司里大家都用这个!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,753
精华内容 3,501
关键字:

java编译生成class

java 订阅