main 方法是 Java Application 程序执行的入口点,以下描述哪项是合法的()。 B.public static void main( String args[] )解析:方法的名字必须是main,方法必须是public static void 类型的,方法必须接收一个字符串数组的参数 string[] args 和string args[]相同
重载就是一句话:同名不同参,返回值无关。 覆盖/重写:同名同参
public interface IService {String NAME=“default”;} 默认类型等价表示是哪一项: C.public static final String NAME=“default”; 解析: 接口类中的 变量默认是public static final 的,方法默认是public abstract 的
选项中哪一行代码可以替换 //add code here 而不产生编译错误12345public abstract class MyClass { public int constInt = 5; //add code here public void method() { } public abstract void method(int a);consInt=constInt+5;public int method();public abstract void anotherMethod(){}解析:A是抽象方法,抽象类可以包含抽象方法,也可以不包含,实现重载。(√)B 在类中不能constInt = constInt + 5(×)C 返回值不能作为重载的依据(×)D 有方法体的不能作为抽象函数(×)
Exception(异常)是程序本身可以处理的异常。主要包含RuntimeException等运行时异常和IOException,SQLException等非运行时异常。运行时异常 包括:都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。非运行时异常(编译异常) 包括:RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常
继承是根源,重写是表现形式
本题是一个自动拆装箱的考题(自动拆装箱JDK需在1.5上),下面的讨论都不针对新开辟对象的情况:1、基本型和基本型封装型进行“”运算符的比较,基本型封装型将会自动拆箱变为基本型后再进行比较,因此Integer(0)会自动拆箱为int类型再进行比较,显然返回true;2、两个Integer类型进行“”比较,如果其值在-128至127,那么返回true,否则返回false, 这跟Integer.valueOf()的缓冲对象有关,这里不进行赘述。3、两个基本型的封装型进行equals()比较,首先equals()会比较类型,如果类型相同,则继续比较值,如果值也相同,返回true4、基本型封装类型调用equals(),但是参数是基本类型,这时候,先会进行自动装箱,基本型转换为其封装类型,再进行3中的比较。int a=257;Integer b=257;Integer c=257;Integer b2=57;Integer c2=57;System.out.println(ab);//System.out.println(a.equals(b)); 编译出错,基本型不能调用equals()System.out.println(b.equals(257.0));System.out.println(bc);System.out.println(b2==c2);因此上面的代码的结果因此为 true, false, false, true
1.String对象的两种创建方式:第一种方式: String str1 = “aaa”; 是在常量池中获取对象(“aaa” 属于字符串字面量,因此编译时期会在常量池中创建一个字符串对象),第二种方式: String str2 = new String(“aaa”) ; 一共会创建两个字符串对象一个在堆中,一个在常量池中(前提是常量池中还没有 “aaa” 字符串对象)。System.out.println(str1==str2);//false2.String类型的常量池比较特殊。它的主要使用方法有两种:直接使用双引号声明出来的String对象会直接存储在常量池中。如果不是用双引号声明的String对象,可以使用 String 提供的 intern 方法。 String.intern() 是一个 Native 方法,它的作用是: 如果运行时常量池中已经包含一个等于此 String 对象内容的字符串,则返回常量池中该字符串的引用; 如果没有,则在常量池中创建与此 String 内容相同的字符串,并返回常量池中创建的字符串的引用。String s1 = new String(“AAA”);String s2 = s1.intern();String s3 = “AAA”;System.out.println(s2);//AAASystem.out.println(s1 == s2);//false,因为一个是堆内存中的String对象一个是常量池中的String对象,System.out.println(s2 == s3);//true, s2,s3指向常量池中的”AAA“
JVM设置参数-Xmx:最大堆大小-Xms:初始堆大小-Xmn:年轻代大小-XXSurvivorRatio:年轻代中Eden区与Survivor区的大小比值年轻代5120m, Eden:Survivor=3,Survivor区大小=1024m(Survivor区有两个,即将年轻代分为5份,每个Survivor区占一份),总大小为2048m。-Xms初始堆大小即最小内存值为10240m
线程同步(安全):喂,SHE喂(Vector)S(Stack)H(hashtable)E(enumeration)
通过HttpServletRequest. getParameter获取的参数.由客户端浏览器和Web容器配置共同决定编码编码格式由浏览器决定,浏览器根据html中指定的编码格式进行编码,tomcat根据指定的格式进行解码,另外get请求和post请求对编码格式的处理也是不同的1、浏览器根据jsp页面开头声明的编码方式对request中参数编码;2、tomcat默认解码是ISO-8859-1, 但是我们可以显示指定解码格式通过调用 request.setCharacterEncoding(“UTF-8”),或者修改tomcat的配置文件server.xml中的编码,添加uriEncoding属性。
:先要理解什么是类的方法,所谓类的方法就是指类中用static 修饰的方法(非static 为实例方法),比如main 方法,那么可以以main 方法为例,可直接调用其他类方法,必须通过实例调用实例方法,this 关键字不是这么用的
:这道题是考线程的调用情况,线程的启动方式只能通过start这种方式启动才能真正的实现多线程的效果,如果是手动调用run方法和普通方法调用没有区别,所以这个还是按照顺序执行首先执行run方法之后,执行输出语句所以最终得到结果foobar.调用start()后,线程会被放到等待队列,等待CPU调度,并不一定要马上开始执行,只是将这个线程置于可动行状态。然后通过JVM,线程Thread会调用run()方法,执行本线程的线程体。1.start()方法来启动线程,真正实现了多线程运行。这时无需等待run方法体代码执行完毕,可以直接继续执行下面的代码;2.run()方法当作普通方法的方式调用。程序还是要顺序执行,要等待run方法体执行完毕后,才可继续执行下面的代码, 这样就没有达到写线程的目的。
:catch可以省略,try的形式有三种:try-catchtry-finallytry-catch-finally但catch和finally语句不能同时省略!
:&按位与 |按位或 ~取反 ^异或
:Math.floor(-8.5)=( ) D.(double)-9.0Math.floor(x) 返回小于等于x的最接近整数,类型为doublefloor: 求小于参数的最大整数。返回double类型-----n. 地板,地面 例如:Math.floor(-4.2) = -5.0-----------------------------------------------------------ceil: 求大于参数的最小整数。返回double类型-----vt. 装天花板; 例如:Math.ceil(5.6) = 6.0-----------------------------------------------------------round: 对小数进行四舍五入后的结果。返回int类型 例如:Math.round(-4.6) = -5
threadlocalmap使用开放定址法解决haah冲突,hashmap使用链地址法解决hash冲突
:HttpServletRequest接口扩展ServletRequest接口,为HTTP Servlet提供HTTP请求信息GenericServlet类:抽象类,定义一个通用的、独立于底层协议的Servlet。
关于下面代码 int[] x=new int[25]; 描述正确的是()A:不存在x[25] 索引从0开始到length-1B:x[24] 存的是默认值0(java中没有’\0’这一说)
Statement在JDBC中相当于SQL语句的载体A,Statement是最基本的用法,采用字符串拼接的方式,存在注入漏洞B,PreparedStatement对Statement中的SQL语句进行预编译,同时检查合法性,效率高C,CallableStatement接口扩展 PreparedStatement,用来调用存储过程,它提供了对输出和输入/输出参数的支持。CallableStatement 接口还具有对 PreparedStatement 接口提供的输入参数的支持。D,BatchedStatement不是标准的Statement类
考察点:抽象类和接口相同点:都不能被实例化,位于继承树的顶端,都包含抽象方法不同点:1、设计目的:接口体现的一种规范,类似与整个系统的总纲,制订了系统各模块应该遵循的标准,因此接口不应该经常改变,一旦改变对整个系统是辐射性的。 抽象类作为多个子类的共同父类,体现的是一种模板式设计,可以当作系统实现过程中的中间产品,已经实现了系统部分功能。 2、使用不同:(1)接口只能包含抽象方法,抽象类可以包含普通方法。 (2)接口里不能定义静态方法,抽象类可以。 (3)接口只能定义静态常量属性不能定义普通属性,抽象类可以。 (4)接口不包含构造器,抽象类可以(不是用于创建对象而是让子类完成初始化)。 (5)接口里不能包含初始化块,抽象类完全可以。 (6)接口多继承,抽象类单继承(只能有一个直接父类)。总结:接口所有方法全是抽象方法只能 public abstract修饰 (默认public abstract修饰 ),属性默认public static final修饰。 抽象类除了包含抽象方法外与普通类无区别。
Java中涉及到byte、short和char类型都可以强制转化为int
考察JDBCClass.forName(“com.mysql.jdbc.Driver”); //加载jdbc驱动con=DriverManager.getConnection(url,user,password); //建立连接stmt=con.createStatement(); //创建语句执行者(stateMent用于执行不带参数的简单sql语句,PreparedStatement用于执行带参数的预编译sql语句能够预防sql注入,CallableStatement提供了一种标准形式的调用存储过程的方法)stmt.execute(“sql语句”); rs=stmt.executeQuery(“sql查询语句”); //结果集1、Statement对象用于执行不带参数的简单SQL语句。 2、Prepared Statement 对象用于执行预编译SQL语句。 3、Callable Statement对象用于执行对存储过程的调用。
list集合的 nums.remove(1); //移除指定索引上的元素例如 {5,3,1} 移除3
:if(flag = true) 赋值语句结构判断为true ,同理 :if(flag = false) 赋值语句结构判断为false
元素在集合中有序,指的是元素插入过程中记录了元素的插入顺序。
1.final修饰变量,则等同于常量2.final修饰方法中的参数,称为最终参数。3.final修饰类,则类不能被继承4.final修饰方法,则方法不能被重写。5.final 不能修饰抽象类6.final修饰的方法可以被重载 但不能被重写
java核心卷I中43页有如下表述:两个数值进行二元操作时,会有如下的转换操作:如果两个操作数其中有一个是double类型,另一个操作就会转换为double类型。否则,如果其中一个操作数是float类型,另一个将会转换为float类型。否则,如果其中一个操作数是long类型,另一个会转换为long类型。否则,两个操作数都转换为int类型。故,x==f1[0]中,x将会转换为float类型。
Java的关键字对Java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名和参数。true false 是boolean的变量值,是编译器赋予特定含义的,但并不是关键字
synchronized不是修饰变量的 它修饰方法或代码块或对象
out是java.lang.System类中的一个字段,out是“标准“”输出流,public static final PrintStream out,out是PrintStream类型,PrintStream是包装流,你传入什么,他就输出什么
通常一个类实现序列化方式是实现序列化接口 Serializable序列化的作用:把数据长久的保存在磁盘中,磁盘和内存是不同的,内存一般在程序运行时占用,数据保存周期短,随程序结束而结束,磁盘可以长久保存数据 transient关键字的作用,在已实现序列化的类中,有的变量不需要保存在磁盘中,就要transient关键字修饰,如银行卡密码等,就这个作用------在已序列化的类中使变量不序列化
这个问题的前提是:字符界面下前端用户输入、后台程序获取,都是字符流的传输,因此需要导入java.io包。而java.util中的Scanner则是获取控制台的输入。
1.一个java文件里,public 的类只能出现一个,只能出现一个,只能出现一个,否则,不管你用哪一个类名命名文件名编译器都会报错2.关于多态。子类继承了父类的所有成员,包括private权限的成员变量,但是继承的子类具有私有变量的拥有权但是没有使用权。3.private的成员变量,根据权限修饰符的访问控制范围,只有在类内部才能被访问,就算是他的子类,也不能访问。
A,CopyOnWriteArrayList适用于写少读多的并发场景B,ReadWriteLock即为读写锁,他要求写与写之间互斥,读与写之间互斥, 读与读之间可以并发执行。在读多写少的情况下可以提高效率C,ConcurrentHashMap是同步的HashMap,读写都加锁D,volatile只保证多线程操作的可见性,不保证原子性
给定以下JAVA代码,这段代码运行后输出的结果是()复制代码1234567891011121314151617181920212223242526public class Test{ public static int aMethod(int i)throws Exception { try{ return i/10; } catch (Exception ex) { throw new Exception(“exception in a aMethod”); }finally{ System.out.printf(“finally”); }} public static void main(String[] args){ try { aMethod(0); } catch (Exception ex) { System.out.printf(“exception in main”); } System.out.printf(“finished”); }}B. finally finished
abstract只能修饰类和方法 不能修饰字段接口中字段的修饰符:public static final(默认不写)接口中方法的修饰符:public abstract(默认不写)接口类中可以定义类方法,static,可以定义default 方法
已知如下的命令执行 java MyTest a b c 请问哪个语句是正确的? ( )对于java命令,类名后面跟着的就是main函数的参数,多个参数则用空格隔开。 main方法的形参是一个string数组所以对于java mytest a b c传入的参数算是一个string数组。 即args[0]=a args[1]=b args[2]=c
使用 Java 技术开发 WEB 应用程序 , 深入了解 Servlet 的机制对应用的开发将有重要的推动作用 . 而想深入了解 Servlet 的机制就不得不了解 javax.servlet 包 . javax.servlet 包中包含了 7 个接口 ,3 个类和 2 个异常类 , 它们分别是 : 接口 :RequestDispatcher,Servlet,ServletConfig,ServletContext,ServletRequest,ServletResponse 和 SingleThreadModel 类 :GenericServlet,ServletInputStream 和 ServletOutputStream 异常类 :ServletException 和 UnavailableException Servlet 的生命周期 在 Servlet 的接口中定义了一个 Servlet 的生命周期方法 , 分别是 Init,Service 和 Destroy 演示了 Servlet 生命周期方法的简单 Servlet:JEE5.0中的Servlet相关的就下面这几个包:javax.servletjavax.servlet.jspjava.servlet.jsp.eljava.servlet.jsp.tagext而最用得多的就是javax.servletjavax.servlet.http这两个包了.
Vector & ArrayList 的主要区别1) 同步性:Vector是线程安全的,也就是说是同步的 ,而ArrayList 是线程序不安全的,不是同步的 数2。2)数据增长:当需要增长时,Vector默认增长为原来一倍 ,而ArrayList却是原来的50% ,这样,ArrayList就有利于节约内存空间。 如果涉及到堆栈,队列等操作,应该考虑用Vector,如果需要快速随机访问元素,应该使用ArrayList 。扩展知识:
3. Hashtable & HashMapHashtable和HashMap它们的性能方面的比较类似 Vector和ArrayList,比如Hashtable的方法是同步的,而HashMap的不是。
ArrayList的内部实现是基于内部数组Object[],所以从概念上讲,它更象数组,但LinkedList的内部实现是基于一组连接的记录,所以,它更象一个链表结构,所以,它们在性能上有很大的差别: 从上面的分析可知,在ArrayList的前面或中间插入数据时,你必须将其后的所有数据相应的后移,这样必然要花费较多时间,所以,当你的操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能; 而访问链表中的某个元素时,就必须从链表的一端开始沿着连接方向一个一个元素地去查找,直到找到所需的元素为止,所以,当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。
这题考察的就两个知识点:一、强制转换(主要涉及各个类型占几个字节,这里我只简单说一下byte型占一个字节,也就是8位,int型4个字节,32位);二、在计算机系统中,数值一律用补码来表示(存储)正数:补码=反码=原码(当然以二进制形式表达)129 int类型(4个字节)二进制: 00000000 00000000 00000000 10000001强制转换byte型后,只有一个字节即 10000001(注意这里从二进制角度看,第一位是符号位,即求负数的补码接下来)只要求出上面原码对应的补码就行了,然后再转换对应的int型数值(因为题干所给的答案都是比较int型)10000001(原码) 对应的反码为1111 1110又补码等于反码+1即1111 1111 该二进制转换int型刚好是-127(1+2+4+8+16+32+64)普及一下:正数原码,反码,补码相同负数反码除了符号位不变,其他位取反,补码=反码+1;
Web service顾名思义是基于web的服务,它是一种跨平台,跨语言的服务。我们可以这样理解它,比如说我们可以调用互联网上查询天气信息的web服务,把它嵌入到我们的B/S程序中,当用户从我们的网点看到天气信息时,会认为我们为他提供很多的服务,但其实我们什么也没做,只是简单的调用了一下服务器上的一端代码而已。Web service 可以将你的服务发布到互联网上让别人去调用,也可以调用别人发布的web service,和使用自己的代码一样。它是采用XML传输格式化的数据,它的通信协议是SOAP(简单对象访问协议).
forward 服务器会直接访问目标地址的URL,不会把控制权转交1.从地址栏显示来说forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.2.从数据共享来说forward:转发页面和转发到的页面可以共享request里面的数据.redirect:不能共享数据.3.从运用地方来说forward:一般用于用户登陆的时候,根据角色转发到相应的模块.redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.4.从效率来说forward:高.redirect:低.
结论:1、不管有木有出现异常,finally块中代码都会执行;2、当try和catch中有return时,finally仍然会执行;3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。
Thread.sleep() 和 Object.wait(),都可以抛出 InterruptedException。这个异常是不能忽略的,因为它是一个检查异常(checked exception)
子类重写父类方法时,方法的访问权限不能小于原访问权限,在接口中,方法的默认权限就是public,所以子类重写后只能是public
synchronized保证三大性,原子性,有序性,可见性,volatile保证有序性,可见性,不能保证原子性
不管catch是否捕获异常,finally语句块都是要被执行的在try语句块或catch语句块中执行到System.exit(0)直接退出程序finally块中的return语句会覆盖try块中的return返回
long和float,正常定义需要加l和f,但是long和float属于基本类型,会进行转化,所以不会报出异常。AB正确boolean类型不能和任何类型进行转换,会报出类型异常错误
基本数据类型(原生类)
序列化的是对象,不是类,类变量不会被序列化
不再会被使用的对象的内存不能被回收,就是内存泄露。java是自动管理内存的,通常情况下程序运行到稳定状态,内存大小也达到一个 基本稳定的值但是内存泄露导致Gc不能回收泄露的垃圾,内存不断变大.最终超出内存界限,抛出OutOfMemoryExpection
A 显然是错误的,Java一律采用Unicode编码方式,每个字符无论中文还是英文字符都占用2个字节。B 也是不正确的,不同的编码之间是可以转换的,通常流程如下:将字符串S以其自身编码方式分解为字节数组,再将字节数组以你想要输出的编码方式重新编码为字符串。例:String newUTF8Str = new String(oldGBKStr.getBytes(“GBK”), “UTF8”);C 是正确的。Java虚拟机中通常使用UTF-16的方式保存一个字符D 也是正确的。ResourceBundle能够依据Local的不同,选择性的读取与Local对应后缀的properties文件,以达到国际化的目的。
选B、C、D、E。Hashtable:(1)Hashtable 是一个散列表,它存储的内容是键值对(key-value)映射。(2)Hashtable 的函数都是同步的,这意味着它是线程安全的。它的key、value都不可以为null。(3)HashTable直接使用对象的hashCode。HashMap:(1)由数组+链表组成的,基于哈希表的Map实现,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的。(2)不是线程安全的,HashMap可以接受为null的键(key)和值(value)。(3)HashMap重新计算hash值Hashtable,HashMap,Properties继承关系如下:1234public class Hashtable