java基础-----基本概念解析

java基础------基本概念解析

 

1.请列举出四类八种基本数据类型有哪些,并按照大小顺序排序

byte < short = char < int < long < float < double      boolean 类型不参大小比较

byte--------1个字节

short--------2个字节

char---------2个字节

int -----------4个字节

long ---------8个字节

 float --------4个字节

 double------8个字节

boolean ------未知

2.在使用数组时,会发生哪些异常,请描述发生这些异常的原因

(自己理解)

空指针异常,索引越界异常。

索引越界异常:给数组定义了下标的范围,但是在引用或访问的时候,使用了不在定义范围内的索引。

空指针异常:定义了数组,但是给定的范围为null,但是仍然引用或者访问这个数组,结果会发生空指针异常。

(标准答案)

1.索引越界异常 : ArrayIndexOutOfBoundsException

发生异常原因 : 在使用数组的索引时,要求索引需要在0-数组长度-1的正确范围,如果索引不在正确的范围内就会报出越界异常

2.空指针异常 : NullPointerException

发生异常原因 : 将数组引用的值设置为null,数组引用不再指向任何的堆内存中的数据,仍然要通过这个引用访问堆内存中的数据,只能抛出异常

3.面向对象的特征是什么,请详细描述

继承--让类与类产生子父类的关系。关键词extends.

封装--隐藏事物的属性和实现细节,对外提供公共的访问方式。关键词get set.

多态

4.简述final关键字的特点

(自己理解)

1)可以修饰类,方法和变量。

2)被它修饰的类不能被继承或重写,成为一个最终类。

3)被它修饰的方法不能被重写,但可以被继承和正常使用。

4)被它修饰的变量变成一个常量,只能赋值一次。

(标准答案)

1、final修饰类中的属性或者变量

无论属性是基本类型还是引用类型,final所起的作用都是变量里面存放的“值”不能变。这个值,对于基本类型来说,变量里面放的就是实实在在的值,如1,“abc”等。

而引用类型变量里面放的是个地址,所以用final修饰引用类型变量指的是它里面的地址不能变,并不是说这个地址所指向的对象或数组的内容不可

final修饰属性,声明变量时可以不赋值,而且一旦赋值就不能被修改了。对final属性可以在三个地方赋值:声明时、初始化块中、构造方法中。总之一定要赋值。

2、final修饰类中的方法

   作用:可以被继承,但继承后不能被重写。

3、final修饰类

  作用:类不可以被继承

5.成员变量和局部变量的区别有哪些

A:在类中的位置不同

成员变量:在类中方法外

局部变量:在方法定义中或者方法声明上

B:在内存中的位置不同

成员变量:在堆内存(成员变量属于对象,对象进堆内存)

局部变量:在栈内存(局部变量属于方法,方法进栈内存)

C:生命周期不同

成员变量:随着对象的创建而存在,随着对象的消失而消失

局部变量:随着方法的调用而存在,随着方法的调用完毕而消失

D:初始化值不同

成员变量:有默认初始化值

局部变量:没有默认初始化值,必须定义,赋值,然后才能使用

6.简述下静态修饰方法的特点

(自己理解)

1.静态方法不能访问非静态的变量和方法

2.静态方法中不能存在this关键字

(标准答案)

1. 静态方法随着类的加载而加载 到方法区中 。

2. 静态方法中可以调用静态 但是不能调用非静态方法 非静态方法中可以调用静态方法 也可以调用非静态方法

3. 静态方法和对象无关 可以使用类名.方法名()

7.String  StringBuilder和StringBuffer的区别

1)三者存放的都是字符串内容。

2)就String来说,String类的内容一旦声明后是不可改变的,如果要变,实际上是新建了一个对象,且String具有的所有方法,都是重新新建的对象,原来的对象内容是没有被改变的。

3)StringBuffer和StringBuilder都能直接改变对象的内容,不需要新建对象,但StringBuffer和StringBuilder都不能直接赋值,必须通过构造方法来构建对象。

4)StringBuffer和StringBuilder使用上本身没有什么区别,唯一最大的区别在于StringBuilder的方法不是线程安全的,效率相对高一些。

 

8.List和Set分别有哪些实现类,各个实现类有什么特点

List的实现类包括:

ArrayList,LinkedList。

ArrayList和LinkedList的共有特性包括存取是有序的,元素是可重复的,元素是有序列的。

ArrayList的查询速度快,但是增删速度比较慢.

LinkedList的查询速度慢,但是增删速度比较快。

 

Set的实现类包括:

HashSet和LinkedHashSet。

Set的实现类的共有特点包括存取无序,元素不可重复,元素无序列。HashSet和LinkedHashSet都是用hash算法来存取集合的对象的.

LinkedHashSet和HashSet不一样的区别是LinkedHashSet实际上是存取是有顺序的,是无序set中的有序set。

9.HashSet存储自定义类型元素去重原理

(自己理解)

元素在放入集合的过程中,首先通过HashSet的重写方法比较元素的地址值,如果地址值不重复,就放入集合中,如果地址值重复的话,就调用重写的toString方法比较元素的内容,如果内容不重复的话就放入到集合中,如果内容重复的话就不放入集合中。

(标准答案)

因为HashSet是用Hash算法来实现存取对象的,所以每个对象都有自己的hashCode. 当存储自定义类型元素时,在类中必须重写hashCode()和equals()方法。将hashCode()方法重写为属性相同的对象值返回值必须一样,属性不同的返回值尽量不一样。将equals()方法重写为属性相同时返回true,属性不同时返回false。因此,在存取对象是,HashSet会调用对象的hashCode来比较set里面是否有hashcode一样的对象,如果没有,就直接存入,如果有,就调用equals来继续比较hashcode一样的对象,如果返回值为true就不存入,如果返回值为false就存入

10.简述java的八种基本数据包装类分别是什么?并描述什么是自动装箱和自动拆箱

包装类 Byte Short Integer Long Float Double Boolean Character

基本数据类型封装成引用数据类型包装类的过程就是装箱,自动装箱体现在,基本数据类型可以直接给引用数据类型进行赋值 Integer i = 10;

将引用数据类型包装类对象中封装的基本类型数据获取到的过程就是拆箱,自动拆箱体现在,引用数据类型和基本数据类型可以直接进行运算 int a = i;

11.描述throw和throws两个关键字的区别

throw是对异常的抛出,throws是对异常的声明

throw写在方法内部,throws写在方法声明上

throw关键字一旦被执行到,证明一定有一个异常对象出现; throws是对可能出现的异常类型的声明, 不一定真的有异常发生

throw后面只能new一个 异常; throws可以声明多个异常

12.什么是多态?什么是多态的向上转型和向下转型

(自己理解)

多态是对方法的调用和引用,一般用于子父类的继承关系中。

向上转型:定义父类类型,调用子类对象,使子类可以调用父类中的方法。

向下转型:将父类对象向下强制类型转换为子类的类型,使子类可以使用子类中特有的方法,使子类的使用范围扩大。

(标准答案)

多态表示事物的多种形态,多态的发生前提 : 子父类的继承关系或者实现类与接口的实现关系

向上转型 : 父类引用指向子类对象 : Object obj = new Person();

向下转型 : 将指向子类对象的父类引用转换成子类类型本身 Person p = (Person)obj;

 

13.描述线程的五种状态

1. 新建状态 : new Thread()

2. 就绪状态 : start() 争夺CPU资源

3. 运行状态 : 争夺CPU资源成功

4. 阻塞状态 : 被动等待,有CPU资源也无法执行, 例如:sleep(毫秒值)休眠,没有同步锁资源,wait()长久等待

5. 死亡状态 : 如果线程中run方法执行完毕

14.构造函数的作用和特点

作用:用来创建对象

特点:

(1)使用new空格方法创建(实例化)一个新对象。

(2)构造方法方法名必须与类名同名,并且没有返回值。

(3)一个类可以有多个构造方法(形参,列表不同)

(4)如果一个类中,没有定义任何构造方法,编译器会自动添加无参构造。

15.什么是方法重载Overload,什么是方法重写Override,描述区别是什么

方法重写:子父类继承关系(类与接口的实现关系),子类重写从父类(父接口)继承来的方法。

子类重写父类方法要求权限大于等于父类, 返回值类型,方法名,参数列表与父类方法一致

 

方法重载:同一个类中出现方法名相同,参数列表不同(参数个数不同,参数类型不同, 不同类型参数的排列顺序不同)的方法称为方法重载。与返回值类型无关

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值