会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132431个问题

image.png
为啥 我这反射0,普通方法252- -,不是反射比普通方法运行慢吗

package com.a.cx;

import java.lang.reflect.Method;

/**
 * 测试反射机制的效率
 */
public class TestReflectDemo2 {
    public static void main(String[] args) {
        try {
            //反射耗时
            Class clazz = Class.forName("com.a.cx.Users");
            //newInstance() 返回的是Object类型的结果,这里强制类型转换为Users类型
            Users users = (Users)clazz.newInstance();
            long reflectStart = System.currentTimeMillis();
            Method method = clazz.getMethod("setUsername", String.class);
            for (int i=0;i<100000000;i++){
                method.invoke(users,"李二狗");
            }
            long refectEnd = System.currentTimeMillis();

            //非反射方式耗时
            long start = System.currentTimeMillis();
            Users u = new Users();
            for (int i=0;i<100000000;i++){
                u.setUsername("oldlu");
            }
            long end = System.currentTimeMillis();
            System.out.println("反射执行时时间:"+(refectEnd-refectEnd));
            System.out.println("非反射执行时时间:"+(end-start));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


JAVA 全系列/第二阶段:JAVA 基础深化和提高/反射技术(旧) 2851楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 2852楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/函数式编程 2853楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/IO 流技术(旧) 2854楼

package com.bjsxt;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class ObjectStreamObjectTypeDemo {


    public void ObjectOutputStreamObjectTypeDem(List<Person> list) {
        ObjectOutputStream oos = null;
        List<Person> list1 = new ArrayList<>();
        try {
            oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("J:\\课堂练习\\课程目录\\01.02JAVA入门与深化提高\\智能电话本项目实战\\电话簿.txt")));
            for (int i = 0; i < list.size(); i++) {
                list1.add(list.get(i));
            }
            oos.writeObject(list1);
            oos.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (oos != null) {
                    oos.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public List<Person> ObjectInputStreamObjectTypeDemo(List<Person> list) {
        ObjectInputStream ois = null;
        List<Person> ls = null;
        try {
            ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream("J:\\课堂练习\\课程目录\\01.02JAVA入门与深化提高\\智能电话本项目实战\\电话簿.txt")));
            ls = (List<Person>) ois.readObject();
            for(int i = 0;i<ls.size();i++){
                list.add(ls.get(i));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (ois != null) {
                    ois.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return list;
    }
}

老师的课堂作业,我写了一个类,然后在Operate 类中加了两个方法,一个是在退出时调用类下的方法 将list 遍历到自定义的数组然后将数组序列化到本地文件,

public void exit(){
    ObjectStreamObjectTypeDemo os = new ObjectStreamObjectTypeDemo();
    os.ObjectOutputStreamObjectTypeDem(this.list);
    System.exit(0);;
}

一个是初始化,运行项目时就调用类下的方法将文件的内容读到自定义数组 然后遍历给list,

/**
 * 传入电话薄
 */
public void Initialize(){
    ObjectStreamObjectTypeDemo os = new ObjectStreamObjectTypeDemo();
    os.ObjectInputStreamObjectTypeDemo(this.list);
}

image.png

不知道对不对,功能可以实现。就是我给的都是绝度路径,不知道怎么设定为相对路径,不知道制作成Jar包,能不能用

JAVA 全系列/第二阶段:JAVA 基础深化和提高/IO 流技术(旧) 2855楼

问题:子为父买烟案例中

            控制台输出,有没有可能“儿子出门买烟”在“爸爸等待儿子买烟回                  来”之前。

            运行好几次,都是之后(就跟课堂上一样),但个人感觉,在前这种                可能也是有的哇,求解惑

public class JoinDemo {
    public static void main(String[] args) {
        System.out.println("爸爸和儿子买烟的故事");
        Thread t = new Thread(new FatherThread());
        t.start();
    }
}
/**
 * 儿子买烟线程
 */
class SonThread implements Runnable{
    @Override
    public void run() {
        System.out.println("儿子出门买烟");
        System.out.println("儿子买烟需要10分钟");
        for (int i=1; i<11; i++){
            System.out.println("第"+i+"分钟");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println("儿子买烟回来了");
    }
}

/**
 * 爸爸抽烟线程
 */
class FatherThread implements Runnable{
    @Override
    public void run() {
        System.out.println("爸爸想抽烟,发现烟抽完了");
        System.out.println("爸爸让儿子去买一包红塔山");
        Thread t = new Thread(new SonThread());
        t.start();
        System.out.println("等待儿子买烟回来");
        try {
            t.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
            System.out.println("爸爸出门找儿子");
            System.exit(1);
        }
        System.out.println("爸爸高兴的接过烟,并把零钱给了儿子");
    }
}

捕获.JPG

JAVA 全系列/第二阶段:JAVA 基础深化和提高/多线程技术(旧) 2859楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 2863楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/多线程和并发编程(旧) 2864楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 2865楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637