Java基础测试0824整理

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

1.java虚拟机是执行字节码文件(.class)的虚拟机进程
javac 将.java文件编译成.class文件。运行于不同平台拥有的不同JVM上。
“一次编译,到处运行”,因为不同平台拥有不同的虚拟机,即与平台无关。

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

2.Java支持的数据类型有哪些?

1)8种基本数据类型:

byte 8位 取值范围 -2^7 ~ 2^7 -1

short 16位 取值范围 -2^15 ~ 2^15 - 1

char 16位 取值范围 0 ~ 2 ^16 - 1

boolean 位数不明确 取值 true false

int 32位 取值范围 -2^31 ~ 2^31 - 1

long 64位 取值范围 -2^63 ~ 2^ 63 - 1

float 32位 取值范围 1.4e-45 ~ 3.40e38

double 64位 取值范围 4.9e-324 ~ 1.79e308
————————————————
2)引用类型,包括类、自定义类、接口、数组

需要注意的是,String不是基本数据类型,而是引用类型

引用类型声明的变量,是指该变量在内存中实际上存储的是个引用地址,创建的对象实际是在堆中

3.分别写出分支结构,循环结构的语法格式?

分支结构
1.if (判断表达式) { 条件成立执行};
2.if (判断表达式) { 条件成立执行} else {条件不成立执行};
3.if (判断表达式1) {表达式1成立执行} else if (判断表达式2) { 表达式2成立执行} else {其他情况};

分支结构
// 需要匹配的量: byte short int char enum String(jdk 1.7 中添加) 等
switch(需要匹配的量) {
// 若干个 case 情形,每一种情况都是固定值
case 1 :
System.out.println(“one”);
break;
// …
default:
System.out.println(“default”);
break;
}
————————————————
循环结构
1.for (初始化语句; 循环终止条件; 循环迭代条件) {循环体}
2. while 循环初始化语句
while(循环终止条件) {
// 循环体
// 循环迭代条件
}
3. do while 循环初始化语句
do {
// 循环体
// 循环迭代条件
} while(循环终止条件);// 此处注意分号结尾

4.增强型 for(JDK 1.5 引入)
int[] nums = {1, 2, 3, 4};
for (int i : nums) {
// …
}

4.简述方法中的参数传递原理?如果传入的是基本数据类型,是否原数据的值会发生改变?如果传入的是引用数据类型呢?阐述原因。

在外围定义|保存|获取一个值或对象,将这个对象作为参数传入一个方法,在方法中修改对象的属性、行为。

  • (基础数据类型)按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本。因此,如果函数修改了该参数,仅改变副本,而原始值保持不变。
  • (引用数据类型)按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本。因此,如果函数修改了该参数,参数的原始值(函数块之外的调用代码中)也随之改变。
5.类的成员有哪些?用于成员变量的修饰符有哪些?分别的控制范围是什么?
// 成员变量:对象
// 成员方法:对象

// 静态变量:类
// 静态方法:类 - main

// 构造器、构造方法

// private: 仅在当前类中使用
// default: 当前类、当前包
// protected: 当前类、当前包、不同包中的子类
// public: 所有的包、所有类

// 一般来说构造器都是公有的。
// 也存在私有的构造器 -- 单例设计模式
6.请书写构造器定义的语法?构造器的用途是什么?

[修饰符] 类名 ([参数列表]) { };
构造器的作用:实例化对象,给对象赋初始值(或者抽象类给子类实例化对象);

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

在这里插入图片描述

// 抽象类:抽象方法(必须用 abstract 修饰)
// 含有抽象方法的类一定是抽象类,抽象类不一定含有抽象方法。

// 接口中:
// 抽象方法:一定是成员方法
// 静态变量:必须要赋值 一般都会定义成常量 final
// 1.8 默认方法 default static

举例:

public interface Test3 {
    String name = "";
    final String world = "";

    // 抽象方法: 一定是成员方法
    // 静态变量:必须要赋值 一般都会定义成常量 final
    // 1.8 默认方法 default static

    void hello();//抽象方法

	// JDK1.8 以后有默认和静态方法 default static
    static void world2() {
        System.out.println("hello, world");
    }
    default void world3() {
        System.out.println("hi");
    }
}

调用实现:

public class Test3Impl implements Test3{
    @Override
    public void hello() {
        System.out.println("hello");
    }
    public static void main(String[] args) {
        Test3 test3 = new Test3Impl();//父类引用指向子类实现
        test3.world3();//子类对象调用.方法
        Test3.world2();//静态方法 类.方法

        Test3Impl impl = new Test3Impl();//子类对象创建
        impl.world3();//对象.方法
        //不可以用子类名.方法;因为静态方法只能该类调用

8.Java集合框架的基本接口有哪些?常用的方法有哪些?

在这里插入图片描述

下面是简约版本:
总共有两大接口:Collection 和Map ,一个元素集合,一个是键值对集合;
其中List和Set接口继承了Collection接口,一个是有序元素集合,一个是无序元素集合;
而ArrayList和 LinkedList 实现了List接口,HashSet实现了Set接口。
这几个都比较常用; HashMap 和HashTable实现了Map接口,并且HashTable是线程安全的,但是HashMap性能更好。
在这里插入图片描述
常用方法见本博集合框架篇;

9.写一个main方法,使用全字段的构造器创建5个Student对象,并放入到一个集合中(map)中,使用迭代器遍历map,并删除一个符合条件code值的对象。
public class Testttt {
    public static void main(String[] args) {
        Map<String,Student> map = new HashMap<>(5);
        map.put("1号",(new Student(1,"张三",20)));
        map.put("2号",(new Student(2,"李四",20)));
        map.put("3号",(new Student(3,"王五",20)));
        map.put("4号",(new Student(4,"赵六",20)));
        map.put("5号",(new Student(5,"田七",20)));

        //map没有remove()方法,但其迭代器有该方法,
        //所以不能用增强型FOR循环删除,可以用迭代器删除。
        //方法一:迭代器取得整体键值对集合entrySet(),删除对应的键
        Iterator<Map.Entry<String,Student>> it = map.entrySet().iterator();
        while(it.hasNext()){
            Map.Entry<String,Student> entryNext = it.next();
            if("3号".equals(entryNext.getKey())){
                it.remove();
            }
        }
            //遍历打印
        for(Map.Entry<String,Student> entry : map.entrySet()){
            System.out.println("key:"+ entry.getKey());
            System.out.println("value:"+entry.getValue());
        }
        //方法二:迭代器取得 键 集合,删除对应键
        Iterator<String> it1 =  map.keySet().iterator();
        while(it1.hasNext()){
            String s = it1.next();
            if("2号".equals(s)){
                it1.remove();
            }
        }
        //好像也可以如此直接打印System.out.println(map);
    }
}
10.编码过程中如何处理异常?在异常处理时,finally代码块的重要性是什么?(提示:一般在finally块中定义哪些内容)

a、抛出异常
一个方法出现错误引发异常时,
方法创建异常对象并交付运行时系统,
异常对象中包含了异常类型和异常出现时的程序状态等异常信息。
运行时系统负责寻找处置异常的代码并执行。

throws:如果一个方法可能会出现异常,但没有能力处理这种异常,
可以在方法声明处用throws子句来声明抛出异常。多个异常可使用逗号 分割
throw:异常必须在方法内抛出。
————————————————
b、捕获异常
try…catch…finally…
Java规定:对于可查异常必须捕捉、或者声明抛出。允许忽略不可查的RuntimeException和Error。

try 块:用于捕获异常。其后可接零个或多个catch块,如果没有catch块,则必须跟一个finally块。
catch 块:用于处理try捕获到的异常。
finally 块:无论是否捕获或处理异常,finally块里的语句都会被执行。
当在try块或catch块中遇到return语句时,finally语句块将在方法返回之前被执行。

// try catch 手动处理,0或者多个catch块(小的异常放上面)
// finally (注意try catch中若有return,先停一下进入finally,然后再返回)释放资源
// throws 抛出多个异常类型,谁调用处理
// throw 抛出具体某一个异常,抛砖引玉
11.使用jdbc书写一段查询student表的代码,从控制台格式化打印输出,注意控制台的打印格式。

我写的是Class.forName…还有封装成list打印输出;


12.什么是方法重载?什么是方法重写?两者有什么区别?

方法重写Override:发生在继承关系中,同方法名、同参数列表(个数,数据类型,顺序),子类重写(覆盖)父类的方法,且子类不能拥有比父类更为严格的权限(返回值类型、抛出异常)(一般用于子类功能的拓展);
方法重载Overload:发生在同一类中,同方法名,不同参数列表(个数,数据类型,顺序),重载一个新方法,与返回值和权限无关。(一般用于同一类中同功能的方法对不同数据类型处理)。

13.在企业开发中包名定义的规范是什么?至少写出三个常用的JDK包。

命名分为三层(全小写):
第一层是企业的域名的反写 com.dodo
第二层是企业项目名称 demo
第三层是企业项目模块 bean
例如:com.ntqingniao.j96.oop
————————————————
java.lang:包含了 Java 语言的核心类库,如 String、System、Math等等,使用该包下的类是不需要显式引入;
java.util:包含了大量的工具类,如 Date、集合框架;
java.net:Java 网络编程的类和接口包;
java.io:Java 输入输出,如流等方面编程的包;
java.text:格式化方面的类;
java.sql:数据库编程方面的类和接口包;
java.awt:图形用户界面方面的类和接口包。

14.数组初始化的方式有哪些?请举例说明。请写出一个合理的数组,并使用foreach循环遍历到控制台。

有静态初始化和动态初始化
静态初始化(直接赋值):int[] arr = {1,2,3,4};//int[] arr = new int[]{1,2,3,4}
动态初始化(指定长度):int[] arr1 = new int[4];

int[] arr = {1,2,3,4};
for (int a :arr) {
System.out.println(a);
}

15.给定指定文件路径,遍历文件路径下的所有文件。
import java.io.File;

public class Testttt {
    public static void main(String[] args) {
       File file = new File("E://笔记整理归纳");
       func(file);
    }

    public static void func(File file){
        File[] files = file.listFiles();//获取该目录下一级列表
        for(File f : files){
            if(f.isDirectory()){//若还是目录就递归
                func(f);
            }else if(f.isFile()){//若是文件就打印
                System.out.println(f);
            }
        }
    }
}
16.给定一个指定文件,将其内容读取写入另一个文件中。

17.控制台输出:18岁的白羊座的倪桐老师在给渡课IT教育Java班的学生上课(提示:需要定义的类包括:老师类、学员类、课程类等等,要运用封装的概念)

太长了懒得写;

18.什么是servlet,解释Servlet的生命周期

Servlet是一个处理前端请求给予响应

是单例模式,类加载时实例化,第一次请求时初始化,之后不会再初始化;Tomcat关闭时销毁。

生命周期:实例化=》初始化=》提供服务=》销毁=》回收

19.浏览器和Servlet通信使用的是什么协议?Get和Post方式有什么区别?

http或者https协议

1.get方式提供的数据大小有限制而post没有,get没有post安全;
2.get是通过key和value传值而post是通过http请求的附件进行传值。

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

sendRedirect() 是响应的方法,请求2次,是客户端行为,地址栏发生变化;
forward()只请求一次,是服务器内部行为,地址栏不发生变化,forword(req.resp)参数是当前页面的请求和响应。

补充其他练习概念

请分别说明类变量、实例变量、局部变量的生命周期?

1,局部变量
局部变量是指定义在方法或代码块中的变量,局部变量必须初始化,在方法或代码块内有效,之外则无效,方法执行开始入栈时创建,执行完毕出栈时销毁。
2,实例变量
其作用域受限定符限定,Private的只能在本类中使用,protected子类可用,public任何地方都可用。
生命周期从对象创建开始到对象销毁结束。
3,类变量
类变量是指类的static变量,用类名可以直接访问。生命周期从加载类开始,到销毁类结束。

什么是jsp,jsp有什么优点

JSP(Java Server Pages)
JSP技术是用JAVA语言作为脚本语言的,JSP网页为整个服务器端的JAVA库单元提供了一个接口来服务于HTTP的应用程序。

JSP的优点:
  对于用户界面的更新,其实就是由 Web Server进行的,所以给人的感觉更新很快。
  所有的应用都是基于服务器的,所以它们可以时刻保持最新版本。
  客户端的接口不是很繁琐,对于各种应用易于部署、维护和修改。

常用的隐式对象有哪些,用途是什么

九大隐式对象:
application—所有用户和整个服务器都可访问
session—当前用户登录有效
request—一次请求有效,通常在2个JSP中有效
pageContext—当前用户一个JSP页面有效
response 响应请求
out 输出内容
page 相当于JAVA中的this
config 初始化的配置文件(web.xml)访问对象
exception JSP中的异常处理
————————————————

什么是泛型,为什么要使用泛型

本质是参数化类型,就是说所操作的数据类型被指定为一个参数。泛型的类型参数只能是类类型。java引入泛型的好处就是安全简单,可以限制所用的数据的类型。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多,也需要更多的人来对数据进行整理,并且数据的汇总查询方面效率也是极其的低下,并且数据安方面永远不会保证安性能。结合数据内容管理的种种缺点,在互联网时代都可以得到有效的补充。结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。本次开发的高校科研信息管理系统实现了操作日志管理、字典管理、反馈管理、公告管理、科研成果管理、科研项目管理、通知管理、学术活动管理、学院部门管理、科研人员管理、管理员管理等功能。系统用到了关系型数据库中王者MySql作为系统的数据库,有效的对数据进行安的存储,有效的备份,对数据可靠性方面得到了保证。并且程序也具备程序需求的所有功能,使得操作性还是安性都大大提高,让高校科研信息管理系统更能从理念走到现实,确确实实的让人们提升信息处理效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值