黑马程序员技术交流社区

标题: [石家庄校区]java就业班错题 [打印本页]

作者: 凉笙墨染    时间: 2019-2-21 15:20
标题: [石家庄校区]java就业班错题
本帖最后由 小石姐姐 于 2019-2-21 17:10 编辑

IllegalStateException: stream has already been operated upon or closed
这个异常为stream流会报的异常,为因为看下面的程序当你执行完第一步进行下一步的时候第一步的stream流已经不能在下面再去进行遍历,因为stream流是向前进行的,即使你注释掉第四部,他也会报这个错误,你无法再去用这个流,但是你可以用链式编程,因为链式编程也是在一直向下进行.不会影响的.
package demos;
import java.util.ArrayList;
import java.util.stream.Stream;
public class Demos01 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("hah1");
        list.add("你好");
        list.add("大家好");
        Stream<String> stream = list.stream();                 1
        Stream<String> skip = stream.skip(1);                  2
       stream.forEach(s -> System.out.println(s));            3
        skip.forEach(s -> System.out.println(s));              4
    }
}
























IllegalArgumentException: object is not an instance of declaring class
抛出的异常表明向方法传递了一个不合法或不正确的参数。
package it.cast.reflect;
import it.cast.domain.Person;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.Properties;

public class ReflectDemos3 {
    public static void main(String[] args) throws Exception {
        Properties pro = new Properties();                                     1
        ClassLoader cls = ReflectDemos3.class.getClassLoader();            2
        InputStream is = cls.getResourceAsStream("pro.properties");       3
        pro.load(is);                                                              4
        String classname = pro.getProperty("className");                    5
        String methodName = pro.getProperty("methodName");                  6
        Class cls1 = Class.forName(classname);                                 7
        Constructor con = cls1.getConstructor();                               8
        Object o = con.newInstance();                                            9
        Method method = cls1.getMethod(methodName);                           10
        method.invoke(o);                                                          11
    }
}

此时这个异常主要是第十一行不对,因为开始错误的时候我没有创建对象,没有第九行,直接传递了一个con,所以报错,第十一行报错是我传递的是错误的,不是对象,所以他找不到要调用的方法.
  
第二行也一定要注意 .class之前是此类名,而不是Person类名,一定要注意,       .getClassLoader();  其实我理解的就是类加载器就好像是把路径给了is 所以他知道该去哪里照这个pro.properties这个配置文件,
还要注意第七行,这段程序,因为你classname这个的只是字符串,所以不能直接用getclass直接转换类对象方法.






Exception in thread "main" java.sql.SQLException: No suitable driver found for jdbc:mysql//127.0.0.1:3306/he
        at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:703)
        at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:229)
        at cn.itcast.jdbc.jdbcDemos.main(jdbcDemos.java:10)

这个异常为数据库的异常,我的这个异常就是你要注意,书写连接位置时,一定要注意冒号的问题,mysql后面要加上冒号.




1. DriverManager:驱动管理对象
                * 功能:
                        1. 注册驱动:告诉程序该使用哪一个数据库驱动jar
                                static void registerDriver(Driver driver) :注册与给定的驱动程序 DriverManager 。
                                写代码使用:  Class.forName("com.mysql.jdbc.Driver");
                                通过查看源码发现:在com.mysql.jdbc.Driver类中存在静态代码块
                                 static {
                                        try {
                                            java.sql.DriverManager.registerDriver(new Driver());
                                        } catch (SQLException E) {
                                            throw new RuntimeException("Can't register driver!");
                                        }
                                        }

                                注意:mysql5之后的驱动jar包可以省略注册驱动的步骤。


会注册两次这里有个静态代码块,DriverManager.registerDriver(new com.mysql.jdbc.Driver());
创建匿名对象的时候会执行一次,然后调用方法会注册一次






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2