反射及数学运算符类


1.API(接上篇): 数学运算符类(random 随机类)
产生随机数,前包后不包
Math类—基本数学运算方法:
(1)abs() 返回绝对值
(2)Math.max(a,b) 比较a,b值大小,输出较大的值
(3)Math.min(a,b) 比较a,b值大小,输出较小的值
(4)round() 四舍五入
(5)floor 向下取整
(6)ceil() 向上取整
(7)random() 返回0到1之间的小数
2.反射:(类的加载机制 Classloder)
运行时探究和使用编译时未知的类
反射就是操作Class类
第一种方式:
Dog d=new Dog();
Class d2=d.getClass(); //具体实例获得Class
第二种方式:
Class d3=Dog.Class(); //知道类的名字,但是没有实例对象
第三种方式:
Class d4=Class.forName("包名.类名"); //运行期动态传入
探究类的基本信息:1.Filed类:getDeclaredFiled //获取属性
2.Method类:getDeclaredMethod //获取方法
3.Constructor类:getDeclaredConstructor //获取构造函数
Filed:Field[] fields= d4.getDeclaredFields();//获取所有的属性
例如: //获取Dog类的属性1并且修改
/*Class d3=Class.forName("RandonTest.Dog");
Dog d=(Dog) d3.newInstance(); //用Instance的方法实例化一个对象
//Dog d2=new Dog(); //直接用new的方法实例化对象
Field[] fields= d3.getDeclaredFields();//获取所有的属性
for(Field field:fields){
if(field.getName().equals("age")){
field.set(d, "100");
}

}*/

————————————————————————————

package RandonTest;

public class Dog {
int age=20;
String name="wangwanghao ";
public void speaking(int s){
System.out.println("hello"+" "+name);
}

public void saying(){
System.out.println("hello,say"+age);
}

————————————————————————————

//获取Dog类的方法
Class d2=Class.forName("RandonTest.Dog");
Method[] methods=d2.getMethods();
for(Method method:methods){
//System.out.println(method);
//System.out.println(method.getReturnType());
//System.out.println(method.getParameterTypes());
}
Dog d1=(Dog) d2.newInstance();

Method method=d2.getMethod("speaking", int.class);
//method.invoke(d1, 6);

原文地址:https://www.cnblogs.com/czg-123/p/5397222.html