java中一些小知识和面试问题

抽象类的总结几点:

· 抽象类与普通类相比最大的不同只是在于抽象类之中存在有抽象方法,所以在抽象类之中依
   然可以定义属性、构造方法等

· 抽象类声明时不允许使用 final,抽象类必须要求有子类,而 final 定义的类是不能够有子类的。

· 抽象类之中即使没有抽象方法,那么也不能够被直接实例

JAVA 中的主方法可以说创造了一个长的之最,其组成有许多的关键字,下面来分析每一个关键字:
  · public:指的是公共的;
  · static:使用 static 定义的方法必须由类名称调用;
  · void:是一切的开始点,只要开始了就没的返回;
  · main:是一个系统规定好的方法名称,只要是执行类,那么就找 main;
  · String args[]:字符串对象数组,用于接收初始化参数。

java 中提供了八种包装类:byte(Byte)、short(Short)、int(Integer)、long(Long)、
float(Float)、double(Double)、boolean(Boolean)、char(Character)。

但是对于包装类而言,又可以将其分为两类:

  · 对象型包装类:Boolean、Character;
  · 数值型包装类(Number 的子类):Byte、Short、Integer、Long、Float、Double;

对于包装类而言,有两个最为重要的操作:
  · 装箱:将基本数据类型变为包装类对象的形式,往往都使用各个包装类的构造方法;
  · 拆箱:从包装类之中取出包含的基本数据类型的数据,都利用 Number 类中的方法;

所有的异常都属于 Throwable 的子类。而在 Throwable 下有两个子类:
  · Error:指的是 JVM 出错,此时的程序还没有正常执行,这样的错误一般我们处理不了;
  · Exception:指的是程序之中出现的错误(异常),用户可以进行处理。
  Exception 是我们开发之中所能够处理异常的最大的总和。异常的最大父类。

为什么必须通过 start()方法才可以启动多线程呢?直接调用 run()为什么不可以?
    java 程序本身是存在单继承局限的,如果说现在一个类里面已经继承了 Thread 类,那么这个类就
不能够在去继承其他的类了,那么为了解决这样的问题,在多线程的实现之中还提供有一种 Runnable
接口,利用接口来避免单继承的局限。

利用 Runnable 接口实现的多线程要比继承 Thread 类实现的多线程更加的方便,因为有效的避免了
单继承的局限,同时不管使用何种方式都要求其必须利用 Thread 类中的 start()方法启动多线程。
除了单继承的局限之外,在开发之中如果使用了 Runnable 接口还可以更加方便的表示出数据共享的概念。

TreeSet 依靠的是 Comparable 来区分重复数据;
HashSet 依靠的是 hashCode()、equals()来区分重复数据
Set 里面不允许保存重复数据。

问题一:关于 super 和 this 问题
   · super 调用的是父类的方法或属性、this 调用的是本类的方法或属性;
   · super 调用父类构造方法时必须要放在子类构造方法的首行,而 this()调用本类构造方法时,也必
须放在构造方法的首行,所以当调用构造时,“super()”与“this()”不能同时出现;
   · this 存在有一个表示当前对象的概念,而 super 没有这样的概念

问题二:关于方法重载与方法覆写的区别?
   · 方法重载(Overloading):在同一个类之中定义了方法名称相同,且参数的内容及个数不同的方
法时,没有任何的权限限制;
  · 方法覆写(Override):在继承关系之中,子类定义了与父类相同的方法名称、参数类型及个数、
返回值,需要考虑权限问题,即:被覆写的方法不能拥有比父类更严格的访问控制权限。

面试题:请解释在 String 之中“==”和 equals()的区别?
  · “==”:属于 Java 提供的关系运算符,主要进行对象的地址数值比较;
  · “equals()”:属于 String 类中的一个方法,主要是进行字符串内容的比较。
  在以后的开发之中,一定要使用 equals()进行字符串的比较

面试题:请解释 String 类对象两种实例化的区别?
  · 构造方法:会产生两块堆内存空间,其中一块将成为垃圾,并且不会自动入池保存,用户可以通
过 intern()方法手工入池;
  · 直接赋值:只会产生一块堆内存空间,可以自动入池保存

面试题:请问 Exception 和 RuntimeException 有那些区别呢?
  · Exception 是 RuntimeException 的父类;
  · Exception 定义的其他子类(异常)都要求进行强制性的处理,而 RuntimeException 可以由用户
选择性的进行处理。

面试题:请解释 enum 和 Enum 的区别?
  · 利用 enum 关键字定义的枚举相当于使用一个类直接继承了 Enum 类;

面试题:关于 Thread 类与 Runnable 接口的区别?(请解释多线程两种实现方式的区别)
  · Thread 类是 Runnable 接口的子类;
  · 如果要想实现多线程,那么必须要有线程主体类,主体类可以继承 Thread 类或实现 Runnable
接口,但是实现接口可以有效的避免单继承局限;
  · 利用 Runnable 实现的多线程类,可以更加方便的表示出数据共享的概念

面试题:请解释 String 与 StringBuffer 的区别?
  · String 一旦声明不可改变,StringBuffer 的内容可以改变;

面试题:请解释 StringBuffer 与 StringBuilder 的区别?
  · StringBuffer 类中定义的方法都是同步方法,而 StringBuilder 定义的方法都属于异步方法;
  · StringBuffer 操作的数据更加安全但是性能较差,而 StringBuilder 在数据操作上缺乏安全性,可
是性能较高。

面试题:请问 GC 是什么?如何操作?
  · GC 指的是垃圾收集器;
  · GC 会由 JVM 不定期自动执行,或者直接调用 Runtime 类中的 gc()方法手工释放。

面试题:请解释 final、finally、finalize 的区别?
  · final:是一个关键字,定义不能被继承的类、不能被覆写的方法、常量;
  · finally:是异常处理的统一出口,关键字;
· finalize:是 Object 类的一个方法,用于执行对象回收前的处理操作。

面试题:请解释 Comparable 和 Comparator 的区别?
· java.lang.Comparable 是在类定义的时候默认实现好的接口,里面只有一个 compareTo()方法;
· java.util.Comparator 是需要单独定义一个比较规则,属于挽救功能的操作。

面试题:请解释 ArrayList、Vector 的区别?
· 这两个类都是 List 接口的子类;
· Vector 类是在 JDK 1.0 的时候提供的,里面所提供的操作方法都是同步方法,所以属于线程安全
的操作类;
· ArrayList 类是在 JDK 1.2 的时候提供的,里面所提供的方法都是异步操作方法,所以属于非线
程安全的操作类。
如果日后在开发之中,90%的情况下考虑的都是 ArrayList。

面试题:请解释 HashMap 与 Hashtable 的区别?
· HashMap 是在 JDK 1.2 的时候提供的,使用的是异步处理方式,所以属于非线程安全的操作,
同时在 HashMap 之中可以保存 null;
· Hashtable 是在 JDK 1.0 的时候提供的,使用的是同步处理方式,所以属于线程安全的操作,但
是在 Hashtable 里面不能够保存 null。
在实际的开发之中,HashMap 保存数据上由于没有限制,所以要更加方便一些,那么以后的开发之
中大部分的情况下都会优先选择 HashMap 子类操作。

原文地址:https://www.cnblogs.com/cseypzeng14/p/8335013.html

时间: 2024-10-11 18:27:46

java中一些小知识和面试问题的相关文章

java中一些小知识点(面试)

##看别人博客,发现这些题目还是有一定的迷惑性的,因此就在博客中记录下来. 3)下列选项中,哪一项能够正常编译: C A:int i = Integer.valueOf(1.2); 理由:Integer.valueOf(int/String);只有这两种参数 B:char c = "a";不能将字符串类型转化为字符型 C:byte b = 127; D: float f = 1.3;理由:不能将double型转换为float类型 4)下面代码的运行结果是:A public static

Java中常量小知识

常量分类:常量分为静态常量,非静态常量(全局常量),局部常量 静态常量:要么定义的时候赋初值,要么在静态代码块中赋值 非静态常量:要么在定义的时候赋初值,要么在代码块中赋值 局部常量:可以在定义时赋初值,也可以在使用前赋值 注意:接口中只存在一种常量,就是静态常量,必须定义时赋值,因为在接口中不存在代码块. 为什么局部变量不初始化? 局部变量,都是存在栈中的.而栈是快速重复的大量使用,如果每次使用都初始化,开销会比较大,不如,直接让程序员来手动初始化.

Java中的小细节

1.访问权限 1.private 只有本类才能被访问 2.default(默认)只有本包中才能被访问 3.protected只有子类和本包才能被访问,可以跨包. 4.public 可以在所有类中被访问 2.Java命名规范 1.类.所有单词首字母大写 2.方法.第一个单词的首字母小写 3.属性.第一个单词的首字母小写 4.包名.所有单词小写 5.常量.所有单词的字母大写.final定义的 Java中的小细节,码迷,mamicode.com

java中的小知识点

1.数据类型的相关知识点 1.1.java内置封装类的转换 java中内置的封装类Byte.Integer.Float.Double和Long都可以转换成double类型的数值:因为这些封装好的类中都有doubleValue()的方法,进而调用此方法就可以转换成Double类型的数值啦:[各个类声明的引用对象,都会有相应的xxxValue()方法,转换成自己需要的数据类型] 比如: package fdx.test.ShuJuKind; public class TestOne { public

Java Web实用小知识02

日期时间转换到页面显示 两种方式: 1. OutputStream out = response.getOutputStream(); map.put("enterFromTime", sdf.format(itemData.getEnterFromTime()));// 入单时间 2. map.put("changeTime", DateUtil.formatDate(itemData.getChangeTime()));// 转单时间 第2种好. 日期加一天 高

java类型的小知识List 等

List 复制之 浅拷贝与深拷贝 详细连接https://blog.csdn.net/never_tears/article/details/79067245 java中判断字符串是否为数字的方法的几种方法 https://blog.csdn.net/u013066244/article/details/53197756 java 基本类型详解 及 常见问题 https://blog.csdn.net/sunshoupo211/article/details/23001137 详细连接https

第40节:Java中的IO知识案例

流是一连流串的字符,是信息的通道,分输出流和输入流. IO的分类 第一种分:输入流和输出流. 第二种分:字节流和字符流. 第三种分:节点流和处理流. Java中流的分类: 流的运动方向,可分为输入流和输出流两种. 流的数据类型,可以分为字节流和字符流. 输入流类都是抽象类InputStream(字节输入流)或抽象类Reader类(字符输入流)的子类. 输出流类都是抽象类OutputStream(字节输出流)或抽象类Writer类(字符输出流)的子类. 输入流从文件输入为读取,输出流从文件输出为写

Java代理的小知识

这篇博客主要是看了一位大牛的博客所写的,该大牛写的是数据库连接池的实现,看了他的代码,顿时觉得很牛牛.所以在这里我也记录下我自己的demo,虽然不提倡重复造轮子,但是很多时候我们在重复造轮子的过程中才会有技术的提高,所以在这里我就重复造下轮子吧 这篇博客主要写的是关于Java动态代理的一个demo 情景如下: 在LOL游戏中,有个现象是代练的问题,实际游戏账号者会请代练,而这个代练在这里就是代理,帮实际游戏账号者进行帮打晋级赛的活动 UML图我就不画了,目前对这方面的知识还没去学,打算过段时间再

01 java开发前小知识

1.常见的dos命令 盘符: 进入指定的盘符下. dir : 列出当前目录下的文件以及文件夹 md : 创建目录 rd : 删除目录    注意:rd不能删除非空的文件夹,而且只能用于删除文件夹. cd : 进入指定目录 cd.. : 退回到上一级目录 cd \ : 退回到根目录 echo "hello java">a.txt  写入文本到指定文件  type a.txt 显示文件内容命令 del : 删除文件    注意:不能删除文件夹,只能删除文件. exit : 推出dos