认识反射机制
正
package com.yootk.demo;
class Book {
public void read() {
System.out.println("认真学习李兴华老师出版的《Java从入门到项目实战》");
}
}
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
Book book = new Book() ; // 1,首先获取Book类的实例化对象
book.read(); // 通过实例化对象进行方法调用。
}
}
反
package com.yootk.demo;
class Book {
public void read() {
System.out.println("认真学习李兴华老师出版的《Java从入门到项目实战》");
}
}
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
Book book = new Book() ; // 1,首先获取Book类的实例化对象
System.out.println(book.getClass().getName()); // 对象所属类的完整名称
System.out.println(book.getClass().getSimpleName()); // 对象所属类的简化名称(不包含包名称)
System.out.println(book.getClass().getTypeName()); // 获得对象所属类的类型
}
}
获取操作类型
package com.yootk.demo;
class Book {
public void read() {
System.out.println("认真学习李兴华老师出版的《Java从入门到项目实战》");
}
}
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
Book book = new Book() ;
printClass(book.getClass());
printClass(new java.util.Date().getClass());
}
public static void printClass(Class clazz) {
System.out.println("【当前操作的类型】" + clazz.getName());
}
}
Class类与对象实例化
范例一
package com.yootk.demo;
interface IBook {}
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
Class clazzA = IBook.class ; // 属于Java的原生语法支持
Class clazzB = java.util.Date.class ; // 属于Java的原生语法支持
System.out.println(clazzA);
System.out.println(clazzB);
}
}
范例二
package com.yootk.demo;
import java.util.Date;
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
Class clazz = Date.class ; // 属于Java的原生语法支持
System.out.println(clazz);
}
}
范例三:
package com.yootk.demo;
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
Class clazz = Class.forName("java.util.Date") ; // 根据类名称实现信息加载
System.out.println(clazz);
}
}
反射机制与对象实例化
1、
package com.yootk.demo;
class Book {
public Book() {
System.out.println("【Book】实例化新的Book类对象");
}
}
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
Book book = new Book() ;
}
}
2、
package com.yootk.demo;
class Book {
public Book() {
System.out.println("【Book】实例化新的Book类对象");
}
}
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
Class bookClazz = Class.forName("com.yootk.demo.Book") ; // 实例化Book类的对象
bookClazz.newInstance() ; // 在JDK 1.8的时候依然可以正常使用
}
}
3、
package com.yootk.demo;
class Book {
public Book() {
System.out.println("【Book】实例化新的Book类对象");
}
}
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
Class bookClazz = Class.forName("com.yootk.demo.Book") ; // 实例化Book类的对象
bookClazz.getDeclaredConstructor().newInstance() ;
}
}
4、
package com.yootk.demo;
class Book {
public void read() {
System.out.println("认真学习李兴华老师出版的《Java从入门到项目实战》");
}
}
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
Class bookClazz = Class.forName("com.yootk.demo.Book") ; // 实例化Book类的对象
// newInstance()返回的是一个Object类型,那么就必须进行对象的强制向下转型
Book book = (Book) bookClazz.getDeclaredConstructor().newInstance() ;
book.read();
}
}
5、
package com.yootk.demo;
import java.util.Date;
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
Class bookClazz = Class.forName("java.util.Date") ; // 实例化Book类的对象
// 如果强制转型了,那么就必须进行开发包的完整导入
Date date = (Date) bookClazz.getDeclaredConstructor().newInstance() ;
System.out.println(date.getTime());
}
}
6、
package com.yootk.demo;
interface IBook { // 接口
public void read() ;
}
class MathBook implements IBook {
@Override
public void read() {
System.out.println("【MathBook】认真学习大学数学课程(线性代数、概率统计、离散数学)。");
}
}
class ProgramBook implements IBook {
@Override
public void read() {
System.out.println("【ProgramBook】认真学习李兴华老师出版的《Java从入门到项目实战》。");
}
}
class Factory {
private Factory() {}
public static IBook getInstance(String className) {
if ("math".equalsIgnoreCase(className)) {
return new MathBook() ;
} else if ("program".equalsIgnoreCase(className)) {
return new ProgramBook() ;
} else {
return null ;
}
}
}
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
IBook book = Factory.getInstance("program") ;
book.read();
}
}
7、
package com.yootk.demo;
interface IBook { // 接口
public void read() ;
}
class MathBook implements IBook {
@Override
public void read() {
System.out.println("【MathBook】认真学习大学数学课程(线性代数、概率统计、离散数学)。");
}
}
class ProgramBook implements IBook {
@Override
public void read() {
System.out.println("【ProgramBook】认真学习李兴华老师出版的《Java从入门到项目实战》。");
}
}
class Factory {
private Factory() {}
public static IBook getInstance(String className) { // 必须传递类的完整名称
try { // 直接实例化对象
Object obj = Class.forName(className).getDeclaredConstructor().newInstance();
if (obj instanceof IBook) { // 为了防止出现ClassCastException
return (IBook) obj ; // 强制性的向下转型
}
return null ;
} catch (Exception e) {
return null ;
}
}
}
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
IBook book = Factory.getInstance("com.yootk.demo.ProgramBook") ;
book.read();
}
}
8、
package com.yootk.demo;
class Singleton { // 单例设计类
private static Singleton instance ; // 不进行对象实例化
private Singleton() { // 构造方法私有化
System.out.println("【" + Thread.currentThread().getName() + "】实例化Singleton类的对象。");
}
public String toString() {
return "【VIP】李兴华编程训练营:yootk.ke.qq.com" ;
}
public static Singleton getInstance() { // 获取Singleton类实例化对象
if (instance == null) { // 现在还没有实例化
instance = new Singleton() ; // 对象实例化
}
return instance ; // 获取对象实例
}
}
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
for (int x = 0 ; x
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?