java基础

Posted 沉得住气,沉淀自己。

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础相关的知识,希望对你有一定的参考价值。

1.java数据类型

 

 

 

基本数据类型(原始数据类型) (3大类 8小类) 1个字节=8位 (1B=8bit) 【位是存储数据的最小单位,而字节是存储数据的基本单位】

 

byte --> 1个字节 (-128~127)能存最大的数127

short -->2个字节 (-32768~32767)约3万

整数类型 int -->4个字节 约21亿

(默认使用int) long -->8个字节 -263 ~ 263-1 后面加L

数值型

浮点类型 float-->4个字节 单精度(科学计数法 e2 -->10 *10)后面加F

(默认使用double,不精确,不要做比较) double-->8个字节 双精度

 

 

字符型 char --> 2个字节 Unicode 编码表 允许有65536个

例如:‘A’ 字符 “A”字符串

 

布尔型 boolean --> 1位 true false

 

引用数据类型 -------> 4字节

 

类 class

接口 interface

数组

 

 

2.final, finally, finalize的区别

 

final 用于声明属性,方法和类, 分别表示属性不可变, 方法不可覆盖, 类不可继承.

finally 是异常处理语句结构的一部分,表示总是执行.

finalize 是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等. JVM不保证此方法总被调用.

 

 

3.静态变量与实例变量的区别

 

一种是被static关键字修饰的变量,叫类变量或者静态变量。另一种没有static修饰,为实例变量。类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类的所有实例共享。静态变量可以直接通过类名进行访问,其生命周期取决于类的生命周期。而实例变量取决于类的实例。每创建一个实例,java虚拟机就会为实例变量分配一次内存,实例变量位于堆区中,其生命周期取决于实例的生命周期。

 

 

4.抽象类和接口有什么样的区别

 

abstract class 表示的是is a关系,interface表示的是like a关系。抽象类强调的是从属关系,接口强调的是功能。

相同点:

1、都不能被实例化。

2、接口的实现类和抽象类的子类只有全部实现了接口或者抽象类中的方法后才可以被实例化。

不同点:

1、接口只能定义抽象方法不能实现方法,抽象类既可以定义抽象方法,也可以实现方法。

2、单继承,多实现。接口可以实现多个,只能继承一个抽象类。

3、接口强调的是功能,抽象类强调的是所属关系。

4、接口中的所有成员变量 为public static final, 静态不可修改,当然必须初始化。接口中的所有方法都是public abstract 公开抽象的。而且不能有构造方法。

抽象类就比较自由了,和普通的类差不多,可以有抽象方法也可以没有,可以有正常的方法,也可以没有

 

 

5.string stringbuffer stringbuilder的区别

 

1)可变与不可变

  String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的。

  StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,可知这两种对象都是可变的。

2)是否多线程安全

  String中的对象是不可变的,也就可以理解为常量,显然线程安全。

  AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。

  StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。

 

最后,如果程序不是多线程的,那么使用StringBuilder效率高于StringBuffer。

 

 

6.重写和重载的特点和区别

a) 重载

简单说,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。

b) 重写

重写指的是在Java的子类与父类中有两个名称、参数列表和返回值类型都相同的方法的情况。由于他们具有相同的方法签名,所以子类中的新方法将覆盖父类中原有的方法。

重写是父类与子类之间的多态性,对父类的函数进行重新定义。

c) 区别

重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重载是一个类中多态性的一种表现。

而重写是父类与子类之间的多态性,是对父类的函数进行重新定义。

 

 

 

7.线程的状态都有哪些?创建一个线程的常用方法有哪些?

 

第一是创建(New)状态。在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态。

  第二是就绪(Runnable)状态。当调用了线程对象的start方法之后,该线程就进入了就绪状态,但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。

  第三是运行(Running)状态。线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,开始运行run函数当中的代码。

  第四是阻塞(Blocked)状态。线程正在运行的时候,被暂停,通常是为了等待某个时间的发生(比如说某项资源就绪)之后再继续运行。sleep,suspend,wait等方法都可以导致线程阻塞。

  第五是死亡(Terminated)状态。如果一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡。对于已经死亡的线程,无法再使用start方法令其进入就绪。

 

一、继承Thread类创建线程子类

1.在这子类中重写run方法,在run方法内写线程任务代码

2.创建该子类实例,即是创建了一个线程实例

3.调用该实例的start方法来启动该线程

二、建一个类去实现Runnable接口

1.该类去实现接口的run方法,run方法内写线程任务代码

2.创建该类实例,把该实例当作一个标记target传给Thread类,如:Thread t = new Thread(该类实例);即创建一个线程对象

3.调用线程的star方法来启用该线程

 

 

8.Java 中 sleep 方法和 wait 方法的区别

(1).sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,将执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。

(2).wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

 

 

9.写出一个单例类(Singleton)

(1)、单例类只能有一个实例。(2)、单例类必须自己创建自己的唯一实例。(3)、单例类必须给所有其他对象提供这一实例。单例模式主要分为饿汉式和懒汉式。

//私有构造 私有静态实例 对外静态构造

1.饥汉式单例

public class Singleton {

private Singleton(){};

private static Singleton instance = new Singleton();

public static Singleton getInstance(){

return instance;

}

}

 

 

2.懒汉式单例

public class Singleton {

private Singleton(){}

private static Singleton instance = null;

public static synchronized Singleton getInstance(){

return instance==null?new Singleton():instance;

}

}

 

 

10.异常的抛出,throws、throw、try、catch、finally分别有什么意义

(1)try:指定一块预防所有“异常”的程序。

(2)catch:紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的“异常”的类型。

(3)throw:用来明确地抛出一个“异常”。//动作

(4)throws:标明一个成员函数可能抛出的各种“异常”。//声明

(5)finally:不管发生什么“异常”都被执行一段代码

 

 

11.常见异常RuntimeException

 

1 java.lang.ArrayIndexOutOfBoundsException 数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。

2 java.lang.ArithmeticException 算术条件异常。譬如:整数除零等。

3 java.lang.SecurityException 安全性异常

4 java.lang.IllegalArgumentException 非法参数异常

5 java.lang.ArrayStoreException 数组中包含不兼容的值抛出的异常

6 java.lang.NegativeArraySizeException 数组长度为负异常

7 java.lang.NullPointerException 空指针异常。

 

12.JDBC访问数据库的步骤

 

1) 加载JDBC驱动程序

2) 提供JDBC连接的URL

3) 创建数据库的连接

4) 创建一个Statement

5) 执行SQL语句

6) 处理结果。两种情况:1、执行更新返回的是本次操作影响到的记录数。2、执行查询返回的结果是一个ResultSet对象。

7) 关闭JDBC对象

 

 

13.简述Servlet的生命周期

 

Servlet生命周期分为三个阶段:

1,初始化阶段 调用init()方法

2,响应客户请求阶段 调用service()方法

3,终止阶段 调用destroy()方法

 

14.事务的四大特性

 

a) 原子性(Atomicity)

事务中的所有操作要么全部执行,要么都不执行。如果事务没有原子性的保证,那么在发生系统 故障的情况下,数据库就有可能处于不一致状态。

b) 一致性(Consistency)

主要强调的是,如果在执行事务之前数据库是一致的,那么在执行事务之后数据库也还是一致的。所谓一致性简单地说就是数据库中数据的完整性,包括它们的正确性。

c) 隔离性(Isolation)

即使多个事务并发(同时)执行,每个事务都感觉不到系统中有其他的事务在执行,因而也就能保证数据库的一致性。

d) 持久性(Durability)

事务成功执行后它对数据库的修改是永久的,即使系统出现故障也不受影响

以上是关于java基础的主要内容,如果未能解决你的问题,请参考以下文章

java语法基础,具体内容

Java基础(十五):异常处理

java基础测试题

Java基础| Java概述与基础语法案例

夯实Java基础系列目录

一道java基础理论题