Java基础 反射的基础应用和Class笔记
笔记:
/**直接 throws Exception,完美包含全部异常!
* ---------------------------
* Class:
* 首先创建一个类, 接着编译程序: javac(exe) file.java,生成.class文件,
* 之后执行程序: java(exe) file ,将此.class文件加载到内存中,就是一个运行时类,存在缓存区;
* 每一个运行时类只能加载一次!
* ------------------------
* 反射:
* 有了反射,可以通过反射创建一个类的对象,并调用其中的结构:
* //0.声明Person的class类
* //1.创建clazz对应的运行时类Person 类的对象//newInstance()表示新建一个对象
* // 2.通过反射调用运行时类的指定的属性
* 2.1调用公用属性 getField()
* 2.2调用任意属性 getField(),setAccessible(true)设置可更改,然后再set()具体值
* //3.通过反射调用运行时类的指定方法:invoke(p,...)
* ---------------------
*
*/
测试代码:
import org.junit.Test;
import java.lang.reflect.*;
import java.lang.reflect.Method; public class Test1 {
@Test
public void test3() throws Exception{
Person p=new Person();
Class clazz=p.getClass(); //通过运行时类的对象,调用其getClass()
System.out.println(clazz);
} //有了反射,可以通过反射创建一个类的对象,并调用其中的结构
@Test
public void test2() throws Exception {
//0.声明Person的class类
Class clazz = Person.class;
//1.创建clazz对应的运行时类Person 类的对象
Person p = (Person) clazz.newInstance(); //newInstance()表示新建一个对象
System.out.println(p); //Person{age=0, name='null'}
// 2.通过反射调用运行时类的指定的属性
//2.1调用公用属性 getField()
Field f1 = clazz.getField("name");
f1.set(p, "LiuDeHua");
System.out.println(p); //Person{age=0, name='LiuDeHua'}
//2.2调用任意属性 getField(),setAccessible(true)设置可更改,然后再set()具体值
Field f2 = clazz.getDeclaredField("age");
f2.setAccessible(true);
f2.set(p, 2000);
System.out.println(p); //Person{age=2000, name='LiuDeHua'} //3.通过反射调用运行时类的指定方法:invoke(p,...)
Method m1=clazz.getMethod("show");
m1.invoke(p); //空参数
Method m2=clazz.getMethod("display",String.class);
m2.invoke(p,"CHINA"); //有参数参数
}
@Test//在有反射以前,如何创建一个类的对象,并调用其中的方法/属性
public void test1(){
Person p=new Person();
p.setAge(10);
p.setName("TangWei");
System.out.println(p);
p.show();
p.display("HK");
} } class Person extends Creature<String> implements Comparable,MyInterface {
private int age;
public String name; public Person() {
}
public void show(){
System.out.println(this.getClass().getName()+"我是一个人类!");
}
public void display(String s){
System.out.print("我的国籍是:"+s);
}
public Person(int age, String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} @Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
'}';
} @Override
public int compareTo(Object o) {
return 0;
}
}
输出结果:
Person{age=10, name='TangWei'}
任务222_反射.Person我是一个人类!
我的国籍是:HKPerson{age=0, name='null'}
Person{age=0, name='LiuDeHua'}
Person{age=2000, name='LiuDeHua'}
任务222_反射.Person我是一个人类!
我的国籍是:CHINAclass 任务222_反射.Person
Java基础 反射的基础应用和Class笔记的更多相关文章
- JAVA反射机制基础概念
反射机制:所谓的反射机制就是java语言在运行时拥有一项自观的能力.通过这种能力可以彻底的了解自身的情况为下一步的动作做准备.下面具体介绍一下java的反射机制.这里你将颠覆原来对java的理解. J ...
- Java基础-反射(reflect)技术详解
Java基础-反射(reflect)技术详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.类加载器 1>.JVM 类加载机制 如下图所示,JVM类加载机制分为五个部分 ...
- Java 高级基础——反射
Java 高级基础--反射 反射的意义:Java 强类型语言,但是我们在运行时有了解.修改信息的需求,包括类信息.成员信息以及数组信息. 基本类型与引用类型 基本类型,(固定的 8 种) 整数:byt ...
- Java基础—反射(转载)
转载自: JAVA反射与注解 JAVA反射 主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义. 反射机制是什么 反射 ...
- java基础——反射机制
反射机制是什么 反射机制就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为jav ...
- java Reflection(反射)基础知识讲解
原文链接:小ben马的java Reflection(反射)基础知识讲解 1.获取Class对象的方式 1.1)使用 "Class#forName" public static C ...
- Java的反射基础技术
今天本人给大家讲解一下Java的反射基础技术,如有不对的或者讲的不好的可以多多提出,我会进行相应的更改,先提前感谢提出意见的各位了!!! 什么是反射? 反射它是根据字节码文件可以反射出类的信息.字段. ...
- [java 基础]反射入门
原文 概况 使用java的反射,可以让我们检查(或者修改)类,接口,字段,方法的特性.当你在编译期不知道他们的名字的时候非常有用. 除此之外,可以使用反射来创建实例,调用方法或者get/set 字段值 ...
- JAVA基础-反射机制
什么是JAVA的反射机制 Java反射是Java被视为动态(或准动态)语言的一个关键性质.这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其 ...
随机推荐
- 如何实现批量截取整个网页完整长截图,批量将网页保存成图片web2pic/webshot/screencapture/html2picture
如何实现批量截取整个网页完整长截图,批量将网页保存成图片web2pic/webshot/screencapture [困扰?疑问?]: 您是否正受到:如何将网页保存为图片的困扰?网页很高很长截图截不全 ...
- Linux系统终端常用配置文件更改
目录列表: 1.alias别名永久保存 2.解决vim文件没有颜色的问题 3.vim插件supertap插件安装(可支持自动补全,非函数代码补全,仅支持在当前编辑文档内补全) 4.vim插件管理 5. ...
- 2019年12月4日 Linux总结
System V init运行级别 systemd目标名称 作用 0 runlevel0.target,poweroff.target 关机 1 runlevel1.target,poweroff.t ...
- Cassandra的安装
1.上传安装包到node01 cd /export/softwares 2.解压 tar -zxvf apache-cassandra-3.11.5-bin.tar.gz -C ../servers ...
- 微信小程序的网络重试机制
最近在开发微信小程序, 在测试时, 总能碰到一些诸如网络被打断啊之类的问题. 小程序是一款实时互动的小程序, 基于一系列原因, 没有使用Socket, 而是使用的是长链接. 所以对这类问题不能大意啊, ...
- ORA-01078: failure in processing system parameters LRM-00109: could not open parameter file '/u01/app/oracle/product/19.2.0/db_1/dbs/initsanshi.ora'报错
本人是在Linux安装Oracle19C之后,启动数据库时,XSHELL命令行窗口报的该错误,看了几个解决方案之后,总结如下 从字面的意思来看,是在dbs目录当中没有这个initsanshi.ora文 ...
- 图数据库neo4j添加算法包
1. 从https://github.com/neo4j-contrib/neo4j-graph-algorithms/releases下载相应版本jar包,放到 C:\Users\Administr ...
- Kubernetes对Pod调度指定Node以及Node的Taint 和 Toleration
由于博客园不支持markdown,推荐以下url阅读: 原创url:https://blog.csdn.net/weixin_42495873/article/details/103364868 ## ...
- python并发编程之IO模型(实践篇)
一.阻塞IO 介绍略(请看概念篇) 二.非阻塞IO 在非阻塞式IO中,用户进程需要不断的主动询问kernel数据准备好了没有 # 服务端 import socket import time serve ...
- I2C初始化结构体详解
typedef struct { uint32_t I2C_ClockSpeed; /*设置SCL时钟频,此值不低于40000*/ uint16_t I2C_Mode; /* 指定工作模式,可选I2C ...