ClassLoader 类加载器(class loader)用来加载 Java 类到 Java 虚拟机中。...Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件)。...类加载器负责读取 Java 字节代码,并转换成 java.lang.Class 类的一个实例。 2....Java代码 ? public Class<?...Class.forName()方法有两个重载的版本: Java代码 ? public static Class<?
根据 Java 虚拟机规范,类文件由单个 ClassFile 结构组成: ClassFile { u4 magic; //Class 文件的标志 u2...高版本的 Java 虚拟机可以执行低版本编译器生成的 Class 文件,但是低版本的 Java 虚拟机不能执行高版本编译器生成的 Class 文件。...字面量比较接近于 Java 语言层面的的常量概念,如文本字符串、声明为 final 的常量值等。而符号引用则属于编译原理方面的概念。...,除了 java.lang.Object 之外,所有的 java 类都有父类,因此除了 java.lang.Object 外,所有 Java 类的父类索引都不为 0。...,Java 虚拟机运行时会忽略掉它不认识的属性。
命令 javac Hello.java dx --dex -- output=Hello.dex Hello.class javap -c -classpath ....Hello 使用dexdump.exe 位于Android SDK 的 platform-tools dexdump.exe -d Hello.dex 如果使用JDK1.7编译Hello.java...生成的Hello.class默认的版本会比较低 使用dx生成dex文件会提示class文件无效 javac -source 1.6 -target 1.6 Hello.java
Class对象 在Java中有两种对象:Class对象和实例对象,实例对象是类的实例,通常是通过new关键字构建的。Class对象是JVM生成用来保存对象的类的信息的。...Java程序执行之前需要经过编译、加载、链接和初始化这几个阶段,编译阶段会将源码文件编译为.class字节码文件,编译器同时会在.class文件中生成Class对象,加载阶段通过JVM内部的类加载机制,...Class对象的获得 2.1 类名.class 当执行类名.class时,JVM会先检查Class对象是否装入内存,如果没有装入内存,则将Class对象装入内存,然后返回Class对象,如果装入内存,则直接返回...反射 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制...Class对象的获得是Java反射的基础,Java的反射是另一块内容,本文不涉及。
Class类的实例表示java应用运行时的类(class and enum)或接口(interface and annotation)(每个java类运行时都在JVM里表现为一个class对象,可通过类名...可用在反射中构建对象,调用对象方法: class doubleClass= class.forName(“java.lang.Double”); Object objDouble...重要 5,public native Class getSuperclass():获取类的父类,继承了父类则返回父类,否则返回java.lang.Object。返回Object的父类为空-null。...一般 6,public java.net.URL getResource(String name) :根据字符串获得资源。...public Package getPackage() :反射中获得package,如java.lang.Object 的package为java.lang。
] -s java [需要反编译包含class的目录]\**\*.class 帮助 This is README file for Jad - the fast Java Decompiler....How to use Jad To decompile a single JAVA class file 'example1.class' type the following: jad...Jad uses JAVA class name as an output file name....For example, if class file 'example1.class' contains JAVA class 'test1' then Jad will create file 'test1...For example: jad -o -dtest -sjava *.class (or jad -o -d test -s java *.class, which has the same
总结: 1. public class 和 class 的区别 一个java源文件当中可以定义多个class 一个java源文件当中public的class不是必须的 一个class会定义生成一个xxx.class...字节码文件 一个java源文件当中定义公开的类的话,只能有一个,并且该类名称必须和java源文件名称一致 每一个class当中都可以编写main方法,都可以设定程序的入口,向执行B.class中的main...方法: java B,想执行x.class当中的main方法:java x 注意:当在命令窗口中执行java Hello,那么要求hello.class当中必须有主方法。...通过以上的测试可以得出:一个 java 源文件中可以定义多个 class,并且在编译的时候一 个 class 会对应编译生成一个 class 字节码文件。...还有,在实际的开发中,虽然一个 java 源文件可以定义多个 class,实际上这是不规范的, 比较规范的写法是一个 java 源文件中只定义一个 class。
了解下这两个文件类型:.java文件是给人看的,.class是给计算机看的。程序员编写的是.java文件,经编译后生成.class文件给计算执行。 相信这两句话很形象的说明了这两个文件的关系了。...当然jd-gui不能编译.class文件。 2,怎么把.class转成.java文件呢?也是在jd-gui文件里面。...点击要转的文件,然后file–>save Source,如下图: 保存后就是.java文件了。当然可以直接保存整个jar包,也可以是单个文件。 3,eclipse里面怎么看.class文件?...新建的一个.java文件有.class的前提是要编译成功,比我常用的项目是maven工程,要先maven install编译才能生成“完整的”.class文件,单单保存是不行的,这里下面会有说明。...eclipse可以通过ctrl+shift+R,然后输入类名,可同时看到.class和.java文件。 4,怎么编译单个的java文件呢?
http://blog.csdn.net/bingduanlbd/article/details/8424243/ Java Class类理解: 首先,Class是一个java类,跟Java API...更进一步说,Class是一个java中的泛型类型。...然后可以通过以下方法获得这个Class对象: java.lang.Class classObj = ClassName.class; 2....>如果这个Class对象实例所表示的是一个Java类,则返回class full_classname....例如java.lang.Math.java这个类,它所对应的Class实例的toString方法返回的就是class java.lang.Math >如果是接口,将class改成interface。
Java API:Object class 首先简单的介绍一下Object类。 ...java.lang.Object java.lang包子使用的时候,不用显示导入,由编译器自动导入。 ...下面提供一个示例: public class T1 implements Cloneable { int i; public static void main(String[] args) throws...Object o1=new Object(); o1.getClass(); //上面等同于下面 Object.class 视具体场景而定,使用哪种方法实现获取类型。 ...源码如下: public final native Class getClass(); 由源码可以看出,此方法也使用native修饰。
Java API:String class 一、介绍 本博文参照API文档以及源码进行阅读,源码参考JDK1.8。...java.lang.String public final class String extends Object implements Serializable, Comparable...*/ private static class CaseInsensitiveComparator implements Comparator, java.io.Serializable...return new Formatter().format(format, args).toString(); } /** * * @see java.util.Formatter
每个类都有一个Class对象。就是说,每当编写并且编译了一个新类,就会产生一个Class对象,被保存在一个同名的.class文件中。c 所有的类都是在第一次使用时,动态加载到JVM中的。...一旦某个类的Class对象被载入内存,它就被用来创建这个类的所有对象。...Class.forName("Gum") 这个方法是Class类的静态方法,需要用一个包含目标类的文本名(注意拼写和大小写)的String作为输入参数,返回的是Class对象的引用。...另外,使用newInstance() 来创建的类,必须带有默认的构造器 Java还提供了另一种方法来生成对Class对象的引用,对上述程序可以这么写:FancyToy.class; 这样做不仅要简单,而且更安全...当使用.class来创建对Class对象的引用时,不会自动地初始化该Class对象。
Class类与Class对象 Class对象是Class类的实例,类至少包含以下信息,因此class类又可以被 解构为如下部分: 权限修饰符 类名 参数化类型(泛型信息) 接口Interface 注解Annotation...打开Class类的源代码,发现果然如此: private static class ReflectionData { volatile Field[] declaredFields...难点一:为什么根据Class对象获取Method时,需要传入方法名+参数的Class类型 为什么要传 name和 ParameterType?...上面分析过,.class文件通过IO被加载到内存后,JDK创造了至少四个对象:Class、Field、Method、Constructor,这些对象其实都是0101010的抽象表示。...也就是说我们在.java文件中写的方法,被“解构”以后存入了Method对象中。所以对象本身是一个方法的映射,一个方法对应一个Method对象。 对象的本质就是用来存储数据的。
Java class文件是什么? java class 文件是对Java程序二进制文件格式的精确定义。每一个Java class文件都对一个Java类或者Java接口做出了全面描述。...无论Java class文件在何种系统上产生,无论虚拟机在何种操作系统上运行,对Java class文件的精确定义使得所有Java虚拟机都能够正确地读取和解释所有Java class文件。...实际上,Java class文件的形式能够表示Java源代码中无法表达的有效程序,然而,绝大多数Java开发者几乎都会选择使用class文件作为传递给虚拟机的首要方式。...可以轻松的分辨出Java class文件和非Java class文件,如果一个文件不是以0xCAFEBABE开头,那它肯定不是java class文件。...如果class文件的版本号超出了Java虚拟机所能处理的有效范围,Java虚拟机将不会处理该class文件。
1 为什么要获取class对象 当我们要获取类的信息及方法,利用Java中的反射机制,便于我们更加灵活的编写代码,可以在程序运行时装配代码,还可以实现动态代理。...反射机制允许程序在运行期间,获取任何一个已知名称的class内部信息。 那么获取class对象及内容信息的获取,主要有三种方式。...3 使用 class 静态属性 这种方式不需要对类进行实例化,直接使用类的 class 静态属性即可获取到该类的 class 对象。...Class 对象类的全路径,即包名+类名。...Class<?
Java Class getClassLoader()方法 java.lang.Class.getClassLoader() 方法返回的类加载器的类。一些实现可能使用null表示引导类加载器。...4 示例 package com.yiidian; /** * 一点教程网: http://www.yiidian.com */ /** * Java Class getClassLoader()方法...*/ import java.lang.*; public class ClassDemo { public static void main(String[] args) { try {...// returns the Class object associated with this class Class cls = Class.forName(“ClassDemo”); // returns...was used.”); } else { // returns the class loader Class loaderClass = cLoader.getClass(); System.out.println
>表示不确定的Java类型 Class<?...Class对象 com.gbx.Car System.out.println(cls.getClass());//输出运行类型 java.lang.Class //3....=Class.forName("java.lang.Cat")应用场景:多用于配置文件,读取类全路径,加载类 2.前提:若已知具体的类,通过类的 class 获取,该方式最为安全可靠,程序性能最高实例:...Class 类对象 Class cls=基本数据类型.class 6.基本数据类型对应的包装类,可以通过.type 得到 Class 类对象 Class cls=包装类.TYPE /** * @author...cls8 = void.class;//void数据类型 Classcls9 = Class.class; System.out.println
Class文件的存在使得不同语言编写的程序都可以运行在Java虚拟机上,只需要这些语言经过编译器编译后的Class文件符合Java虚拟机定义的规范,Java虚拟机就可以加载执行这些Class文件。...Class文件的内容。...上面这张图是经过编译后的Class文件中的内容 魔数(magic)与版本号 Class文件开头固定的4个字节为魔数,唯一作用就是用来确定这个文件是否是一个能被虚拟机接收的class文件。...Java的魔数固定为0xCAFEBABE,接下去的两个字节代表次要版本号,再下去的两个字节是主版本号,主版本号为0x0034(十进制是52,也就是JDK1.8),高版本的JDK能够运行以前版本的Class...常量池中主要存放两大类常量: 字面量 符号引用 字面量主要指的是文本字符串、声明为final的常量值等 符号引用主要包含三类常量: 类和接口的全限定名 字段的名称和描述符 方法的名称和描述符 Java代码在编译的时候不存在连接时
// relies on the fact that spoofing is impossible if a class has a name // of the form "java.*...它对传入的class的全名有一定约束,特别是不能以java.开头。由于defineClass是final的,所以如果你用自定义加载器也没法加载这样的类。...运行时输出 java.lang.SecurityException: Prohibited package name: java.lang at java.lang.ClassLoader.preDefineClass...由于我们没有遵循双亲委派,并且jvm内部内部已经加载的java/lang/Object的class loader也不是ClzLoaderSimp,所以没有找到对应父类。...请看例子 在运行前我们要自己创建一个Object类,包名是java.lang放到对应路径下(C:\Users\MyCode\) public class UnsafeClzLoaderSimp extends
领取专属 10元无门槛券
手把手带您无忧上云