类对象 与 类的对象
时间:2022-07-28
本文章向大家介绍类对象 与 类的对象,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、类对象
1.创建类对象
Class<?> class1 = Class.forName("d01_student.Student");
2.类对象方法(反射)
2.1构造方法
Class<?> class1 = forName("d01_student.Student"); //获取类对象
class1.getName() //d01_student.Student
class1.getSimpleName()); //Student
class1.getPackage()); //package d01_student
class1.getPackage().getName()); //d01_student
class1.getSuperclass()); //class java.lang.Object
Class<?>[] interfaces = class1.getInterfaces(); //继承的接口
//获取构造方法
Class<?> class1 = forName("d01_student.Student");
//获取所有构造方法
Constructor<?>[] constructors = class1.getConstructors();
//获取单个构造方法
Constructor<?> constructor = class1.getConstructor(String.class, int.class, String.class);
2.2所有方法
1.getMethods()获得公开的所有方法,没有私有的、保护的、默认的方法(包括继承的公开方法)
Method[] methods = class1.getMethods();
2.getDeclaredMethods()获得类中所有的方法,包括私有的、默认的、保护的,(不包括继承的)
Method[] declaredMethods = class1.getDeclaredMethods();
3.
Method methodShow1 = class1.getMethod("show");
二、类的对象(new)
1.创建类的对象
Class<?> class1 = Class.forName("d01_student.Student");
Student stu1 = (Student) class1.newInstance();
2.1构造方法
2.1.1获取单个构造方法
注意这里没有像下面获取无参构造方法一样的简单写法
// Student s1 = (Student) class3.newInstance("夏雨荷",18,"女"); ???????????///是错误的,没有这种方法
/*要想获得有参数的构造方法必须
1.先Class.forName()获取类的对象
2.再获取带某个参数的构造方法
3.再用这个constructor ,newInstance一个对象,如下:*/
System.out.println("获取单个构造方法");
Constructor<?> constructor = class1.getConstructor(String.class, int.class, String.class);
Student student = (Student) constructor.newInstance("大明", 12, "男");
System.out.println(student);
Student{name='大明', age=12, gender='男'}
2.1.2获取无参数构造方法
Constructor<?> constructor2 = class1.getConstructor();
Student student2 = (Student) constructor2.newInstance();
System.out.println(student2.toString());
无参构造执行了...
Student{name='null', age=0, gender='null'}
2.1.3简单写法(无参)
Student s3 = (Student) class1.newInstance();
System.out.println(s3.toString());
Student{name='null', age=0, gender='null'}
2.2获取单个方法
//Method methodShow2 = class1.getMethod("show", String.class);
Method methodShow1 = class1.getMethod("show");
Student stu1 = (Student) class1.newInstance();
methodShow1.invoke(stu1);
这里是show的无参数方法:姓名:null 年龄:0 性别:null
Process finished with exit code 0
2.3私有方法(设置访问权限失效)
Method method4 = class1.getDeclaredMethod("privateMethod");
//设置访问权限失效
method4.setAccessible(true);
method4.invoke(stu1);
2.4可以调用公开的(不能调用私有的)方法
public static void main(String[] args) throws Exception {
Properties properties = new Properties();
invokeAny(properties,"setProperty",new Class[]{String.class,String.class},"username","zhangsan");
System.out.println(properties.toString());
}
public static Object invokeAny(Object obj, String methodName, Class<?>[] paramsType, Object... args)throws Exception{
Class<?> class1 = obj.getClass();
Method method = class1.getMethod(methodName, paramsType);
return method.invoke(obj, args);
}
2.5静态方法staticMethod.invoke( null);
Method staticMethod = class1.getMethod("staticMethod");
staticMethod.invoke( null);
2.5使用反射给属性赋值
public static void reflectOp6() throws Exception{
//1.获取对象
Class<?> class1 = forName("d01_student.Student");
//使用反射给属性赋值
Field name = class1.getDeclaredField("name");
//访问权限失效
name.setAccessible(true);
Student stu1 = (Student) class1.newInstance();
name.set(stu1,"大明");
System.out.println(name.get(stu1));
}
- Python基本数据类型
- C++对象的赋值和复制
- C++区别于其他语言的知识点总结
- SQL连接查询(最全面)
- Java Beans
- 呐你们要的算法(一)No.17
- 使用Python生成一张用于登陆验证的字符图片
- Jupyter notebook的安装方法
- Linux学习第三十四篇:rsync通过服务同步,Linux系统日志,screen工具
- 小程序支付详解+源码(客户端+服务端)
- Python Windows下分布式进程的坑(分布式进程的一个简单例子)
- Python pdb调试
- linux学习第三十五篇:LAMP架构介绍,MySQL_MariaDB介绍,MySQL安装
- 尝试克服一下小伙伴对神经网络的恐惧No.26
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【Python】使用Pygame做一个Flappy bird小游戏(三)
- Godot游戏开发实践之三:容易被忽视的Resource
- 方便快捷的调试 Node.js 程序
- LeetCode 06Z字形变换&07整数反转
- 对搜索表单提交是否为空进行弹出提示
- PWN入门(Fastbin Attack)
- Qt项目网络聊天室设计
- nginx 端口转发
- linux通用链表
- 什么情况用ArrayList or LinkedList呢?
- Dubbo系列-扬帆起航
- 使用 Horoscope 测试 TiDB 优化器
- 聊聊claudb的importRDB
- 【17期】什么情况用ArrayList or LinkedList呢?
- YOLO V3网络结构解析