java基础面试题

基础 

1、short s1 = 1; s1 = s1 + 1;有错吗? short s1 = 1; s1 += 1; 有错吗?

大数据类型转小数据类型需要强制转换,小数据类型转大数据类型自动转换。s1+1中 s1是short类型,1是int类型,最终结果是int类型,不能赋值给s1;而s1 += 1 实际等同于 (short)(s1+1);是进行了强制转换的。

2、重载和重写的区别

方法的重载和重写都是实现多态的方式,区别在于重载实现的是编译时的多态性(同名方法不同入参),而重写实现的是运行时的多态性(同名,同参方法的不同实现)。

重载(Overload):发生在同一个类里,方法的名称相同,但需要参数的数量,类型,顺序至少其中一个不同,单纯的返回类型不同不是重载。

重写(Override):发生子父类继承关系中,子类重新实现父类方法,跟父类方法有相同的入参个数,顺序,类型;以及返回参数类型。重写方法不能比父类拥有更多的异常类型抛出。

3、数组实例化有几种方式?

三种:

①.静态初始化: 

intArr = new int[]{1,2,3,4,5,9};

 ②.简化静态初始化

String[] strArr = {"张三","李四","王二麻"};

③.动态初始化

int[] price = new int[4];

注意:不要同时静态,动态初始化,即同时指定数组长度和数组内容。

4、Java中各种数据默认值

首先确定一下是java的8种基础数据类型在作为类成员变量(类中定义,非局部变量,局部变量通不过编译)时会被赋默认值。其中byte,short,int,long的默认值是0;float,double是0.0,char类型则是' '(空格字符),boolean是false。

5、Object 类常用方法有那些?

equals():比较对象是否相等,比较的是值和地址,自己写的类可重写以自定义(毕竟所有类都继承于Object)。

getClass():获取类的class对象。

 hashCode:获取对象的hashCode值。

clone():克隆方法。

toString():如果没有重写,默认将打印对象的地址值。

notify():随机选择一个在该对象上调用wait方法的线程,解除其阻塞状态。该方法只能在同步方法或同步块内部调用。如果当前线程不是锁的持有者,该方法抛出一个IllegalMonitorStateException异常。

notifyall():解除所有那些在该对象上调用wait方法的线程的阻塞状态。该方法只能在同步方法或同步块内部调用。如果当前线程不是锁的持有者,该方法抛出一个IllegalMonitorStateException异常。

 wait():导致线程进入等待状态,直到它被其他线程通过notify()或者notifyAll唤醒。该方法只能在同步方法中调用。如果当前线程不是锁的持有者,该方法抛出一个IllegalMonitorStateException异常。

finalize():对象回收时调用。

6、java 中是值传递引用传递?

值传递:传递对象的一个副本,即使副本被改变,也不会影响源对象,因为值传递的时候,实际上是将实参的值复制一份给形参,基础类型都是之传递。

引用传递:传递的并不是实际的对象,而是对象的引用,外部对引用对象的改变也会反映到源对象上,因为引用传递的时候,实际上是将实参的地址值复制一份给形参,对象类型是引用传递。

7、形参与实参区别

形参是指方法定义的入参,形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。

实参是指调用方实际传入的参数,可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。

8、构造方法能不能重写?能不能重载?

不能重写,构造函数与类名相同,子父类不能重名。

可以重载,可以有不同入参的构造函数。

9、内部类与静态内部类的区别?

内部类:

1、内部类中的变量和方法不能声明为静态的。
2、内部类实例化:B是A的内部类,实例化B:A.B b = new A().new B()。
3、内部类可以引用外部类的静态或者非静态属性及方法。

静态内部类:

1、静态内部类属性和方法可以声明为静态的或者非静态的。
2、实例化静态内部类:B是A的静态内部类,A.B b = new A.B()。
3、静态内部类只能引用外部类的静态的属性及方法。

10、static 关键字有什么作用?

①.static 成员变量 例如

private static int nums;

静态成员变量是属于类的,也就是说,该成员变量并不属于某个对象,即使有多个该类的对象实例,静态成员变量也只有一个。只要静态成员变量所在的类被加载,这个静态成员变量就会被分配内存空间。因此在引用该静态成员变量时,通常不需要生成该类的对象,而是通过类名直接引用。

②.static 成员方法

public static String test() {
        return null;
    }

静态成员方法中不能使用 this、super 关键字,也不能调用非静态成员方法,同时不能引用非静态成员变量。

③.static 代码块

static {
        Test.a= "test";
    }

static 代码块又称为静态代码块,或静态初始化器。它是在类中独立于成员函数的代码块。static 代码块不需要程序主动调用,在JVM加载类时系统会执行 static 代码块,因此在static 代码块中可以做一些类成员变量的初始化工作。如果一个类中有多个 static 代码块,JVM将会按顺序依次执行。需要注意的是,所有的static 代码块只能在JVM加载类时被执行一次。

④.static 内部类

public class Test1{
    private static String a;
    
    // 静态内部类
    static class test12{
        xxxxxxxx.............
    }
}

静态成员内部类的特点主要是它本身是类相关的内部类,所以它可以不依赖于外部类实例而被实例化。静态内部类不能访问其外部类的实例成员(包括普通的成员变量和方法),只能访问外部类的类成员(包括静态成员变量和静态方法)。即使是静态内部类的实例方法(非静态成员方法)也不能访问其外部类的实例成员。

11、final 在 java 中的作用,有哪些用法?

final修饰的变量会指向一块固定的内存, 这块内存中的值不能改变;其中引用类型变量所指向的对象之所以可以修改, 是因为引用变量不是直接指向对象的数据, 而是指向对象的引用的. 所以被final修饰的引用类型变量将永远指向一个固定的对象, 不能被修改; 对象的数据值可以被修改;而基础类型变量是直接指定值不能改变。

①.修饰类:表示该类不能被继承。

②.修饰方法:表示方法不能被重写。

③.修饰变量:表示变量只能一次赋值以后值不能被修改(常量)。

12、String str=”aaa”,与 String str=new String(“aaa”)一样吗?

不一样,其中String str=”aaa”,JVM会将”aaa“分配到常量池(1.6及之前在方法区;JDK1.7 在堆中;JDK1.8常量池和静态常量池存放在元空间)中,常量池有则直接使用,没有就新建并放到常量池中;而String str=new String(“aaa”),会直接分配到堆内存中,新建一个对象。

13、讲下 java 中的 math 类有那些常用方法?

Math.abs(a)取a的绝对值

Math.max(a,b)取a,b中最大值

Math.pow(a)取a的b平方

14、Char 类型能不能转成 int 类型?能不能转化成 string 类型,能不能转成 double 类型

char<int<long<float<double 所以char可以隐式转换为int或者double类型。但是string是引用类型,char是基础类型,无法转换

15、什么是拆装箱?

 装箱是将基础类型转换为包装类型,拆箱是将包装类型转换为基础类型

显示装箱:new Integer(10)

隐式装箱Integer i=10

装箱在-128到127之间的数是有缓存,是返回缓存引用对象,其他的是返回新建对象

16、Java 中的包装类都是那些?

 包装类:Integer  Char Double Boolean Float Long 

17、一个 java 类中包含那些内容?

 属性,代码块,方法,构造方法,主函数

18、那针对浮点型 数据运算出现的误差的问题,你怎么解决?

使用Bigdecimal类 

19、面向对象的特征有哪些方面?

抽象,继承,封装,多态 

20、访问修饰符 public,private,protected,以及不写(默认) 时的区别?

 default (默认):在同一包内可见
private:在同一类内可见
public:对所有类可见,使用对象有类,方法,属性,接口
protected:对同一包内和子类可见

21、接口有什么特点?

 接口使用Interfac关键字修饰

接口中常量默认public static final(会省略)

接口中方法默认public abstract (会省略)

22、抽象类和接口的区别?

 接口不能实例化,抽象类可以提供成员方法和方法实现,接口只能提供成员方法,需要实现类实现。
抽象类中的成员变量可以拥有多种类型,而接口只能有public static final。
接口中不能有静态代码块,以及静态方法,而抽象类可以。
一个类只能继承一个抽象类,但是可以实现多个接口

23、Hashcode 的作用

HashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,HashCode经常用于确定对象的存储地址。

24、普通类与抽象类有什么区别?

①抽象类使用abstract来修饰,而普通类没有,抽象类可以有抽象方法,强制要求继承的子类实现,普通类没有。

②抽象类不能被实例化,而普通类可以。

25、什么是接口?为什么需要接口?

接口是定义一系列方法的名称,参数,返回类型的结构。因为接口可以制定一个规范让实现的方法去实现,可以让java语言摆脱继承只能单继承的限制。

26、接口有什么特点?

接口使用Interface来修饰。

接口只是定义规范,不能实例化。

成员变量的修饰符只能是 public static final.

27、拷贝和浅拷贝的区别是什么?

拷贝是生成一个新的对象,新对象内拥有和被拷贝对象的相同属性;浅拷贝是将被拷贝对象的地址指向赋值给拷贝结果。

28、JDBC 操作的步骤 

  • 加载驱动程序:Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);

  • 创建数据库连接,必须保证及时关闭 :Connection conn=DriverManager.getConnection("连接串","连接数据库的用户名称","对应的密码")

  • 提交执行SQL语句:Statement stmt=conn.createStatement(); ResultSet res=stmt.executeQuery("select * from table_name");

  • 接收并处理SQL的执行结果

  • 关闭释放资源

29、什么时候用 assert

限定某段代码中某个变量的合理范围,一旦不符合就抛出错误,需要让程序员再修改代码。一般使用于开发环境和测试环境,正式环境一般不建议使用。

30、数组有没有 length()这个方法? String 有没有 length()这个方法

数组有length属性,而String才有length()方法。

31、用最有效率的方法算出 2 乘以 8 等于几?

位运算:2<<3; 表示 2向左移 3位。

00010

01000

32、String 和 StringBuilder、StringBuffer 的区别?

String:它值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间 

StingBuilder:它是可变类,但是不是线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StingBuilder对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量 

StringBuffer:是可变类,是线程安全的。

33、接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concreteclass)?

接口可以继承接口 适应extends

抽象类可以实现接口,因为抽象类可以提供方法的具体实现

抽象类可以继承具体类,例如抽象类实际上也是继承了Object类;但是被继承的具体类必须有名曲的构造函数。

34、一个”.java”源文件中是否可以包含多个类(不是内部类)?有什么限制?

一个“.java”源文件里面可以包含多个类,但是只允许有一个public类,并且类名必须和文件名一致

35、Java 中的 final 关键字有哪些用法?

 修饰类表示类不可继承

修饰属性表示属性不可更改

修饰方法表示方法不能被覆盖和重写

集合

1、ArrayList 和 linkedList 的区别

 它们最本质的区别是ArrayList使用的是动态数组实现,而linkedList使用的双向链表实现。当获取一个数组中的元素时,ArrayList使用数组下标直接获取,linkedList则需要便利链表去获取。添加或删除时ArrayList可能需要移动数组下标,而linkedList直接改变需要插入节点的链表指向。

2、HashMap 排序题

3、Collection 包结构,与 Collections 的区别

Collection是集合类的上级接口,实现有 LinkedList、ArrayList

Collections是集合类的一个帮助类, 它包含有各种有关集合操作的静态多态方法,用于实现对各种集合的搜索、排序、线程安全化等操作。此类不能实例化,就像一个工具类,服务于Java的Collection框架。

4、带集合参数的构造器

5、说说 List,Set,Map 三者的区别

6、并发集合和普通集合如何区别?

7、Map 有什么特点

8、集合类存放于 Java.util 包中, 主要有几 种接口

9、什么是 list 接口

10、说说 ArrayList(数组)

11、Vector( 数组实现、 线程同步)

12、说说 LinkList( 链表)

13、什么 Set 集合

14、HashSet( Hash 表)

15、什么是 TreeSet( 二叉树)

16、List 和 Map、Set 的区别?

17、数组和 链表分别比较适合用于什么场景,为什么?

18、说说 ConcurrentHashMap

19、Java 中 ArrayList 和 LinkedList 区别?

20、TreeMap(可 排序)

21、请用两个队列模拟堆栈结构?

22、Map 中的 key 和 value 可以为 null?

23、 数据结构基础之双向 链表

24、HashMap 的底层实现

25、ConcurrentHashMap 和 Hashtable 的区别

26、说出 ArrayList,Vector,LinkedList 的存储性能和特性

27、你所知道的集合类都有哪些?主要方法?

28、HashMap 原理,java8 做了什么改变

29、poll()方法和 remove()方法的区别?

30、写一段代码在遍历 ArrayList 时移除一个元素

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值