java编译后的文件出现xx$1.class的原因及解决方式

java编译后的文件名字带有$接数字的就是匿名内部类的编译结果,接名字的就是内部类的编译结果

例如:

TestFrame$1.class是匿名内部类的编译结果,TestFrame$MyJob.class则是内部类MyJob编译后得到的.

使用内部类可以隐藏一些实现的细节, 等等, 还有其他一些好处. 使用匿名类的时候, 要注意代码的可读性

补充知识:JNI之javah使用时报错:找不到类文件

初学java,想使用JNI,在用javah生成头文件时,总是报错找不到类;

看了javah的help,本来是很简单的,但是由于自己概念含糊,所以出错。

javah的命令行帮助:

用法:javah [选项] <类>其中 [选项] 包括:

-help 输出此帮助消息并退出

-classpath <路径> 用于装入类的路径

-bootclasspath <路径> 用于装入引导类的路径

-d <目录> 输出目录

-o <文件> 输出文件(只能使用 -d 或 -o 中的一个)

-jni 生成 JNI样式的头文件(默认)

-version 输出版本信息

-verbose 启用详细输出

-force 始终写入输出文件使用全限定名称指定 <类>(例如,java.lang.Object)。

假如有这样的类:

package mwic32;
public
class Main { 

  public native String GetICSN( int CommPort);
  static
  {
    System.loadLibrary("MwIc32.dll");
  }   

  public static void main(String[] args)
  {
    // TODO code application logic here
   }
} 

假如项目目录是:F:/NetBeansProjects,那么编译后生成的class文件会位于F:/NetBeansProjects/MwIC32/build/classes/mwic32现在希望用JAVAH生成头文件。

javah -classpath F:/NetBeansProjects/MwIC32/build/classes mwic32.Main

也就是说,指定类的路径时,应该以包所在路径为准,而不是具体类所在的子目录

以上这篇java编译后的文件出现xx$1.class的原因及解决方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Java异常ClassCastException的解决

    在说ClassCastException之前,先介绍下引用类型转换: 引用类型转换分为向上转型和向下转型两种: 向上转型:多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的:当父类引用指向一个子类对象时,便是向上转换: 使用格式: 父类类型 变量名 = new 子类类型(); 向下转型:父类类型向子类类型向下转换的过程,这个过程时强制:一个已经向上转型的子类对象,将父类引用转为子类引用,可以使用强制转换的格式,便是向下转换: 使用格式: 子类类型 变量名 = (子类类型) 父类变量名;

  • 解决java.lang.ClassCastException的java类型转换异常的问题

    在项目中,需要使用XStream将xml string转成相应的对象,却报出了java.lang.ClassCastException: com.model.test cannot be cast to com.model.test的错误. 原因: 项目中应该是采用了热部署,devtools,因为累加载器的不同所以会导致类型转换失败 措施: 在pom.xml中将以下代码注释掉: <dependency> <groupId>org.springframework.boot</g

  • 解决idea 项目编译后没有class文件的问题

    问题 idea项目突然无法运行,提示找不到某个类.查看了编译输出目录out,发现没有class文件. 尝试解决 尝试删除out.重新导入项目.在gradle面板点击刷新,都没能解决问题. 问题解决 最后,点击Build->Rebuild Project解决.不明原因,先做下记录. 补充知识:IDEA项目无法引用本地Class类,而且各种报错 背景 今天从git 上下载下来的项目,在别的机器上都可以正常运行,然而到了我的机器上,就各种报错,而且本地的class文件也无法引用. 1.删掉项目,重新下

  • 运行java的class文件方法详解

    一.运行class文件 执行带main方法的class文件,命令行为: java <CLASS文件名> 注意:CLASS文件名不要带文件后缀.class 例如: 复制代码 代码如下: java Test 如果执行的class文件是带包的,即在类文件中使用了:package <包名> 那应该在包的基路径下执行,命令行为: java <包名>.CLASS文件名 例如:PackageTest.java中,其包名为:com.ee2ee.test,对应的语句为: package

  • java编译后的文件出现xx$1.class的原因及解决方式

    java编译后的文件名字带有$接数字的就是匿名内部类的编译结果,接名字的就是内部类的编译结果 例如: TestFrame$1.class是匿名内部类的编译结果,TestFrame$MyJob.class则是内部类MyJob编译后得到的. 使用内部类可以隐藏一些实现的细节, 等等, 还有其他一些好处. 使用匿名类的时候, 要注意代码的可读性 补充知识:JNI之javah使用时报错:找不到类文件 初学java,想使用JNI,在用javah生成头文件时,总是报错找不到类: 看了javah的help,本

  • java迭代器移除元素出现并发修改异常的原因及解决

    迭代器(Iterator的对象)主要用于遍历集合,体现的就是迭代器模式. Iterator接口定义了以下四种方法. boolean hasNext():如果集合还没遍历完就返回true. Object next():返回集合里的下一个元素. void remove():删除集合里上一次next方法返回的元素. void forEachRemaining(Consumer action):这是java8新增的默认方法,可用Lambda表达式遍历数组. 使用迭代器遍历元素时不能不能通过Collect

  • vue打包后出现空白页的原因及解决方式详解

    目录 路由模式 history 路由模式 hash 总结 1. 修改路径 2. 更改路由模式 路由模式拓展 路由的hash和history模式的区别 打包路由选择 路由模式 history 新建项目什么都不动,路由模式:history, 直接npm run build打包 打包之后,直接打开dist文件里面的ndex.html可以看到页面是空白的,控制台是这样的. 再看看网页源码, 对比dist文件夹结构可以看到资源路径的引入是错误的,应该用'./'而不是'/' 那怎么修改打包之后的路径呢?查看

  • Java String.replace()方法"无效"的原因及解决方式

    首先我们来看个例子 public class Demo1 { public static void main(String[] args) { String aa="abcd"; aa.replace("a","f"); System.out.println("输出结果是"+aa); } } 运行结果是什么呢?我们先看看这个方法的api 返回一个新的字符串,用newChar替换此字符串中出现的所有oldChar 所以这里的结果

  • ASP.NET、SharePoint中另存文件的长文件名被截断的原因及解决办法

    一个Word文档,或者是什么文件,文件名称超过15个汉字,或者一定长度的字母之后,上传到文档库是没有问题的,但是如果你想下载,使用[右键]-[另存为],就会发现保存框的文件名一栏中,就剩下15个汉字了,其他的都被省略了. 我就开始寻找解决的办法,直接点击文件,默认会用客户端程序打开,例如word文档,会使用word打开,发现文件名是正常的,然后使用word的另存为,正常. 使用moss的资源管理器视图,从视图中直接复制文件出来,正常. 唯独另存不正常,以上都是在IE6的环境测试的. 上网goog

  • Java加载property文件配置过程解析

    这篇文章主要介绍了java加载property文件配置过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1 properties简介: properties是一种文本文件,内容格式为: key = value #单行注释 适合作为简单配置文件使用,通常作为参数配置.国际化资源文件使用. 对于复杂的配置,就需要使用XML.YML.JSON等了 2 java加载Properties: java加载properties主要通过2个util包下的

  • 利用vscode调试编译后的js代码详解

    前言 在开发的过程中,几乎不可能一次性就能写出毫无破绽的程序,断点调试代码是一个普遍的需求. vscode 是一个非常棒的编辑器,内置功能强大的调试能力.经过简单的设定,就可以对 js 文件进行调试.但有时我们想要调试的内容是经过编译的,当然我们可以直接调试编译后的代码.但经过编译压缩以后的代码,可读性很差,且也可能无法分模块查看了,有什么方法进行编译前的代码调试么?答案当然是肯定的. 下面话不多说了,来一起看看详细的介绍吧. vscode 的常规调试 vscode 的调试界面在窗口最左边: 最

  • 如何使用IDEA查看java文件编译后的字节码内容

    目录 首先编写一个java类StringDemo1.java 经过编译后,生成StringDemo1.class文件 使用jclasslib反编译工具 JDK版本映射 首先编写一个java类 StringDemo1.java public class StringDemo1 {    public static void main(String[] args) {        String str1 = "aaa" + "bbb";        System.o

  • CMD运行Intellij Idea编译后的class文件操作

    或许很多Java初学者都会用javac.java命令运行程序,运行过几次后就转向开发工具.我本人也是这样,很久没有用命令行去执行java文件了,现在都是用Eclipse.Intellij Idea等编译工具直接编译运行. 昨天开始学习<算法>,里面很多代码都用到了命令行重定向文件实现输入输出,所以昨天用命令去执行class文件时碰到了一个NoClassDeFoundError异常,网上说的也很杂,看得"一头雾水",其实还是基础不好,搞清楚原理很多问题就迎刃而解了. Idea

  • Python编译成.so文件进行加密后调用的实现

    pyc的破解相对容易,使用cython将python文件编译成.so文件,能在一定程度上增强python源码的私密性. 编译成.so文件 环境准备:cython 测试脚本准备:test.py #-*-coding: UTF-8 -* - class test: def say(self): print 'hello' 脚本编译准备: 3.1 编写compile.py文件,内容如下: #-*-coding: UTF-8 -* - from distutils.core import setup f

随机推荐