指南针Java_java基础知识学习整理

Java的基本类型有哪些?

a) 8种基本类型:byte short int long float double char boolean

JDBC访问数据库的步骤

1) 加载JDBC驱动程序

2) 提供JDBC连接的URL

3) 创建数据库的连接

4) 创建一个Statement

5) 执行SQL语句

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

7) 关闭JDBC对象

重写和重载的特点和区别?

a) 重载

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

b) 重写

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

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

c) 区别

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

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

事务的特性有那些

a) 原子性(Atomicity)

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

b) 一致性(Consistency)

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

c) 隔离性(Isolation)

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

d) 持久性(Durability)

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

final, finally, finalize的区别。

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

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

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

简述Servlet的生命周期

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

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

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

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

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

第一是创建(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方法来启用该线程

值传递和引用传递的区别和联系

值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。

引用传递:(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。

阐述你对构造函数以及常量的理解?

构造函数是类在实例化成对象时用来做一些事情的,而这些事情是该对象被创建时必须做的事。例如初始化属性,但不限于此。另外我们可以对构造函数进行重载,是让我们在类的实例化时能够更多元化。

简单地说,用final修饰过的变量就叫常量,常量一旦定义了就不允许被修改。往大的说,定义常量,是不想让某些固定的属性或方法被调用后改变了值,或者被继承后重写。往底层说,常量存放在常量池里,在类加载之前就已经被加载,且不会改变。

List、Map、Set三个接口,存取元素时,各有什么特点?

List 以特定次序来持有元素,可有重复元素。即,有序可重复。

访问时可以使用for循环,foreach循环,iterator迭代器 迭代。

Set 无法拥有重复元素,内部排序。即,无序不可重复。

访问时可以使用foreach循环,iterator迭代器 迭代。

Map 保存 key-value 值,一一映射。key值 是无序,不重复的。value值可重复。

访问时可以map中key值转为为set存储,然后迭代这个set,用map.get(key)获取value

请写出string  stringbuffer  stringbuilder的区别

1)可变与不可变

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

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

2)是否多线程安全

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

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

StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。

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

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

写出一个单例类(Singleton)

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;

}

}

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

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

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

(1)抽象类中可以包含抽象方法和实例方法,而接口中只能定义抽象方法。

(2)实现接口的类一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。

(3)继承只有单根继承性,一个类只内能继承一个抽象父类,但是可以实现多个接口。

(4)抽象类中可以有构造方法,接口中不能定义抽象方法。

(5)接口中定义的变量都是静态常量。

Integer与int的区别(封装类和基本类型的区别)

(1)int是java提供的8种原始数据类型之一。Java为每个原始类型提供了封装类,Integer是java为int提供的封装类。

(2)int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,例如,要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer。

(3)在JSP开发中,Integer的默认为null,所以用el表达式在文本框中显示时,值为空白字符串,而int默认的默认值为0,所以用el表达式在文本框中显示时,结果为0,所以,int不适合作为web层的表单数据的类型。

(4)在Hibernate中,如果将OID定义为Integer类型,那么Hibernate就可以根据其值是否为null而判断一个对象是否是临时的,如果将OID定义为了int类型,还需要在hbm映射文件中设置其unsaved-value属性为0

(5)Integer提供了多个与整数相关的操作方法,例如,将一个字符串转换成整数,Integer中还定义了表示整数的最大值和最小值的常量。

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

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

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

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

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

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

单例模式的两种形式有什么区别

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

public class Singleton {

private Singleton() {}

privatestatic Singleton single=null;

Public synchronizedstatic Singleton getInstance() {

if (single == null) {

single = new Singleton();

}

return single;

}

}

只有在调用getInstance方法时才会创建该类的对象。

饿汉式单例模式代码如下:

public class Singleton1 {

private Singleton1() {}

privatestaticfinal Singleton1 single = new Singleton1();

//静态工厂方法

publicstatic Singleton1 getInstance() {

return single;

}

}

饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变。

Java 中 sleep 方法和 wait 方法的区别?

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值