反射:
反射是 Java 的一种特性,它可以让程序在运行时获取自身的信息,并且动态地操作类或对象的属性、方法和构造器等。通过反射功能,可以让我们在不知道具体类名的情况下,依然能够实例化对象,调用方法以及设置属性。
反射的特点
反射具有以下几个特点:
动态性:反射允许程序在运行期间动态地创建对象、调用方法和修改属性。
类型检查问题:虽然反射可以使用某个类的任何方法或属性,但是编译器在编译时并不会检查这些方法或属性是否可用。
性能问题:反射的性能比直接调用方法要差。因为在使用反射时,需要先获取方法或变量的引用,然后再进行调用或访问。
安全性问题:反射破坏了封装¥,可以对私有成员进行访问和修改
源代码阶段用第一种,加载阶段用第二种,运行阶段用第三种
反射获取构造方法
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {
Class classes = Class.forName("com.itheima.temp.temp3");
Constructor[] cons = classes.getConstructors();
for (Constructor con : cons) {
System.out.println(con);
}
System.out.println();
Constructor[] con2 = classes.getDeclaredConstructors();
for (Constructor con : con2) {
System.out.println(con);
}
System.out.println();
Constructor con3 = classes.getDeclaredConstructor(int.class);
Parameter[] parameters = con3.getParameters();
for (Parameter parameter : parameters) {
System.out.println(parameter);
}
System.out.println();
Field[] fileed = classes.getDeclaredFields();
for (Field field : fileed) {
System.out.println(field);
}
}
反射获取成员变量
//获取类的字节码文件对象
Class c = Class.forName("com.itheima.temp.temp3");
//获得该对象的公共成员变量
Field[] f = c.getFields();
//遍历
for(Field fie : f){
System.out.println(fie);
}
//获取类的字节码文件对象
Class c = Class.forName("com.itheima.temp.temp3");
//获取该类的所有成员变量
Field[] f = c.getDeclaredFields();
for(Field fie : f){
System.out.println(fie);
}
//获取类的字节码文件对象
Class c = Class.forName("com.itheima.temp.temp3")
//获取单个公共的成员变量
Field f = c.getField("address");
System.out.println(f);
//获取类的字节码文件对象
Class c = Class.forName("com.itheima.temp.temp3");
//获取单个成员变量(所有类型)
Field f = c.getDeclaredField("name");
System.out.println(f);
反射获取成员方法
css样式:
<!-- 行内样式: <h1 style="color: red;">焦点访谈:中国底气 新思想夯实大国粮仓</h1> -->
<!-- 方式二:内嵌样式 -->
<style>
h1{
/* color: rgb(255,0,0); */
/* color: #ff0000; */
color: #4d4f53;
}
</style>
<!-- 方式三:外联样式 -->
<!-- <link rel="stylesheet" href="./02.new_.css"> -->
02.new_.css:
h1{
color: red;
}
标签运用:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>焦点访谈:中国底气 新思想夯实大国粮仓</title>
<!-- 方式二:内嵌样式 -->
<!-- 给所有的h1都换上字体颜色red -->
<style>
h1{
/* color: rgb(255,0,0); */
/* color: #ff0000; */
color: #4d4f53;
}
.cls{
color: #e3208b;
}
#xxx{
color: #968d92;
font-size: 13px;
}
/* id选择器优先级大于类选择器大于元素选择器 */
a{
color: black;
text-decoration: none;
}
p{
text-indent: 35px;/* 给段落首行缩进35像素 */
line-height: 40px;/* 给段落设置每行的行高 */
}
</style>
<!-- 方式三:外联样式 -->
<!-- <link rel="stylesheet" href="./02.new_.css"> -->
</head>
<body>
<img src="../imageproject/b817-ikcaceq8683059.jpg" width="200px" height="60"> <a href="http://gov.sina.com.cn" target="_self">新浪政务</a> >正文
<h1>焦点访谈:中国底气 新思想夯实大国粮仓</h1>
<!-- 行内样式: <h1 style="color: red;">焦点访谈:中国底气 新思想夯实大国粮仓</h1> -->
<hr>
<span id="xxx" class="cls">2023年03月02日21:50</span> <span><a href="https://blog.csdn.net/?spm=1001.2101.3001.4477" target="_blank">央视网</a></span>
<hr>
<!-- 正文 -->
<!-- 视频 -->
<video src="../video/这是视频.mp4" controls="controls" width="950px"></video>
<!-- 音频 -->
<audio src="../audio/这是音频.mp3" controls="controls"></audio>
</body>
</html>