JavaSE-反射-获取类或者对象的四种方法

1、使用Class类的静态方法Class.forName("xxxx");

  新建一个要想要获取的类

package org.burning.sport.javase.classloader;

public class ClassLoaderModel {
}
package org.burning.sport.javase.classloader;

/**
 * 类的载入方式
 */
public class ClassLoaderMain {
    public static void main(String[] args) {

        ClassLoaderMain clm = new ClassLoaderMain();
        //1.使用Class静态方法Class.forName
        clm.loadClassMethod1();
    }

    public void loadClassMethod1() {
        try {
            Class<?> clazz = Class.forName("org.burning.sport.javase.classloader.ClassLoaderModel");
            ClassLoaderModel clm = (ClassLoaderModel)clazz.newInstance();
            System.out.println(clm);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2、使用ClassLoader

package org.burning.sport.javase.classloader;

/**
 * 类的载入方式
 */
public class ClassLoaderMain {
    public static void main(String[] args) {
        ClassLoaderMain clm = new ClassLoaderMain();
        //2.使用ClassLoader
        clm.loadClassMethod2();
    }

    public void loadClassMethod2() {
        ClassLoader cl = this.getClass().getClassLoader();
        try {
            Class<?> clazz = cl.loadClass("org.burning.sport.javase.classloader.ClassLoaderModel");
            ClassLoaderModel clm = (ClassLoaderModel) clazz.newInstance();
            System.out.println(clm);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3、使用 类.class

package org.burning.sport.javase.classloader;

/**
 * 类的载入方式
 */
public class ClassLoaderMain {
    public static void main(String[] args) {
        ClassLoaderMain clm = new ClassLoaderMain();
        //3. 使用类.class方式
        clm.loadClassMethod3();

    }

    public void loadClassMethod3() {
        Class<?> clazz = ClassLoaderModel.class;
        try {
            ClassLoaderModel str = (ClassLoaderModel)clazz.newInstance();
            System.out.println(str);
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}

4、使用对象的getClass方法

package org.burning.sport.javase.classloader;

/**
 * Created by lisen on 2017/7/27.
 * 类的载入方式
 */
public class ClassLoaderMain {
    public static void main(String[] args) {
        ClassLoaderMain clm = new ClassLoaderMain();
        //4. 使用对象的getClass方法
        clm.loadClassMethod4();
    }

    public void loadClassMethod4() {
        ClassLoaderModel clm = new ClassLoaderModel();
        Class<?> clazz = clm.getClass();
        try {
            ClassLoaderModel ss = (ClassLoaderModel)clazz.newInstance();
            System.out.println(ss);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

https://gitee.com/play-happy/base-project

时间: 2024-10-14 01:54:57

JavaSE-反射-获取类或者对象的四种方法的相关文章

php7实例化类有对象有两种方法

php7实例化类有对象有两种方法,下面给介绍具体两种方法 class Person{public $a="96net.com.cn";public function eat(){echo 'xxxx';} } 1,NEW 关键词实例化对象 $xm= new Person();或者$xm= new Person; 2, 类名字符串,把类名赋值给变量 $strs='Person'; $xm= new $strs(); 原文地址:https://blog.51cto.com/13959155

Java反射获取类和对象信息全解析

反射可以解决在编译时无法预知对象和类是属于那个类的,要根据程序运行时的信息才能知道该对象和类的信息的问题. 在两个人协作开发时,你只要知道对方的类名就可以进行初步的开发了. 获取类对象 Class.forName(String clazzName)静态方法 调用类的class属性,Person.class返回的就是Person的class对象(推荐使用) 调用某个对象的getClass()方法 具体使用还是要根据实际来选择,第一种方式是比较自由的,只要知道一个类名就可以了,其不会做该类是否存在的

C# 使用反射获取类的成员变量名、方法及属性的若干笔记

参考链接:http://blog.csdn.net/ccaakkee/article/details/2425950,作者:CSDN ccaakkee   http://blog.csdn.net/jaydawson/article/details/5539438,作者:CSDN jaydawson 代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sys

Java遍历Map对象的四种方法

在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都实现了Map接口,以下方法适用于任何map实现(HashMap, TreeMap, LinkedHashMap, Hashtable, 等等) 方法一 在for-each循环中使用entries来遍历 这是最常见的并且在大多数情况下也是最可取的遍历方式.在键值都需要时使用. Map<Integer, Integer> map = new HashMap<Integer, Integer&g

MYSQL获取自增ID的四种方法

厚积!! 1. select max(id) from tablename 2.SELECT LAST_INSERT_ID() 函数 LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变. 在多用户交替插入数据的情况下max(id)显然不能用.这时就该使用LAST_INSERT_ID了,因为LAST_INSERT_ID是基 于 Connection的,只要每个线程都使用独立的 Connection对象,LAST_INSER

反射概念:获取class文件对象的三种方式

反射 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 要想解剖一个类,必须先要获取到该类的字节码文件对象.而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象. 利用class文件对象,去使用该文件中的成员变量,构造方法,成员方法. 例子1:获取class文件对象的三种方式 public cla

反射获取类的几种方法

1 public class Demo { 2 3 /** 4 * 反射:加载类,获得类的字节码 5 * @param args 6 * @throws ClassNotFoundException 7 */ 8 public static void main(String[] args) throws ClassNotFoundException { 9 10 //1 11 Class clazz = Class.forName("Person"); 12 13 //2 14 Cla

C++ Primer 学习笔记_23_类与数据抽象(9)--四种对象生存期和作用域、static 用法总结

C++ Primer 学习笔记_23_类与数据抽象(9)--四种对象生存期和作用域.static 用法总结 前言: 从上图可知,程序占用的内存被分了以下几部分. (1).栈区(stack) 存放函数的参数值,局部变量的值等,内存的分配是连续的.栈上的内容只在函数的范围内存在,当函数运行结束,这些内容也会自动被销毁,其特点是效率高,但空间大小有限 注意:通常栈空间容量比较小,一般是1MB-2MB,所以体积比较大的对象不适合在栈中分配. (2).堆区(heap) 由malloc系列函数或new操作符

java 通过反射获取类属性结构,类方法,类父类及其泛型,类,接口和包

首先自定义三个类 package reflection1; public interface MtInterface { void info(); } package reflection1; import java.io.Serializable; public class Creature<T> implements Serializable { private char gender; public double weight; private void breath() { Syste