下篇
类和对象的关系?
-
类定义了一种新的数据类型,可以用新类型来创建该类型的对象。
-
类( class )是对象( object )的模板,而对象是类的一个实例。
定义一个类需要包含什么元素?
一个类包含属性和方法。 该类具有哪些特征使用属性表示, 该类具有哪些行为使用方法来表示。
如何使用 this 关键字?
this 指向自己的引用,即当前方法所在的对象。它的一个主要作用是要将自己这个对象当做参数,传送给别的对象中的方法 或者在类定义时使用 this 来引用自己的属性或方法。
类体中的方法包含哪些分类?
-
按返回值分:有返回值、无返回值
-
按参数分:无参数、有参数(单个参数,多个参数)
-
按范围或功能分:实例方法、类方法、构造方法
什么时候为类中的实例变量分配内存空间?
在使用类创建实例对象时会为其分配空间。(通过 new关键字和构造函数为其实例化的时候)
什么叫方法的重载?构造方法可以重载吗?
-
一个类中可以有多个方法具有相同的名称, 但这些犯法的参数必须不同, 即或者是参数个数不同,或者是参数的类型不同,或者是参数的顺序不同。
-
构造方法可以重载,而且构造方法的重载是方法中使用频率最高的一种。
简述类变量和实例变量的不同?
-
不同对象的实例变量将分配不同的内存空间, 实例变量则属性独有, 改变某一个对象的值不影响其他对象; 而所有对象的类变量占用同一块内存空间, 类变量是所有对象共有的,改变其中一个对象的值,其他对象得到的就是改变后的结果。
-
类变量在类被加载到内存是就为其分配内存空间, 而实例变量在使用 new创建对象时,才为其分配内存空间;
-
类变量可以通过对象和类名访问,而实例变量只能通过对象访问。
-
类变量通过 static 关键字修饰,实例变量不需要。
通过 Student stu; 语句定义一个用户类型变量时,是否能在内存中创建对象?
-
通过 Student stu ;语句仅仅声明了一个类型为 Student ,名称为 stu 的引用变量。
-
这个引用变量具有指向一个 Student 对象的潜在可能, 但还没有指向一个 Student 对象。
-
如果要想使 stu 指向一个全新的 Student 对象,在运行时用特定的 **java **关键字 new在 JVM存储空间中分配 **Student **对象。即通过赋值语句将引用变量和对象关联起来,
**Student stu=new Student();**
。
类方法与实例方法的区别?
-
类加载时,类方法被分配入口地址;实例方法是在第一个对象创建时被分配入口地址
-
类方法一般通过类名来调用
-
在类方法中不能使用 **this 关键字;因为this **代表当前对象;
-
类方法是在类加载时就存在而此时对象还不存在。
如何创建一个对象?
声明该类型的变量,创建该类型的对象,并将对象的引用赋给变量。如**People p=new People();**
。
封装的概念是什么?
将数据连同函数捆绑在一起,形成新的类型,这被称为封装。封装是一种信息隐藏技术,在java中通过关键字private,protected和public实现封装。
访问控制里面四个关键字是什么?简要说四者的访问权限关系?
-
**public **: 任何其他类,对象只要可以看到这个类的话,那么它就可以存取变量的数据或使用方法
-
**protected **: 同一类,同一包可以使用。不同包的类要使用,必须是该类的子类。
-
**private **: 不允许任何其他类存取和调用
-
**friendly **(default,前边没有修饰符的情况): 在同一程序包中出现才可以直接使用它的数据和方法
封装的好处是什么?
-
封装有助于提高程序的灵活性, 便于代码的维护和修改, 可以有效地避免修改代码而造成“牵一发而动全身” 的问题。而且, 复杂成员变量被访问的同时还可以避免错误,提高程序的健壮性。
-
在代码发生变化时可以通过修改访问方法, 使得修改不影响外界的访问。 通过隐藏设计细节,可以把对代码修改造成的负面影响缩小到最小的范围内, 这样就可以写出可维护性和可扩展性高的代码。
在 Java中,封装设计过程中所需要遵循的规则是什么?
-
用访问控制修饰符保护成员变量,通常是 private;
-
建立公有的访问方法(
**setter()**
和**getter()**
),强制调用代码通过这些方法访问成员变量。
或者是:
-
成员变量私有化;
-
为每一个私有化的成员变量建立一组公有的 getter 或 setter方法
参数传递有几种方式?
按值传参、按引用传参
构造函数的作用和特点?
作用:在创建对象时,对新构造出来的对象进行初始化。
特点:
-
构造函数的方法名与类同名;
-
构造函数是对象在实例化是由系统自动调用;
-
构造函数没有返回类型,并且也不用void关键字修饰;
-
如果在定义类时没有定义构造函数,则编译器会自动插入一个无参且方法体为空的构造函数;
-
如果在定义类时显式地定义了一个有参构造函数,则编译器不再提供无参的默认构造函数。
-
构造函数的重载是方法重载中最为频繁的一种方式。
静态块有什么特点?
类中的静态块中的代码,在类装入JVM中就执行一次,通常把一些类装载就需要初始化的一些代码放在其中。
什么是继承?
-
继承性是面向对象程序设计语言的另一种基本特征,通过继承可以实现代码的重用。―继承而得到的类为子类,被继承的类为父类,父类包括所有直接或间接被继承的类。
-
子类可继承父类中的变量及方法,也可定义其自身特有的变量及方法。
-
Java中不支持多重继承。
Java中,有继承关系时,变量隐藏的原则?
子类中变量名与继承自父类的变量名相同时,则继承自父类的变量将被隐藏。
Java中,有继承关系时,方法重写原则?
重写后的方法不能比被重写的方法有更严格的访问权限(可以相同),改写后的方法不能比重写的方法产生更多的例外异常
Java中,super关键字的作用?
-
调用构造方法:Super ()必须是子类构造函数第一个执行的语句,如果super ( )没有被用到,每个超类的默认的或无参数的构造函数将被执行。
-
调用被隐藏变量及方法:可通过super关键字调用被隐藏的父类中的变量及方法。
什么叫成员变量的隐藏?
对于成员变量来说,当子类本身具有与继承自父类的某个成员变量名称相同的成员变量时,便构成了成员变量的隐藏。 其含义是, 在子类中直接调用该成员变量时, 将调用的是子类中本身具有的成员变量,而不是从父类继承的成员变量。
switch 中用于判断的表达式,可以用哪些数据类型?
-
int
-
char
-
byte
-
short
-
枚举
-
String: PS:对JDK版本有要求,必须为1.7及以上版本
char型变量中能不能存贮一个中文汉字?为什么?
Java里采用了Unicode编码格式,Unicode编码中一个char型占用2个字节,而一个汉字也是占用2个字节,所以可以存储中文汉字。(备注:C语言里,char占用1个字节,不用存汉字)
**String s=new String("XYZ");**
创建了几个对象?
两个对象;如下:
String s1="abc";
String s2="abc";
String s3=new String("abc");
/**
s1==s2=>true
s1==s3=>false
*/
throws和throw有什么区别?
throws:用来什么一个方法可能抛出的所有异常信息,出现在方法函数头
throw:指抛出一个具体的异常类型,出现在函数体中。
final修饰的特点:
- final修饰的量是常量,在程序的运行过程中不改变。例如:
final int NUM = 100
; - 只读
- final修饰的类是最终类,当一个类定义后,不需要再进行扩展,可以定义成最终类。最终类的声明方法是在类名前加上final修饰符。
- 修饰符abstract和final不能同时使用
概念要点:
Java语言for语句中的逻辑表达式必须返回一个逻辑值,该部分也是可选的,但逻辑表达式为空时,默认规定为恒真。
Java定义的变量要求赋初值,如果没有赋值,整型变量获得的值是0,实行型变量的值为0.0,布尔类型数据的值为false,复合数据类型的值为null。
如果方法的参数为基本变量(及其包装类或者字符串),则直接将实参的值传递给方法体,方法内对形参的任何改变,不会改变实参的原来值。
标识符合法判断(注意不能以数字打头):
-
标识符有字母、下划线、$和数字组成
-
标识符应以字母、下划线、$开头,不能以数字开头
-
标识符区分大小写,标识符长度不限,但是实际命名不宜过长
-
标识符不能与关键字同名
自动类型转换(自动封箱拆箱):
-
基本数据类型间的优先关系:
- (有高到低):byte->short->char->int->long->float->double
-
强制类型转换:代码如下:
int i=12;
byte b=(byte)i;//把int类型强制转换为byte型
Java源文件是由什么组成的?一个源文件中必须要有一个public类吗?
Java源文件是由三个部分组成的:
-
第一部分是类或外部结构,例“class Student{}”;
-
第二部分是main()方法,也叫做程序的入口;
-
第三部分是编写的代码,是写在main方法中的。
public类不是必须的,可以没有public类。但是一个Java源文件中最多只能有一个public类,当有一个public类时,源文件名必须与之一致,否则无法编译,如果源文件中没有一个public类,则文件名与类中没有一致性要求。(main方法只能有一个)
注释用法,单行注释、多行注释和文档注释各自语法及用途
-
单行注释:以“//”开头,直到行末尾。
-
多行注释:以“/”开头,直到“/”结束,用来注释一行或多行。
-
文档注释:以“/**”开头,直到“*/”结束,这是Java语言特有的注释方法,能被转化为HTML格式的帮助文档。