笔记:

/**直接 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笔记的更多相关文章

  1. JAVA反射机制基础概念

    反射机制:所谓的反射机制就是java语言在运行时拥有一项自观的能力.通过这种能力可以彻底的了解自身的情况为下一步的动作做准备.下面具体介绍一下java的反射机制.这里你将颠覆原来对java的理解. J ...

  2. Java基础-反射(reflect)技术详解

    Java基础-反射(reflect)技术详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.类加载器 1>.JVM 类加载机制  如下图所示,JVM类加载机制分为五个部分 ...

  3. Java 高级基础——反射

    Java 高级基础--反射 反射的意义:Java 强类型语言,但是我们在运行时有了解.修改信息的需求,包括类信息.成员信息以及数组信息. 基本类型与引用类型 基本类型,(固定的 8 种) 整数:byt ...

  4. Java基础—反射(转载)

    转载自: JAVA反射与注解 JAVA反射 主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义. 反射机制是什么 反射 ...

  5. java基础——反射机制

    反射机制是什么 反射机制就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为jav ...

  6. java Reflection(反射)基础知识讲解

    原文链接:小ben马的java Reflection(反射)基础知识讲解 1.获取Class对象的方式 1.1)使用 "Class#forName" public static C ...

  7. Java的反射基础技术

    今天本人给大家讲解一下Java的反射基础技术,如有不对的或者讲的不好的可以多多提出,我会进行相应的更改,先提前感谢提出意见的各位了!!! 什么是反射? 反射它是根据字节码文件可以反射出类的信息.字段. ...

  8. [java 基础]反射入门

    原文 概况 使用java的反射,可以让我们检查(或者修改)类,接口,字段,方法的特性.当你在编译期不知道他们的名字的时候非常有用. 除此之外,可以使用反射来创建实例,调用方法或者get/set 字段值 ...

  9. JAVA基础-反射机制

    什么是JAVA的反射机制 Java反射是Java被视为动态(或准动态)语言的一个关键性质.这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其 ...

随机推荐

  1. 设置主机防火墙规则(iptables规则设置及其与firewalld的生死纠葛)

    一.什么是firewalld防火墙? firewalld防火墙在Linux主机里其实就是一道隔离工具,它只对进出主机的请求做判断处理.也就是说它只管进出,至于你进来后做了什么,就不在firewalld ...

  2. golang web框架 beego 学习 (七)json转数组

    Modules type User struct { Id int64 `json:"id"` Name string `json:"name"` Email ...

  3. mysql 1366错误

  4. jquery换一批的写法

    jquery换一批的写法 <pre> <img src="{$yuming}/images/3/huanyipi.png" alt="" cu ...

  5. Django与JS交互的示例代码-django js 获取 python 字典-Django 前后台的数据传递

    Django与JS交互的示例代码 Django 前后台的数据传递 https://www.cnblogs.com/xibuhaohao/p/10192052.html 应用一:有时候我们想把一个 li ...

  6. [DEBUG] ubuntu pip安装成功却无法import

    我的pip经常出问题,我也不知道为啥..今天搞啥啥坏=.= 问题: pip自动安装显示成功,在交互环境下却无法import ==========================踩坑========== ...

  7. 1.ASP.NET Core Docker学习-Docker介绍与目录

    Docker的优点: 1节约时间,快速部署和启动 2节约成本 3标准化应用发布 4方便做持续集成 5可以用Docker做为集群中的轻量主机或节点 6方便构建基于SOA或者微服务架构 的系统 学习目录: ...

  8. Kubernetes 学习笔记(五):数据卷

    "数据卷"通常和"有状态"这个词同时出现,卷用于给有状态应用保存/共享状态. 常用的数据卷类型 1. emptyDir: 用于存储临时数据的空目录 emptyD ...

  9. nacos搭建

    1.下载执行包 直接官网 https://nacos.io/zh-cn/docs/quick-start.html 2. 建表 3. 启动 http://10.0.0.113:8848/nacos/i ...

  10. 怎样通过混入(Mixin)实现多继承

    js不提供现成的多重继承的方法, 但可以通过Object.assign()来手动实现: function Father1(name){ this.name = name; } function Fat ...