Java期中考知识点总结

1.所有标识符的首字符只能是字母、美元夫或者下划线,首字符以后可以是字母、美元符、下划线或者数字的任意组合。

2.byte是8位有符号数,short是16位有符号数,char是16位无符号数,char能存储任何字符

3.Java的异常分为受检异常和非受检异常两类,非受检异常包括RuntimeException及其子类、error及其子类;受检异常指除了非受检异常之外的异常。由此,我们可以知道error也是一种异常。所以,所有异常的父类的Throwable,而不是Exception。

4.Java接口中声明的变量默认都是final的。假设接口的成员变量x不是final的,且默认有值。那如果我们在某接口的实现类A中把x改为其它值,那么另一个实现类B中对x有依赖的方法全都出错了,那这样的接口就不能起到“模板”的作用了。

5.集合框架包括三大块内容:对外的接口、接口的实现和对集合运算的算法。
1)接口:表示集合的抽象数据类型。接口提供了让我们对集合中所表示的内容进行单独操作的可能(接口表示的是类的能力)(比如Collections,Set,List,Map这四个都是接口)
2)实现:也就是集合框架中接口的具体实现类。实际它们就是那些可复用的数据接口。
比如,声明一个ArrayList实例:

List mylist=new ArrayList();

6.Float、Short、Long、Byte、Double、Boolean是类,它们和对应的基本数据类型的关键字的区别仅仅是首字母大小写不同

7.任何Java源文件都属于某个包。如果没有package语句,那么该源程序会被放在默认包下(默认包是指如果未在类中包含一条包语句时系统默认给出的包)

8.抛出NullPointerException只可能发生于访问值为 null的对象 的方法或属性

9.重载调用的决定取决于编译时的类型。如果有多个条件满足,将会选择继承树中深度最深的类型,继承数是类似下面这样的结构:这时候机动车的深度就比车辆的深度要大
在这里插入图片描述
比如如果有两个重载过的方法:fun(Object o)fun(String s),那么运行fun(null)时,由于String比Object更具体,所以会调用fun(String s)方法。

10.switch能够接受的类型的值是整型数及其包装类(byte、char、int、long),enum,String。

11.对于参数为变长参数的函数,比如fun(String… ss ),有以下两种调用需要注意一下:
1)fun(null)这种调用得到的参数列表为空
2)fun(),这种调用得到的参数列表非空,长度为0
如果是fun(String[] ss),不能用fun()来调用。

12.Java的保留字指现有Java版本尚未使用,但以后版本可能会作为关键字使用:byValue,cast,false,future,generic,inner,operator,outer,rest,true,var,goto,const,null

13.反正在构造函数里调用自己的构造函数时不能用类名来调用就是了。

14.接口可以继承接口(extends),但是不能实现接口(implements)。接口只能被接口继承,但是可以被抽象类和普通类实现。

15.在方法中声明变量,但是没有赋初值不会产生编译错误,只有你要去调用这个没有赋初值的变量时才会产生编译错误。如:
在这里插入图片描述

16.String是不可变类型。我们来看一下下面这个代码片段:

// Test.java
public class Test {
public static void main(String[] args) {
String a = "a";//此时a指针指向的是“a”这块内存
String b = a;//此时b指针指向的也是“a”这块内存
a += "b";//此时a指针就指向了"ab"这块内存
System.out.print(b);//上面没有改变b指针的指向,所以最终输出仍是a
}
}

最终的输出是a。

17.直接用System.out.println(null)会报错,因为null和char[],String两个类型都匹配,编译器无法搞清楚。我们来看看下面两种方式:

String s=null;
System.out.println(s);

运行结果是输出null。

char[] s=null;
System.out.println(s);

运行会出错:
在这里插入图片描述

18.类装载的工作清单:
1)加载class文件
2)为static属性分配空间并全部设置默认值
3)装载父类(前提是该类有父类且父类还没有被装载过)
4)进行类初始化

19.对象构造的工作清单:
在这里插入图片描述
然后我们来看一下下面的代码:

class A {
    int n = 1;
    A() {
        System.out.println(this.n);
        System.out.println(sfun(this.fun()));
    }
    public int fun() {return this.n; }
    static int sfun(int num) { return num; }
}
class B extends A {
    int n = 10;
    B() {}
    public int fun() { return this.n; }
    static int sfun(int num) { return -num; }
}
public class Test {
    public static void main(String[] args) {
        new B();
    }
}
//最终的输出是第一行为1,第二行为0

B 类的构造器没有任何代码,所以我们直接去看A类的构造器。A类的构造器里调用了两个函数,一个属性,众所周知,属性无法体现多态,所以第一行的this.n取的是A.n=1;然后我们看this.fun(),它是非静态方法,可以体现多态,所以调用的是B类的方法,返回B类的n,此时n只是被赋了默认值,所以返回0。然后到了外层sfun方法,它是静态方法,没有多态,所以调用的也是A类的方法,所以返回0.涉及到这些子类套父类,父类套子类的就看能不能体现多态,能体现的(非静态方法)用的就是子类,不能体现的(属性,静态方法和私有方法)用的就是父类

// Test.java
class A {
static { System.out.print("A"); }
}
class A1 extends A {
static { System.out.print("1"); }
}
class A2 extends A {
static { System.out.print("2"); }
}
class B {
static { System.out.print("B"); }
static public A a;
static A2 getA2() { return new A2(); }
static { System.out.print("B"); }
}
public class Test {
public static void main(String[] args) {
if(B.a == null) {
B.a = new A1();
} else {
B.a = B.getA2();
}
}
}

上面这段代码的输出是BBA1。为什么我当时没有想到呢?因为我把B类的最后一个静态代码块给忘了。看类的组成的时候,要从第一个大括号一直看到最后一个大括号。

21.这次期中考主要的错误点在于:
1)初始化的顺序
2)对类的组成认识不清晰(静态代码块,非静态代码块,静态方法,非静态方法)
3)需要选错误选项却选了正确的项

22.提一下命令行参数在Java和C中的不同。Java中的命令行参数用数组args存,args[0]存的是第一个参数;C中命令行参数用数组argv存,argv[0]存的是程序的名称。例子:

//java
public class Main {

    public static void main(String[] args) {
        System.out.println("args[0]="+args[0]);
    }
}

运行截图:

在这里插入图片描述

// C++/C
#include<iostream>
#include<cstdio>

int main(int argc,char* argv[])
{
	printf("argv[0]=%s",argv[0]);
	
	
} 

在这里插入图片描述

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.Java的源代码中定义几个类,编译结果就生成几个以.class为后缀的字节码文件.( √ ) 2.Java程序里,创建新的类对象用关键字new,回收无用的类对象使用关键字free. ( × ) 3.Java有垃圾回收机制,内存回收程序可在指定的时间释放内存对象. ( × ) 4.构造函数用于创建类的实例对象,构造函数名应与类名相同,返回类型为void. ( × ) 5.在异常处理中,若try中的代码可能产生多种异常则可以对应多个catch语句,若catch中的参数类型有父类子类关系,此时应该将父类放在后面,子类放在前面. ( √ ) 6.拥有abstract方法的类是抽象类,但抽象类中可以没有abstract方法. ( √ ) 7.Java的屏幕坐标是以像素为单位,容器的左下角被确定为坐标的起点. ( × ) 8.静态初始化器是在其所属的类加载内存时由系统自动调用执行. ( √ ) 9.在Java中对象可以赋值,只要使用赋值号(等号)即可,相当于生成了一个各属性与赋值对象相同的新对象. ( × ) 10.只能利用Thread类的子类来创建线程. ( × ) 1.按以下要求编写程序 (1) 创建一个Rectangle类,添加width和height两个成员变量. (2) 在Rectangle中添加两种方法分别计算矩形的周长和面积. (3) 编程利用Rectangle输出一个矩形的周长和面积. 3.编写一个程序:在控制台中窗口中提示输入两个整数,然后接收这两个整数,并输出它们的和.下面是运行过程的示例: 请输入第一个整数:45 请输入第二个整数:23 计算结果:45+23=68.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值