java概念 复习总结及题目
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JAVA概念
1.去掉了头文件、指针变量、结构、运算符重载、多重继承等
2.Java 不支持预处理功能。C/C++ 在编译过程中都有一个预编泽阶段,即众所周知的预处理器。预处理器为开发
人员提供了方便,但增加了编译的复杂性。Java 虚拟机没有预处理器,但它提供的引入语句(import) 与C++ 预处
理器的功能类似。
3.java方法不支持参数缺省值,因为这会与重载冲突
4.Java 不提供goto 语句,它虽然指定goto 作为关键字,但不支持它的使用,还有const
5.Java 不支持C++ 中的自动强制类型转换,如果需要,必须由程序显式进行强制类型转换。
6.装箱是Java 编译器在基本数据类型和对应的对象包装类型之间做的一个转化。比如:把int 转化成Integer ,
反之就是拆箱。
Integer a = new Integer(3);
Integer b = 3; // 将3自动装箱成Integer类型
int c = 3;
System.out.println(a == b); // false 两个引用没有引用同一对象
System.out.println(a == c); // true a自动拆箱成int类型再和c比较
7.一个".java" 源文件中是否可以包括多个类(不是内部类)但只能有一个public 的类,并且public 的类名必须
与文件名相一致。
8.不通过构造函数也能创建对象
9.不可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用,
静态方法只能访问静态成员,因为非静态方法的调用要先创建对象,因此在调用静态方法时可能对象并没有被初始化。
10.内部类可以引用它的包含类(外部类)的成员,包括私有成员//私有成员不能被其他类访问XXX?
11.override覆盖(重写):名称、返回类型和参数列表与父类中的相同(参数列表又叫参数签名,包括参数的类型、个数和顺序) 被覆盖的方法在子类中只能通过super调用。覆盖不会删除父类中的方法,而是对子类的实例隐藏
如果覆盖的是成员变量,this.age与super.age是一个
覆盖的原则:
覆盖方法不能比原方法访问性差(即访问权限不允许缩小)。
覆盖方法不能比原方法抛出更多或更高级(EXception>ioException)的异常。
被覆盖的方法不能是final类型,因为final修饰的方法是无法覆盖的。
被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。*
被覆盖的方法不能为static。如果父类中的方法为静态的,而子类中的方法不是静态的,那么会发生编译错误;反之亦然。
即使都是静态的,仍然不会发生覆盖,因为静态方法是在编译的时候把静态方法和类的引用类型进行匹配。声明为static的方法
不能被重写,但是能够被再次声明。
对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只
是定义了一个新方法,而不会达到重载的效果。*
覆盖和重载的不同:
覆盖要求参数列表必须一致,而重载要求参数列表必须不一致。*
覆盖要求返回类型必须一致,重载对此没有要求。
覆盖对方法的访问权限和抛出的异常有特殊的要求,而重载在这方面没有任何限制。
不能仅通过返回类型重载:因为有时候调用一个方法时可以不定义返回结果变量,例如,我们调用map.remove(key)方法时,虽然remove 方法有返回值,但是我们通常都不会定义接收返回结果的变量,这
时候假设该类中有两个名称和参数列表完全相同的方法,仅仅是返回类型不同*
不能通过访问权限、返回类型、抛出的异常、只改为兼容的形参类型,int->long进行重载,总之从编译器角度思考 构造器Constructor 不能被继承,因此不能重写Override,但可以被重载Overload。
12.Java 不支持像C++ 中那样的复制构造函数,这个不同点是因为如果你不自己写构造函数的情况下,Java不会创建默认的复制构造函数。
13.接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。
类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
抽象类可以在不提供接口方法实现的情况下实现接口。
Java 接口中声明的变量默认都是final 的。抽象类可以包含非final 的变量。
Java 接口中的成员函数默认是public 的。抽象类的成员函数可以是private,protected 或者是public 。
接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但如果它包含main 方法的话是可以被调用的14.关于接口:
接口用于描述系统对外提供的所有服务,因此接口中的成员常量和方法都必须是公开(public)类型的
接口中的方法都是抽象(abstract)方法,故接口可以用abstract修饰
接口不涉及和任何具体实例相关的细节,因此接口没有构造方法,不能被实例化,没有实例变量,只有静态变量;
接口的中的变量是所有实现类共有的,既然共有,肯定是不变的东西,也就是final常量了。
综上,属性默认是public static final ,方法默认是public abstract,按定义final 和abstract 不能同时出现15.关于继承构造函数的调用
子类的构造过程中必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来。
如果父类有多个构造函数:
子类的构造过程中必须调用其父类的构造函数,如果在子类构造方法中我们并没有显示的调用基类的构造方法,如:super(); 这样就会调用父类没有参数的构造方法。
如果子类的构造方法中既没有显示的调用基类构造方法,而基类中又没有无参的构造方法,则编译出错,所以,通常我们需要显示的:super(参数列表),来调用父类有参数的构造函数,此时无参的构造函数就不会被调用。
总之:子类没有显示调用父类构造函数,不管子类构造函数是否带参数都默认调用父类无参的构造函数,若父类没有则编译出错。例
16.如果x.equals(y) == true,它们的哈希码应当相同,如果两个对象的hashCode 相同,它们并不一定相同
使用== 操作符检查“参数是否为这个对象的引用”
使用instanceof 操作符检查“参数是否为正确的类型”
17.接口可以继承接口。抽象类可以实现(implements)接口,抽象类可继承具体类,但前提是具体类必须有明确的构造函数。
18.创建对象时构造器的调用顺序是:先初始化静态成员(先父后子),然后调用父类构造器,再初始化非静态成员,最后调用自身构造器,下次再创建对象时不再初始化静态域。
19.不可以在static 环境中访问非static 变量,理由如上
class A{
static{
a=1;
}
Int a;
20.round 方法参数加 1/2 后求其floor,所以Math.round(11.5)==12 Math.round(-11.5)==-11
21.关于String:
赋值:(1)通过new:String str = new String("Hello");系统会先创建一个匿名对象"Hello"存入堆内存(暂且叫它A),然后new关键字会在堆内存中又开辟一块新的空间,然后把"Hello"存进去,并且把地址返回给栈内存中的str, 此时A 对象成为了一个垃圾对象,因为它没有被任何栈中的变量指向,会被GC自动回收。同时会在字符串常量区(静态)创建一个字符串”Hello”,这个”Hello”伴随程序消亡