java期末复习,阳光学院

发布时间 2024-01-10 11:30:37作者: 庄佳星

1.面向对象都有那些特性以及你对这些特性的理解?

类具有封装性继承性多态性的特性。

(1)封装性:类的封装性为类的成员提供公有,缺省,保护和私有等访问权限,目的是隐藏类只的私有变量和类中方法的实现细节

(2)继承性:允许通过继承原有类的某些特性或全部特性而产生全新的类,原有的类称为基类(或者称为父类),产生的新类称为派生类(或者称为子类)。子类不仅可以直接继承父类的共性,而且也可以创建它特有的个性。

(3)多态性:是指在基类中定义的属性和方法被派生类继承之后,可以具有不同的数据类型或表现出不同行为,多态性有两种表现形式:重载和覆盖(也可以讲多态性分为编译时的多态性-重载在“编译时绑定”和运行时的多态性-重写在“运行时绑定”)

面向对象的优点:易复用,易维护,易扩展,降低了系统代码的耦合度。

注意:默认情况下面向对象有3大特性,封装,继承,多态,如果有面试官问让说出四4特性,那么我们就把抽象加上去。

2.怎么样判断方法间发生的是重写和重载?

(1)发生位置不同

重载:发生在一类中

重写:发生在两个类中,并且具体父子类关系。

(2)编译运行时机不同

重载:编译期就能够判定,重载各方法间遵循“方法名相同,参数列表不同”的原则。

(其中,参数列表的不同体现在参数:个数的不同,顺序的不同,类型的不同上)

重写:运行期才能确定,重写方法遵循

签名:完全相同(方法名+参数列表)

返回值:为void和基本数据类型时,一定要相同。如果返回值是引用数据类型是可以为父子类类型

修饰符:子类重写的方法修饰词权限要等于或者大于父类方法的修饰符

异常:子类抛出的异常类型级别等于或者小于抛出的异常类型级别,不能够抛出父类未捕获的异常

注意:public void start(int a) throws Exception{},面试时,心中谨记上面这一方法,对方法的各组成部分进行一一说明即可。还有需要注意”构造方法不能被重写,声明为final的方法不能被重写,声明为static的方法不能被重写,但是能够被再次声明。“

3.访问权限修饰符public ,private,protected以及不写(默认)时的区别?

不同的权限修饰符的区别通过下表说明:

修饰词  当前类  同包  子类  其他类 

public    T    T    T   T

protected    T    T     T     F

默认     T    T    F    F

4。abstract class 何interface有什么区别?

1.相同点

A。两者都是抽象类,都不能实例化

B.interface实现类及abstract class的子类都必须要实现已经声明的抽象方法。

2.不同点

A.interface需要实现,要用implements,而abstract class需要继承,要用extends.

B.一个类可以实现多个interface。但一个类只能继承一个abstract class.

C.interface强调特定功能的实现,而abstractclass强调所属关系。

D尽管interface实现类及abstractclass的子类都必须要实现相应的抽象方法,但实现的形式不同。

interface中的每一个方法都是抽象方法,都只是声明(declaration,没有方法体),实现类必须要实现。而abstractclass的子类可以有选择地实现。

5.简单讲一下java的跨平台原来

java源程序(.java文件)通过编译器编译成为Class文件(字节码文件),而它的class文件是基于字节码(以byte为单位存储的文件)的,而字节码文件是描述程序要运行的虚指令的集合,这些虚指令的集合与任何的平台无关,java虚拟机认识它(只要在不同平台下部署相应的JRE,运行JVM就可以了)。

6Java的基本数据类型都有那些各占几个字节?
8种基本数据类型分别用于存储:整数数据,浮点数据,字符数据,布尔类型数据。

整数类型:byte,short,int,long

浮点类型:float,double

byte:8位,最大存储数据量是255.存储的数据范围是-128~127之间。

short:16位,最大数据存储量是65536,数据范围是-32768-32768之间。

int:32位,最大数据存储容量是2的32次方减1,数据范围位负的负的2的63次方到正的2的63次方减1。

long:64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1.

float:32位,数据范围在3.4e-15~1.4e38,直接赋值时必须在数字后加上f或F.

double:64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加

char:16位存储Unicode码,用单引号赋值。

boolean:只有true和false两个取值。

注意:这里的”位“是指:二进制位数,一个字节占8个二进制位

7.有了基本数据类型,为什么还需要包装类型?

我们知道Java是一个面向对象的编程语言,基本类型并不具有对象的性质,为了让基本数据类型也具有对象的特征,就出现了包装类型(如我们在使用集合类型Collection时一定要使用包装类型而非基本类型,原国是集合中能存储对象类型),它相当于将基本类型”包装起来“,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。另外,当需要往ArrayList,HashMap,中放东西时,像int,double这种基本类型是放不进去的,因为容器都是装object的,这是就需要这些基本类型的包装器类了。从Java5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。

Java为每个原始类型提供了包装类型:

原始数据:boolean,char,byte,short,int,long,float,double

包装类型:Boolean,Character,Byte,Short,Intrger,Long,Float,Double

8数据类型之间的转换

(1)字符串如何转基本数据类型?

调用基本数据类型对映的包装类中的方法parseXXX()或valueof(String)即可返回相应基本类型。

(2)基本数据类型如何转字符串?

一种方法是将基本数据类型与空字符串(””)连接(+)即可获得其所对应的字符串;另一种方式是

调用String类中的valueOf()方法返回相应字符串。

9.&和&&的区别?

&和&&都可以用作逻辑运算符,表示逻辑与。当运算符两边的表达式都为true时,结果才为true:

否则,结果为false.另外&&还具有短路功能,也就是说,当&&左边的表达式结果为false时,将不再运算&&右边的表达式,结果肯定为false.

列如,对于if(str!=null&&!str.equals("")),当str为null时,不会对&&右边的表达式进行运算,否则会出现空指针异常。&还可以用作位运算符,当&两边的表达式不是boolean类型时,&表示按位与。

注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。

10在Java中,如何跳出当前的多重嵌套循环

在最外层循环前加一个标记如A,然后用break A:可以跳出多重循环(Java中支持带标签的break和continue语句,作用有点类似于C和C++中的goto语句,但是就像要避免使用goto一样,应该避免使用带标签的break和continue,因为它不会让你的程序变得更优雅,很多时候甚至有相反的作用,这个大家需要在通过项目的多次洗礼后慢慢就会有感受了)

public static void main(String[] args){

  A:

  for (int i=0;i<5;i++){

    for(int j=0;j<5;j++){

      System.out.println("[i="+i+",j="+j+"]“);

      if(j==3){

        break A;    

      }

    }

  }

}

11.Java有没有goto语句

goto是Java中的保留字,在目前版本的Java中没有使用。根据Jamesv Gosling(Java之父)编写的《The Java Programming Language》一书的附录中给出了一个Java关键字列表,其中有goto和const,但是这两个是目前无法使用的关键字,因此有些地方将其称之为保留字,其实保留字这个词应该有更广泛的意义,因为熟悉C语言的程序员都知道,在系统类库中使用过的有有特殊意义的单词或单词的组合都被视为保留着。

流程控制语句

12.break,continue,retuen的区别及作用?

(1)break跳出当前层循环,不再执行循环(结束当前的循环体)
(2)continue跳出本次循环,继续执行下次循环(结束正在执行的循环,进入下一个循环条件)
(3)return程序返回,不再执行下面的代码(结束当前的方法 直接返回)
13.什么是多态机制?Java语言是如何实现多态的?
所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量到底会指向哪个类的实例对象,该引用变量发出方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。
多态分为编译时多态和运行时多态。其中编辑时多态是静态的,注意是指方法的重载,它是根据参数列表的不同来分不同的函数,通过编译之后会变成两个不同的函数,在运行时谈不上多态。而运行时
 
 
 
 
 
 
 
 
 

 

 

 

 

 

什么是成员变量?

类的内部,方法的外部

什么是局部变量?

方法内部,代码块内部

基本数据类型和引用数据类型?

基本数据类型:存储值,固定大小

byte,short,int,long,float,double,char,boolean

引用数据类型:指向地址

类,接口,数组

类为什么封装?

1。权限设置

2. 隐藏细节

this指代是什么?当前对象,super指代父类的对象,皆需在第一行

构造方法和普通方法的区别?

构造方法:初始化,类名相同,自动调用,不继承,默认在类中,无返回,无标识符

普通方法:有标识符,有返回类型

继承的特点?

1.代码复用

重写的规则?

1.签名相同

2.异常,访问权限,返回类型小于等于父类

抽象类和接口的特点和区别?

抽象类

1.有构造方法

2.可以有方法

3.单继承

4.变量不限

接口

1.只有抽象方法

2.方法默认public

3多实现

4.静态变量

什么是类的多态?

1.重写2,重载3.继承4.向上转型

为什么要有匿名内部类?只实现一次

arithme

NullPointException 

空类使用

 

 

 

 

 

 

 

 

 

 

 

 

 

 

public interface Swim{

void swimming();

}

public interface Fly{

void flying();

}

public class Bird{

public void layegg{

System.out.println(“鸟会下蛋“):

}

       }

public classPenguin extends Bird implements Swim{

@Override

public void swimming(){

System.out.println("企鹅会游泳“)

}

  }

public class Sparrow extends Bird implements Fly{

@Override

public void flying(){

System.out.println("麻雀会飞”);

}

  }

public class Eagle extends Bird implements Fly{

@Override

public  void flying(){

System.out.println("老鹰会飞“)

}

  }

public class Test{

public static void main(String[] args){

Bird[] birds=new Bird[5];

birds[0]=new penguin();

birds[1]=new penguin();

birds[2]=new Sparrow();

birds[3]=new Sparrow();

birds[4]=new Engle();

 

for(int i=0;i<birds.length:i++){

Bird b= birds[i];

if(b instanceof Fly){

Fly fly =(Fly) b;

fly.flying();

}else if(b instanceof Swim){
Swim swim=(Swim) b;

swim.swimming();

}

}

}

}

public class Emp{

private String name;

private int age;

private String gender;

private double salary;

 

//无参构造方法

public Emp(){

}

 

//全参数构造方法

public Emp(String name,int age, String gender,double salary){

  this.name=name;

  this.age=age;

  this.gender=gender;

  this.salary=salary;

}

//设置name属性

public void setName(String name){

  this.name=name;

}

//获取name属性

public String getName(){

  return this.name:

}

@override 

public String toString(){

  return "name="+...

}

public static void main(String[] args){

  Emp emp=new Emp("张三”,22,“男“,5000.0);

  System.out.println(emp