Java 周测题目

2018-06-28 周测题

Java 基础编程部分

  1. 什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?

    Java虚拟机是执行字节码文件(.class)的虚拟机进程。java源程序(.java)被编译器编译成字节码文件(.class)。然后字节码文件,将由java虚拟机,解释成机器码(不同平台的机器码不同)。利用机器码操作硬件和操作系统。
    因为不同的平台装有不同的JVM,它们能够将相同的.class文件,解释成不同平台所需要的机器码。正是因为有JVM的存在,java被称为平台无关的编程语言。

  2. JAVA支持的数据类型有哪些?什么是自动拆装箱?

    1)8种基本数据类型:byte short char boolean int longfloat double
    2)引用类型,包括类、接口、数组
    自动拆装箱,是指基本数据类型和引用数据类型之间的自动转换,如Integer 和 int 可以自动转换; Float和float可以自动转换

  3. 简述方法中的参数传递的原理?(提示:值传递和引用传递)

    值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。
    引用传递:(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。

  4. 简述抽象类和接口的区别?

    (1) 接口只能包含抽象方法,抽象类可以包含普通方法。
    (2) 接口只能定义静态常量属性,抽象类既可以定义普通属性,也可以定义静态常量属性。
    (3) 接口不包含构造方法,抽象类里可以包含构造方法。
    (4) 抽象类不能被实例化,但不代表它不可以有构造函数,抽象类可以有构造函数,被继承类扩充
    (5) 接口是核心,其定义了要做的事情,包含了许多的方法,但没有定义这些方法应该如何做。
    (6) 如果许多类实现了某个接口,那么每个都要用代码实现那些方法
    (7) 如果某一些类的实现有共通之处,则可以抽象出来一个抽象类,让抽象类实现接口的公用的代码,而那些个性化的方法可以由各个子类去实现。

  5. 定义一个完整的Student类,包含字段code,name,age,类成员包括:成员变量,getter,setter,多字段的构造器,重写toString方法。

    class  Demo {
    
     public static void main(String[] args) {
    
                 Student  s =  new  Student("张三", 22, 95);
    
        }
    
    }
    
    
    
    class   Student {
    
     //私有成员变量。
    
     private String name ;
    
     private int  age;
    
     private int  code;
    
     //提供 name,age, score 的 set,get方法。
    
     public String getName() {
    
      return name;
    
     }
    
     public void setName(String name) {
    
      this.name = name;
    
     }
    
     public int getAge() {
    
      return age;
    
     }
    
     public void setAge(int age) {
    
      this.age = age;
    
     }
    
     public int getCode() {
    
      return score;
    
     }
    
     public void setCode(int code) {
    
      this.score = score;
    
     }
    
    
    
     //构造函数。
    
     public Student(String name,  int age,   int score){
    
      this.age = age;
    
      this.name = name ;
    
      this.score = score;
    
      System.out.println("姓名:"+getName()+","+"年龄:"+ getAge() + ","+"分数:"+getScore());
    
     }
    
    @Override
    
             public String toString() {
    
                      return "Student[code=" + code + ", name=" + name + ", age=" + age +"]";
    
             }
    
    }
  6. Java集合类框架的基本接口有哪些?并阐述他们的基本特征。

    >  Java集合类里面最基本的接口有:
    > Collection:代表一组对象,每一个对象都是它的子元素。
    > Set:不包含重复元素,。
    > List:有顺序的集合,并且可以包含重复元素,其中含有arraylist和linkedlist。
    > Map:可以把键(key)映射到值(value)的对象,键不能重复。
    
  7. 写一个mian方法,使用全字段的构造器创建5个Student对象,并放入到一个集合中(list)中,使用迭代器遍历List,并删除一个符合条件code值的对象。

    public class Client {
    
             public static voidmain(String[] args) {
    
                      Student pxj =new Student("彭贤君", "001");
    
                      Student hjn =new Student("黄佳男", "002");
    
                      Student zsf =new Student("张三丰", "004");
    
                      Student zwj =new Student("张无忌", "005");
    
    
    
                      Clazz j103 =new Clazz();
    
                      j96.setName("Java103班");
    
                      j96.setCode("java103");
    
    
    
                      // Step1:学生类型的集合定义
    
                      List<Student>stus = new ArrayList<Student>();
    
    
    
                      // Step2: 添加数据
    
                      stus.add(pxj);
    
                      stus.add(hjn);
    
                      stus.add(zsf);
    
                      stus.add(zwj);
    
    
    
                      // Step3: 追加一个新的学生
    
                      Student ljn =new Student("陆佳楠", "003");
    
                      stus.add(ljn);
    
                      // Step4: 设置班级学生属性
    
                      J103.setStudents(stus);
    
                      // 使用迭代器遍历
                      // Step1:创建迭代器
    
                      Iterator<Student>it = stus.iterator();
    
                      while(it.hasNext()) {
    
                              Studentstu = it.next();
    
                              System.out.println(stu);
    
                              if(stu.getName().equals("黄佳男")) {
    
                                       it.remove();
    
                              }
    
                      }
    
                      System.out.println("处理完的结果======================");
    
                      it =stus.iterator();
    
                      while(it.hasNext()) {
    
                              Studentstu = it.next();
    
                              System.out.println(stu);
    
                      }
    
             }
    
    }
    
  8. 在异常处理时,finally代码块的重要性是什么?(提示:一般在finally块中定义哪些内容)

    无论是否抛出异常,finally代码块总是会被执行。就算是没有catch语句同时又抛出异常的情况下,finally代码块仍然会被执行。最后要说的是,finally代码块主要用来释放资源,比如:I/O缓冲区,数据库连接。

  9. 使用JDBC书写一段查询student表的代码,从控制台格式化打印输出,注意控制台打印的格式。

    try {
    
            // 1. 选择数据库:加载数据库驱动
    
            Class.forName("com.mysql.jdbc.Driver");
    
            // 2. 连接数据库
    
            conn = DriverManager.getConnection(url,user, password);
    
            // 3. 创建数据库查询
    
            ps =conn.prepareStatement("SELECT * FROM student WHERE name = ?;");
    
            ps.setString(1, name);
    
            // 4. 获取查询结果
    
            int i =ps.executeUpdate();
    
            System.out.println("一共执行了" +i + "条");
    
    } catch(ClassNotFoundException e) {
    
            System.out.println("数据库驱动没有找到");
    
            e.printStackTrace();
    
    } catch (SQLException e) {
    
            e.printStackTrace();
    
    } catch (Exception e) {
    
            e.printStackTrace();
    
    } finally {
    
            // 5. 关闭查询和连接
    
            try {
    
                     if (null != ps){
    
                              ps.close();
    
                     }
    
                     if (null !=conn) {
    
                              conn.close();
    
                     }
    
            } catch (SQLExceptione) {
    
                     e.printStackTrace();
    
            }
    
    }
    
  10. 什么是泛型,为什么要使用泛型。

    泛型:本质是参数化类型。
    为什么要使用?创建集合的时候,往集合里面添加数据,再次取出时,集合会忘记这数据类型,该对象的编译类型就会变成Object类型,否则如果想要变回原来的数据类型的时候,就要强制进行转换。创建集合的时候,我们就指定集合类型,避免这个过程。

JSP&Servlet部分

  1. 什么是Servlet?解释下Servlet的生命周期。

    Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和
    HTTP 服务器上的数据库或应用程序之间的中间层。

    Servlet 通过调用 init () 方法进行初始化。Servlet 调用 service() 方法来处理客户端的请求。Servlet
    通过调用 destroy() 方法终止(结束)。最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。

  2. doGet()方法和doPsot()方法有什么区别?

    doGet:GET方法会把名值对追加在请求的URL后面。因为URL对字符数目有限制,进而限制了用在客户端请求的参数值的数目。并且请求中的参数值是可见的,因此,敏感信息不能用这种方式传递。

    doPOST:POST方法通过把请求参数值放在请求体中来克服GET方法的限制,因此,可以发送的参数的数目是没有限制的。最后,通过POST请求传递的敏感信息对外部客户端是不可见的。

  3. 浏览器和Servlet通信使用的是什么协议?

    HTTP协议,即:超文本传输协议

  4. sendRedirect()和forward()方法有什么区别?

    Forward和Redirect代表了两种请求转发方式:直接转发和间接转发。对应到代码里,分别是RequestDispatcher类的forward()方法和HttpServletRequest类的sendRedirect()方法。

      对于间接方式,服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。它本质上是两次HTTP请求,对应两个request对象。

      对于直接方式,客户端浏览器只发出一次请求,Servlet把请求转发给Servlet、HTML、JSP或其它信息资源,由第2个信息资源响应该请求,两个信息资源共享同一个request对象。

  5. 什么是JSP?JSP有什么优点?

    JSP技术是用JAVA语言作为脚本语言的,JSP网页为整个服务器端的JAVA库单元提供了一个接口来服务于HTTP的应用程序。
    JSP的优点:
    ·对于用户界面的更新,其实就是由 WebServer进行的,所以给人的感觉更新很快。
    ·所有的应用都是基于服务器的,所以它们可以时刻保持最新版本。
    ·客户端的接口不是很繁琐,对于各种应用易于部署、维护和修改。

  6. 使用JSTL结合EL表达式,完成一个在JSP输出表格tbody体内容的代码(表格内容自拟)

      <%@ page language="java"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    
    <%@ taglibprefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    
    <html>
    
    
    
    <body>
    
    
    
        <div class="row">
    
            <form class="form-inline"action="/test">
    
                <divclass="form-group">
    
                    <labelclass="label-middle">开始时间</label><inputsize="16" type="text" value="${startTime}"name="startTime">
    
                    <labelclass="label-middle">结束时间</label><inputsize="16" type="text" value="${endTime}"name="endTime">
    
                      <buttontype="submit">查询</button>
    
                </div>
    
            </form>
    
        </div>
    
    
    
        <div class="row margin-top-20">
    
            <table class="table">
    
                <thead>
    
                <tr>
    
                    <thclass="seq">序号</th>
    
                    <th>时间</th>
    
                    <th>MSG</th>
    
                </tr>
    
                </thead>
    
                <tbody>
    
                </tbody>
    
                <c:forEach var="data"items="${datas}" varStatus="loop">
    
                    <tr>
    
                        <td>${loop.index +1}</td>
    
                       <td>${data.time}</td>
    
                       <td>${data.msg}</td>
    
                    </tr>
    
                </c:forEach>
    
            </table>
    
        </div>
    
    </body>
    
    </html> 
    
  7. MVC是什么意思?MVC的优点有哪些?

    MVC全名是Model ViewController,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业
    务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

    1:耦合性低

    2:重用性高

    3:部署快

    4:可维护性高

    5:有利软件工程化管理

  8. 在一个典型的Web应用中,被Nutz的Ioc容器管理的对象有哪些?
    javabea

  9. 在Nutz中,已知一个dao对象,书写如下代码:
    1、查询ID为1的Student对象;
    2、添加一个新的Student对象数据到数据库;
    3、查询所有的age在18~20岁之间的学生数据,并放置到一个List集合中。
// 第一题
Student p =dao.fetch(Student.class,1);
System.out.println(p.getId());

// 第二题
Student p =new Student();
p.setName("Peter");
p.setAge(22);
dao.insert(p);
System.out.println(p.getId());

// 第三题
List<Student>people = dao.query(Student.class, Cnd.where("age","between", 18,20));

主观题

客观评价下自己最近的学习状况,以及在学习中碰到的突出问题,同时希望中心协助改进的地方有哪些?

猜你喜欢

转载自blog.csdn.net/igo2011/article/details/80845776