Java基础做题记录

1.接口中的方法只能使用public 和abstract修饰

A:接口中不能有方法体

B:接口中方法只能用public和abstract修饰

总结:

 

接口中的方法默认public abstract 修饰

接口中的变量默认public final修饰

2.关于构造方法

 

  • 识别合法的构造方法;

    1:构造方法可以被重载,一个构造方法可以通过this关键字调用另一个构造方法,this语句必须位于构造方法的第一行;
    重载:方法的重载(overload):重载构成的条件:方法的名称相同,但参数类型或参数个数不同,才能构成方法的重载。
     

    2 当一个类中没有定义任何构造方法,Java将自动提供一个缺省构造方法;
    3 子类通过super关键字调用父类的一个构造方法;
    4 当子类的某个构造方法没有通过super关键字调用父类的构造方法,通过这个构造方法创建子类对象时,会自动先调用父类的缺省构造方法
    5 构造方法不能被static、final、synchronized、abstract、native修饰,但可以被public、private、protected修饰
    6 构造方法不是类的成员方法;
    7 构造方法不能被继承。

3.关于原码反码和补码

首先源码,反码,和补码的关系

正数的反码和补码都是自身

负数的反码是符号位不变,别的位去反,负数的补码是符号位不变,源码取反加一

Java中使用补码表示一个数的。

short是2个字节,a = 00000 00000 10000 00000,现在转成byte,byte是一个字节,所以b = 1000 0000,此时b是一个负数的补码,先求其反码为1111 1111(符号位不变,别的位减一),再求其源码等于1000 0000(符号位不变,别的位取反),首先这是一个负数,其次这个数照理代表的是-0,这个数被规定为-128。

参考https://www.nowcoder.com/test/question/done?tid=16363503&qid=3459#summary

4.关于集合的总结

 

  • Collection

    -----List

        -----LinkedList 非同步

        ----ArrayList 非同步,实现了可变大小的元素数组

        ----Vector 同步

    ------Stack

    -----Set 不允许有相同的元素

     

    Map

    -----HashTable 同步,实现一个key--value映射的哈希表

    -----HashMap 非同步,

    -----WeakHashMap 改进的HashMap,实现了“弱引用”,如果一个key不被引用,则被GC回收 

5.Java中方法重写的规则

方法重写(override)两同两小一大原则:

方法名相同,参数类型相同

子类的返回类型小于等于父类方法返回类型(这里的大小指的是什么意思

子类抛出异常小于等于父类方法抛出异常

子类访问权限大于等于父类方法访问权限。

参考:https://www.nowcoder.com/test/question/done?tid=16363503&qid=44624#summary

6.

分析:A:final修饰的类不能被继承,而抽象类是必须要被继承才有意义的,因此,final是不能用来修饰抽象类的。

B:final修饰的方法不能被重写,而继承抽象类必须要重写其方法,所以final不能修饰抽象方法

C:抽象方法只做声明,并不实现。

总结:final可以用修饰类,变量和方法,final修饰的类不能被继承,final修饰方法不能别重写,final修饰的变量不能被修改,一旦获得初始值,改变量就不能被重新赋值。

7.关于final的进一步理解:

final修饰的方法不能被重写的,但是这里并没有错误,因为方法是private的,也就是子类没有继承父类的方法,因此子类的run方法根父类的run方法无关,并不是覆盖。所以输出的是"Car"。

疑问:priavte的变量是能被继承吗

8.关于静态方法的理解

非静态方法不能被静态方法引用,这里静态方法是在什么时候加载的(深入理解Java虚拟机中只提到到了静态代码块和静态变量,并没有提到静态方法)?当类加载的时候,static静态方法随着类的加载而初始化,此时实例对象还没有被创建,非静态变量要等到实例对象创建后才会被初始化,所以无法被引用。

9.创建非静态内部类对象

非静态内部类可以看成外部类的成员

静态内部类可以看成是外部类的静态成员

首先要创建外部类的实例

Enclosingone.InsideOne ei = eo.new InsideOne();

InsideOne ei = eo.new InsideOne();    //注意使用这种方式,要导入类名,因为编译器找不到class InsideOne

10.下面有关重载函数的说法中正确的是

重载:必须同名函数,必须参数表不同(包含参数个数不同、参数类型不同或者都不同)

10.

C extends B ,B extends A

C c = new C();

那么c instanceof C,同时c instanceof B

11.:char foo='中',是否正确?(假设源文件以GB2312编码存储,并且以javac – encoding GB2312命令编译)

这在java中是正确的,在C语言中是错误的,java的char类型占两个字节,默认使用GBK编码存储。这种写法是正确的,此外java还可以用中文做变量名。

12.

1:创建时的区别:

Statement statement = conn.createStatement();
PreparedStatement preStatement = conn.prepareStatement(sql);
执行的时候:
ResultSet rSet = statement.executeQuery(sql);
ResultSet pSet = preStatement.executeQuery();

由上可以看出,PreparedStatement有预编译的过程,已经绑定sql,之后无论执行多少遍,都不会再去进行编译,

而 statement 不同,如果执行多变,则相应的就要编译多少遍sql,所以从这点看,preStatement 的效率会比 Statement要高一些

https://www.nowcoder.com/test/question/done?tid=17865250&qid=25808#summary

13.

 

A和B中long和float,正常定义需要加l和f,但是long和float属于基本类型,会进行转化,所以不会报出异常。AB正确

boolean类型不能和任何类型进行转换,会报出类型异常错误。所以C错。

D选项可以这样定义,D正确。

E选项中,byte的取值范围是-128—127。报出异常:cannot convert from int to byte.所以E选项错误。

double f = 123;是对的,因为进行了类型转换了

double ff = 1.2;是错的,要改为double ff = 1.2f;

14.

答案:

Web service顾名思义是基于web的服务,它是一种跨平台,跨语言的服务。

我们可以这样理解它,比如说我们可以调用互联网上查询天气信息的web服务,把它嵌入到我们的B/S程序中,当用户从我们的网点看到天气信息时,会认为我们为他提供很多的服务,但其实我们什么也没做,只是简单的调用了一下服务器上的一端代码而已。Web service 可以将你的服务发布到互联网上让别人去调用,也可以调用别人发布的web service,和使用自己的代码一样。

它是采用XML传输格式化的数据,它的通信协议是SOAP(简单对象访问协议).

15.

在一个子类被创建的时候,首先会在内存中创建一个父类对象,然后在父类对象外部放上子类独有的属性,两者合起来形成一个子类的对象。所以所谓的继承使子类拥有父类所有的属性和方法其实可以这样理解,子类对象确实拥有父类对象中所有的属性和方法,但是父类对象中的私有属性和方法,子类是无法访问到的,只是拥有,但不能使用。

16.集合的框架图

17.

https://www.nowcoder.com/test/question/done?tid=17899959&qid=4352#summary

16.

17.

18.

19.

关于插入排序的说明:如果是顺序的,只要比较n次,时间复杂度是O(n)

public static void sort22(Comparable[] a){
	for(int i=1;i<a.length;i++){
		Comparable temp = a[i];
		int j;
		if(a[i].compareTo(a[i-1])<0){//如果是顺序的,只要比较n次,所以时间复杂度是O(n)
			for(j=i-1;j>=0&&a[j].compareTo(temp)>0;j--){
				a[j+1] = a[j];
		    }
		a[j+1] = temp;
			}
	}
}

20.

重点题:剑指Offer210页,有两种方式:

一是使用Partition()函数,此时算法复杂度是O(n)

二是使用大顶堆,建堆O(n),选每个数mlogn,加起来是O(n)

剑指Offer上的是O(nlogm)

21.

22.冒泡排序的最坏时间复杂度是O(n^2),但是如下面的代码所示,好的情况是是O(n)

	public static void sort0(Comparable[] a){
		boolean flag = true;
		for(int i=0;i<a.length-1&&true;i++){
			for(int j=a.length-1;j-1>=i;j--){
				flag = false;
				if(a[j].compareTo(a[j-1])<0){
					flag = true;
					exch(a,j,j-1);
				}
			}
		}
	}

23.

Java标识符的命名规则:

由26个英文字母大小写,数字:0-9 符号:_ $组成

标识符应以字母、_、$开头

标识符不能是关键字

24.

赫夫曼树的知识点需要整理。

25.

输出:

和是43

finally语句块

26.

输出: -128 127(注意这里是int类型)

27.

\

参考:https://www.nowcoder.com/test/question/done?tid=18006137&qid=25374#summary

28.

子类重写父类方法时,方法的访问权限不能小于原访问权限,在接口中,方法的默认权限就是public,所以子类重写后只能是public

29.

30.

用法:condition1 | condition2、condition1 || condition2

"|"是按位或:先判断条件1,不管条件1是否可以决定结果,都会执行条件2

"||"是逻辑或,先判断条件1,如果条件1可以决定结果(决定结果为true)就不会执行条件2.

31.

输出为8,注意这里没有break,会一直指向下去。

32.

33.

构造块:类中直接用{}定义,每一次创建对象时执行。

类似的题目:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值