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的内部信息,包括其 ...
随机推荐
- 【计算机视觉】Selective Search for Object Recognition论文阅读3
Selective Search for Object Recoginition surgewong@gmail.com http://blog.csdn.net/surgewong 在前 ...
- 批量添加删除Windows server DNS服务 恶意域名 * A记录 指向 127.0.0.1(2019年6月5日更新)
下载链接:https://pan.baidu.com/s/1OUHyvnIfXYF0PdiT-VRyHw 密码:7gjj 注意!本解决方案在本地的Windows server服务器上把恶意域名指向1 ...
- 【牛客网】Idol Master
[牛客网]Idol Master 也是一道网络流解线性规划 不过需要从小于号的那边解 限制是\(a \leq \sum_{i = 1}^{k} x_{i}\leq b\) 其中\(0 \leq x_{ ...
- Word 查找替换高级玩法系列之 -- 制表符对齐人工目录
自己在Word中输入目录的时候是不是总也对不齐最右边的页码?这就是人工制作目录的不足之处了,但因着它能让我们更自由的发挥,所以还是得到了一些人的偏爱.那么问题来了,到底要怎么对齐这种人工目录呢? 1. ...
- Thinking In Java 4th Chap7 复用类
复用代码的两种方法:组合和继承 组合方法:(新类中产生现有类的对象) 没什么好说的,就是调用别类的对象而已 值得一提的是一个特殊方法:toString()当需要一个String却只有对象时能够自动调用 ...
- Scratch运动模块——有趣的弹球游戏(一)
大家好!我是蓝老师,有了前几期Scratch的基础,相信大家早已摩拳擦掌,跃跃欲试了,甚至还有些小伙伴已经编写了非常不错的程序. 学习编程就是这样不断探索.主动思考.解决问题的过程. 本期内容: 课程 ...
- SAS学习笔记46 宏变量的可使用范围
全局宏变量 在宏程序内部,除了使用%GLOBAL语句创建.在某些情况下,还可以直接使用DATA步中的CALL SYMPUT创建. 在一个宏程序中,在包含CALL SYMPUT的DATA步程序之前,如果 ...
- ajax回调函数,全局变量赋值后,ajax外无法获取的解决
1 ajax回调函数内,function的执行与ajax外是异步的,常导致全局变量赋值后,再次使用此变量人无法获取. 所以,可以把需要的步骤,独立放在functuon中,在ajax回调函数中执行.可较 ...
- qt翻译和国际化的探讨。
这段时间一直都在怼qt的国际化,以前也接触过国际化,但是感觉不是那么的深刻,这次是因为一个项目要做一个国际化的版本,代码里面是不能出现中文的,所以就翻译了一下.qt用的是4.8.6 64位的,IDE( ...
- 轻松搭建CAS 5.x系列(4)-Java客户端程序接入CAS单点登录,Hello World版
概述说明 按照本系列的前3篇文章描述的步骤,我们已经搭建好cas sso server.那应用程序怎么接入到实现sso呢? (如果您还没有搭建cas server,可以到<轻松搭建CAS 5.x ...