java class 生成对象_Java反射机制(创建Class对象的三种方式)
1:SUN提供的反射机制的类:
java.lang.Class
java.lang.reflect.Constructor
java.lang.reflect.Field
java.lang.reflect.Method
java.lang.reflect.Modifier
2:什么是反射
JAVA反射机制是在运行状态中,对于任意一个类。都能都知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称之为java语言的反射机制;
3:反射的作用
反编译 .class --à .java
通过反射机制可以访问java对象中的属性,方法,构造方法
4:创建Class对象的三种方式
JavaBean:
public class Person implements China{
private String name;
private int age ;
private char sex ;
public Person() {
super ();
}
public Person(String name, int age, char sex) {
super ();
this .name = name;
this .age = age;
this .sex = sex;
}
public String getName() {
return name ;
}
public void setName(String name) {
this .name = name;
}
public int getAge() {
return age ;
}
public void setAge(int age) {
this .age = age;
}
public char getSex() {
return sex ;
}
public void setSex(char sex) {
this .sex = sex;
}
public void eat()
{
System. out .println("吃了" );
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", sex=" + sex + "]" ;
}
@Override
public void sayChina() {
// TODO Auto-generated method stub
System. out .println("作者:" + AUTHOR + "国籍:"+ NATIONAL );
}
@Override
public String sayHello(String name, int age, char sex) {
// TODO Auto-generated method stub
return "姓名:" + name + "年龄:"+ age + "性别:" + sex;
}
}
1 public class ClassDemo02 {
2
3 public static void main(String[] args) {
4 Person p1 = new Person("小明" ,20,'男' );
5 Person p2 = new Person("小红" ,23,'女' );
6
7 //创建Class对象的方式一:(对象.getClass()),获取person类中的字节码文件
8 Class class1 = p1.getClass();
9 System. out.println(p1.getClass().getName());
10 Class class2 = p2.getClass();
11 System. out.println(class1 == class2 );
12
13 System. out.println("==============================" );
14 //创建Class对象的方式二:(类.class:需要输入一个明确的类,任意一个类型都有一个静态的class属性)
15 Class class3 = Person.class;
16 System. out.println(class1 == class2);
17
18 System. out.println("==============================" );
19 //创建Class对象的方式三:(forName():传入时只需要以字符串的方式传入即可)
20 //通过Class类的一个forName(String className)静态方法返回一个Class对象,className必须是全路径名称;
21 //Class.forName()有异常:ClassNotFoundException
22
23 Class class4 = null;
24 try {
25 class4 = Class.forName("cn.itcast.Person");
26 } catch (ClassNotFoundException e) {
27 // TODO Auto-generated catch block
28 e.printStackTrace();
29 }
30 System. out.println(class4 == class3);
31 }
32 }
注意:在开发中一般使用第三种方法,因为第三种接收的是一个字符串路径,将来可以通过配置文件获取,通用性好;
4:newInstance()方法 ---> 获取class类型之后,可以创建该类型的对象
public T newInstance()throws InstantiationException,IllegalAccessException
1 public class reflect03 {
2
3 public static void main(String[] args) throws Exception {
4
5 Class c1 = Class.forName("com.itheima04.Test_20171106.Test_20171207.Person");
6
7 //创建此Class对象所表示类的一个新实例,
8 //newInstance方法调用的是Person的空参数构造方法
9 Object o = c1.newInstance();
10 System.out.println(o.toString());
11 }
java class 生成对象_Java反射机制(创建Class对象的三种方式)相关推荐
- 利用反射机制创建新类的两种方式及比较
[0]README 0.1) 本文描述+源代码均 转自 http://blog.csdn.net/fenglibing/article/details/4531033 , 旨在深入理解 如何利用反射机 ...
- Java 创建一个线程的三种方式
Java 创建一个线程的三种方式 更多内容,点击了解: https://how2j.cn/k/thread/thread-start/353.html 创建多线程有3种方式,分别是继承线程类,实现Ru ...
- 创建线程的第三种方式---JDK8新特性
创建线程的第三种方式-JDK8新特性 实现Callable接口,创建线程 Runnable和Callable接口的不同 1.Callable可以返回一个类型V,而Runnable不可以,也就是说Cal ...
- 创建线程的第三种方式:实现Callable接口(含部分源码解析)
创建线程的第三种方式--实现Callable接口 package com.lqy.Multithreading; import java.util.concurrent.Callable; impor ...
- 创建CSS样式的三种方式
CSS基础 - 创建CSS样式的三种方式 我们使用CSS的时候,常规有三种创建CSS样式的的方式: 内联样式,内部样式表,外部样式表 1.内联样式 (不常用) style在标签中的情况就是内联样式.不 ...
- 如何从零开始创建React项目(三种方式)
在开发 React 项目前最关键的当然是项目的创建,现在的前端工程化使得前端项目的创建也变得越来越复杂,在这里介绍三种从零开始创建 React 项目的方式,分别是 "在浏览器中直接引入&qu ...
- java创建线程池几种方式_java知识总结-创建线程池的6种方式
一.创建线程池的6种方式: Executors.newCachedThreadPool(); 创建一个可缓存线程池,应用中存在的线程数可以无限大 Executors.newFixedThreadPoo ...
- 多线程系列教材 (一)- Java 创建一个线程的三种方式
多线程即在同一时间,可以做多件事情. 创建多线程有3种方式,分别是继承线程类,实现Runnable接口,匿名类 步骤1:线程概念 步骤2:创建多线程-继承线程类 步骤3:创建多线程-实现Runnabl ...
- 面试题,反射创建类实例的三种方式是什么
1.获得Class:主要有三种方法: (1)Object-->getClass (2)任何数据类型(包括基本的数据类型)都有一个"静态"的class属性 (3)通过class ...
最新文章
- strace 分析mysql 内存占用_关于mysql cluster适用场景的分析
- 【Linux】一步一步学Linux——tcpdump命令(185)
- python中列表和集合的区别_python中列表和集合有什么区别
- 为什么到最后还是要 专注于博客写作
- Delphi XE中String、ANSIString、TBytes之间的转换
- 拷贝data/data/包名/files文件记下所有文件及文件夹到本地sdcard根目录teddyData_files文件夹下...
- SDUT_2012省赛选拔赛2 部分题目
- Java标识符、关键字、运算符
- 各种好看的cosplay小姐姐热门图片,统统爬取收藏
- 知识追踪之动态键值对记忆网络 Dynamic Key-Value Memory Networks for Knowledge Tracing
- Python CSV Reader/Writer
- 警惕!Python 中少为人知的 10 个安全陷阱!
- 计算机入门模拟卷A(有详细答案),《计算机入门》模拟卷C答案-华东师范大学
- RouterOS搭建一台SSTP Server用于远程办公
- 元计算java_java 二元计算
- ubunut安装teamview
- 关于短信验证码报错和解决问题
- 百度地图自定义覆盖物工具栏,修改标识图标
- 聚焦绿色发展新赛道—MapGIS智慧环保解决方案发布
- 神舟III号 串口2发送实验程序
热门文章
- WEB文档在线预览解决方案
- 解决:夜神模拟器连不上adb的问题
- Android项目中出现的Plugin with id ‘kotlin-android‘ not found解决方法
- 纯前端下载pdf链接文件,而不是打开预览的解决方案
- jQuery.click()与onClick
- 什么是(功能)反应式编程?
- PM2 进程管理工具使用总结
- jmeter使用beanshell构造参数化
- Android - TextureView, SurfaceView和GLSurfaceView 以及 SurfaceTexture
- nohup和的区别与关系