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的内部信息,包括其 ...
随机推荐
- [bzoj4368][IOI2015]boxes纪念品盒_动态规划_单调队列_贪心
bzoj4368 IOI2015 boxes纪念品盒 题目链接:https://lydsy.com/JudgeOnline/problem.php?id=4368 数据范围:略. 题解: 如果在一个最 ...
- [转帖]Linux TCP/IP协议栈,数据发送接收流程,TCP协议特点
Linux TCP/IP协议栈,数据发送接收流程,TCP协议特点 http://network.51cto.com/art/201909/603780.htm 可以毫不夸张的说现如今的互联网是基于TC ...
- Spring boot+Websocket实例1
简单的demo https://github.com/callicoder/spring-boot-websocket-chat-demo
- K8S从入门到放弃系列-(1)环境初始化
一.系统规划 主机名 IP 组件 k8s-master01 10.10.0.18 etcd.kube-apiserver.kube-controller-manager.kube-schedu ...
- java读写cookie中文乱码解决方法
1.写入的时候: public boolean addCookie( HttpServletRequest req, HttpServletResponse resp){ //创建 Cookie co ...
- PAT甲级 二叉查找树 相关题_C++题解
二叉查找树 PAT (Advanced Level) Practice 二叉查找树 相关题 目录 <算法笔记> 重点摘要 1099 Build A Binary Search Tree ( ...
- 排查java 内存CPU报警
#!/bin/bash source /etc/profile #接收外部传入PID,任选一种 #servicePid=$1 headPid=`ps auxw|sort -rn -k3|head -4 ...
- 串口(USART)通信-串口通讯协议简介
物理层:规定通讯系统中具有机械.电子功能部分的特性,确保原始数据在物理媒体的传输.其实就是硬件部分. 协议层:协议层主要规定通讯逻辑,统一收发双方的数据打包.解包标准.其实就是软件部分. 简单来说物理 ...
- shell习题第22题:
[题目要求] 加入A服务器可直接ssh到B,不用输入密码.A和B都有一个目录是/data/web/这下有很多文件,我们不知道这下面有多少层目录,但是之前的目录结构和文件是一模一样的.但是现在不确定是否 ...
- IDEA报错: Clone failed: Authentication failed for 'http://10.70.XXXXXXXXXXXXXXXXX'
今天从git上导入公司的项目,总是报错Clone failed: Authentication failed for 'http://10.70.XXXXXXXXXXXXXX' 在网上百度了一下,大致 ...