• 2016/04/17


    package com.wode;

    import java.lang.reflect.Constructor;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    import java.util.Random;

    import javax.activation.FileDataSource;
    /***
     *
     * @author Administrator
     *Random类     Math使用方法  以及反射机制
     */
    public class Test04_16 {

     public static void main(String[] args) throws Exception {
      //Random类 表示随机产生数 
      Random random = new Random();
      System.out.println(random.nextInt());
      //random.nextInt()  括号中没有给参数  所以 随机产生int类型的数  并且范围在long中
      System.out.println(random.nextInt(10));
      //random.nextInt(10) 表示 随机产生int类型的0-9 十个数字  他是前包后不包
      //如果想随机到十  那么代码就应该是:System.out.println(random.nextInt(10)+1);

    //---------------------------------------萌萌的分割线君-------------------------------------------------------
      
      //Math  的使用方法
      //Math类  是一个数学工具类 在Java语言中  常用的方法都在里面  可以通过 Math.方法名()  进行调用
      System.out.println(Math.abs(-50));//运行结果 : 50
      //Math.abs  表示输出()中数字的绝对值 
      System.out.println(Math.max(5, -9));//运行结果: 5
      //Math.max  输出()中最大的值 
      System.out.println(Math.min(5, -9));//运行结果: -9
      //Math.min   输出()中最小的值
      System.out.println(Math.round(5.4));//运行结果: 5
      //Math.round  输出()中四舍五入后的值
      System.out.println(Math.floor(-8.1));// 运行结果: -9.0
      //Math.floor   输出()中最大接近于正无穷的数  也就是向下取整   如果是()中是9.9 返回的值为9 这就是向下取整
      System.out.println(Math.ceil(-8.9));//运行结果:  -8.0
      //Math.ceil  表示向上取整  如果()中是8.1  返回值是9.0 这就是向上取整
      System.out.println(Math.random());
      //Math.random  随机产生 0-1 之间的随机值  有可能产生0 几率很小 注意()中不能填入参数  
      //如果想随机0-10 之间的数    代码为:System.out.println(Math.random()*10);

    //---------------------------------------萌萌的分割线君-------------------------------------------------------
      
      //类加载机制由类加载器完成    反射:Java的反射机制是Java的特征之一
      //简单的一句话:反射就是运行时探究和使用编译未知的类
      
      Dog dog = new Dog();
      Class clazz = dog.getClass();//表示获得class的具体实例   前提是知道有具体的实例  就可以使用getClass()
      System.out.println(clazz);//运行结果:  class com.wode.Dog 能知道他来自那个类  以及具体的地方
      Class clazz1 = Dog.class;//知道类的名字  但是没有实例对象
      Class clazz2 = Class.forName("com.wode.Dog");//运行期间动态传入 在不知道实例以及类的名字的时候使用
      // Class.forName   会有可能产生异常   为了代码好看我将异常抛出  并且抛出的Exception  所有异常的父类  以便后面有异常的时候再次抛出异常
      
      //Filed  类  :提供类或者接口所有的属性信息  即使是私有的也能获得
      Field [] fields = clazz2.getDeclaredFields();//获得Dog 所有属性并且用数组储存
      for (int i = 0; i < fields.length; i++) {//使用循环的方法打印 出Dog类中所有的属性
       System.out.println(fields[i]);
      }
      //Filed 获得了Dog 中所有的属性 那么怎么样修改?
      for(Field field:fields){//循环出 所有的属性
       if (field.getName().equals("age")) {//找到age属性并且修改  如果想修改name属性 一定会报错  因为name属性是受保护的只能看到而不能修改
        field.set(dog, 8);
        System.out.println(dog.age);
       }
      }
      
      //Method类:  获取Dog 里面的方法 
      Method [] methods = clazz.getDeclaredMethods();
      //通过getDeclaredMethods 来获得Dog里的所有方法  并且用for 循环输出
      for (int i = 0; i < methods.length; i++) {
       System.out.println(methods[i]);
      }
      //获得方法后 又怎么样去调用方法?          
      Method method = clazz.getMethod("show",String.class );
      //使用   getMethod  来调用方法
      method.invoke(dog, "啊汪");
      //然后使用   method.invoke 来使用方法 括号里分别是实例化的对象 和需要修改的属性
      
      //Constructor 类 :获得Dog里的构造函数
      Constructor constructor = clazz.getDeclaredConstructor(null);//使用 getDeclaredConstructor 来获取Dog里的无参构造函数
      constructor.newInstance(null);//调用无参的构造函数
      Constructor constructor2 = clazz.getConstructor(int.class,String.class);
      constructor2.newInstance(5,"有参");//调用有参构造函数
      //Object o = clazz.newInstance();  //使用Object 实例化对象  因为Object 是父类 所有不会有强转
      //Dog dog2 = (Dog) clazz.newInstance();//使用newInstauce 实例化对象  这里是向下转型所以会涉及到强转
      //newInstauce 也能实例化对象,通过调用构造函数来实例化对象 并且Class.Constructor 都提供了newInstauce方法
      //new:是强类型 相对高效 能调用任何类public类
      //newInstauce :是弱类型  效率低 只能调用构造函数
     }
    }

    package com.wode;
    /***
     *
     * @author Administrator
     *创建  一个狗类
     */
    public class Dog {

      private String name;//private 私有的  封装的思想
     int age;
     public void show(String name) {
      System.out.println(name+":汪汪汪"+" "+"我:"+age+"岁");
     }
     //下面提供相应的get和set 方法
     public String getName() {
      return name;
     }
     public void setName(String name) {
      this.name = name;
     }
     public Dog() {
      System.out.println("无参构造函数!");
     }
     
     public Dog(int age,String neme){
      super();
      this.age = age;
      this.name = neme;
      System.out.println("有参构造函数!");
     }
    }

  • 相关阅读:
    当统计信息不准确时,CBO可能产生错误的执行计划,并在10053 trace中找到CBO出错的位置示例
    ruby class_eval的使用
    ruby修改TXT文件
    ruby格式化
    VIM常用命令集合
    Watir::IE.attach与IE7选项卡的设置关系
    ruby 连接mysql数据库
    AutoIT删除Internet临时文件
    watir学习之—如何遍历页面所有的超链接
    watir如何取到元素的css属性
  • 原文地址:https://www.cnblogs.com/chenyangpeng/p/5401153.html
Copyright © 2020-2023  润新知