class<?> clazz参数_【Java视频教程】day41-??什么是Class???

6ccd15a76a7e6f85b708f4c58a6d7b39.png

Class类介绍

java世界中,一切都是对象,所有事物都要使用一个类描述;

这个class是不是一个事物呢?

是的,所以java中专门定义了一个叫做Class的类来描述它;

89e7fe39122d8dcbdbdd0e60fe6e04ee.png

int[] arr = new int[1];

int[] array = new int[2];

实际上,除了类使用Class类描述外,一个类中的构造函数、成员变量和一般函数,都是一种事物,java中都会使用一个类描述:

构造函数:Constructor类;

成员变量:Field类;

一般函数:Method类;

e9dad4836f3031d0e61d1f4977dc016a.png
Java中的Classhttps://www.zhihu.com/video/1087680753298550784

获取Class对象

第一种方式:通过对象的getClass函数获取

4092c885fb2a77f5f1cf2433ccb66d69.png

e44bfd59226770b42e471ec0f256f38b.png

第二种方式:通过类型的静态成员变量class获取

ec79fba22f14aece08be145f5b03a148.png

第三种方式:使用Class类的静态函数,通过表示某种类型的字符串获取

3f00c2ea85e0b353bc6e58cfa88a21da.png

这个方法的参数字符串,必须是一个类型的带包名的全称;

6c4d14a474a06c8ba9e46433d1298532.png

使用第三种方式通过配置文件获取Class对象

一个保存了类名的配置信息的配置文件:

6e8ad341f76be124d688455f542ca252.png

4a440d8522abdecc0c8dc10861efacc0.png
dc703232000a8c4bacdda639b6c99340.png
获取Class的三种方式https://www.zhihu.com/video/1087680911335784448

使用Class对象

public 

通过获取到的Class对象创建这个类的对象

66118d4282d5d34ae4aeb818bd6ff926.png

这个方法,实际上是在调用这个类的无参构造函数创建一个对象

1d6073ae321aa7e647ebb157ac2ec080.png
08ab16bb8d5524f1eda182c228a5a4ab.png
无参构造函数创建一个对象https://www.zhihu.com/video/1087681488165818368

获取和调用构造函数

de85602e05089418c1814f476147412b.png
231699753ecc83387c12000306d2d726.png
Class调用无参数构造函数https://www.zhihu.com/video/1087682001221492736

bc4f926aba5e0db1ad6582fd4732b6e5.png
b0d6fe21ab88c99fbeddc80f4b06b4d5.png
https://www.zhihu.com/video/1087682231736188928

e0fff9568544715de0015070ebbfba2f.png
328201975a346dc51b7b822f48b42aa0.png
07_获取和操作所有构造函数1https://www.zhihu.com/video/1087682333104115712

// 演示通过Class对象获取类中的构造函数

 private static void test2() throws NoSuchMethodException, SecurityException {
		// 演示根据参数的类型,获取一个公开的构造函数
		// 1、获取Person类的对象
		Class clazz = Person.class;
		Constructor c = clazz.getConstructor(String.class,int.class);
		System.out.println(c);//public com.kuaixueit.reflect.Person(java.lang.String,int)
		c = clazz.getConstructor();
		System.out.println(c);//public com.kuaixueit.reflect.Person()
		System.out.println("----获取所有公开的构造函数---------");
		Constructor[] constructors = clazz.getConstructors();
 for (Constructor constructor : constructors) {
			System.out.println(constructor);
		}
		System.out.println("-------演示获取一个私有的构造函数---------------");
		c = clazz.getDeclaredConstructor(String.class);
		System.out.println(c);//com.kuaixueit.reflect.Person(java.lang.String)
		c = clazz.getDeclaredConstructor(int.class);
		System.out.println(c);//private com.kuaixueit.reflect.Person(int)
		System.out.println("-------演示获取一个所有的构造函数---------------");
		constructors = clazz.getDeclaredConstructors();
 for (Constructor constructor : constructors) {
			System.out.println(constructor);
		}
	}

使用构造函数对象创建对象:

0cc1f78aa71f9731d94e61ac9f82ce1e.png
684fe2e9656f635e84702f6962ec6621.png
08_获取和操作所有构造函数(包https://www.zhihu.com/video/1087682533096886272

f10a05731cc8fd10b5456455f12b69c1.png

使用反射破坏单例

b4a62d2b861c812384f16c9361ffe8eb.png

预防措施:

fd122abdfd0c9943bf23ce83daf6390c.png
ef191efd104dc6791c06e4a2aca87d56.png
09_使用反射破坏单例&避免被破坏https://www.zhihu.com/video/1087682729256173568
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值