Core Java 初级
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Core Java 初级相关的知识,希望对你有一定的参考价值。
java基本概念
1.java语言的优点?
1>是纯面向对象编程(面向对象:以实际物体为参照,贴合生活实际)
2>与平台无关(一次开发,多平台使用)
3>有很多类库,供开发者使用
4>去除了c语言里的指针,使开发更简洁
2.面想对象的特征?
面向对象的特征有封装,继承,多态,抽象
1>封装:私有化属性,并提供get,set方法,这样可以防止其他对象随意修改属性的值
2>继承:用extends关键字标识,子类可继承父类的非私有化的属性以及方法,减少了开发周期
3>多态:基于继承而实现,继承是为了更好的体现多态,有向上转型(用的较多)和向上转型之分,子类对象指向父类
引用,子类重写父类方法,可以定义多个子类,提高开发效率
4>抽象:用关键字abstract关键字标识,抽离对象的共有属性以及行为,让子类实现,接口作为抽象的一种,可以
实现多继承
3,什么是java虚拟机?为什么java被称作与平台无关的语言?
1>java虚拟机jvm,是一个集成于jdk上的仿真微型计算系统。
2>由于java有jvm支持,故移植性强,可在多平台上开发使用
4.指针==引用
5.Java支持的数据类类型有哪些?什么是自动拆装箱?
1>整型:byte ,short,int,long
浮点型:float,double
字符型:char
布尔类型:boolean
2>基本数据类型可以与其包装类自动转化
6,什么是值传递和引用传递
值传递:传递的是指,传递时使用的是值的副本
引用传递:传递的是引用,传递时使用的是引用的副本
7.一个java源文件中是否可以包含多个类?有什么限制?
可以,但只能包含一个与类名相同的public类
8,静态变量与实例变量的区别
静态变量:不依赖对象而存在,在类加载时即加载,只加载一次一类,作用域为整个类
成员变量:依赖对象而存在,对象调用时才加载,作用域为本方法体内
9.不通过构造函数也能创建对象吗?
不能。
10.是否可以从一个静态方法内部发出对非静态方法的调用?
不能直接调用,必须要由对象调用此方法
11.如何实现对象克隆?
实现Clonable接口, 用clone()方法
12.匿名内部类是否可以继承其他类?是否可以实现接口?
不能继承其他类,只能继承一个父类或实现一个接口
13.内部类可以包含外部类的成员吗?有没有什么限制?
完全可以,不过静态内部类,不能调用外部类的非静态成员
14.静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同?
静态内部类也是定义在另一个类里面的类,只不过在类的前面多了一个关键字static,不过静态内部类,不能调用外部类的非静态成员。
内部类(Inner Class)可以调用外部类的成员。
15.列出自己常用的 jdk 包.
java.util,java.sql,java.io.Date,java.awt,java.lang
16.JDK,JRE,JVM的区别?
JDK: Java Development ToolKit(Java开发工具包)。JDK是整个JAVA的核心,包括了Java运行环境(JRE),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。
JRE: Java运行环境(Java Runtime Envirnment),及java开发平台
JVM:Java Virtual Mechinal(JAVA虚拟机)它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能。
面向对象编程
1.java中的方法覆盖(Override)和方法重载(Overloading)是什么意思?
方法覆盖(Override):发生在有继承关系的类之间,子类覆盖父类方法名相同的方法
方法重载(Overloading):发生在同一类中,方法名相同,而参数列表不同
2.Overload 和 Override 的区别? Overloaded 的方法是否可以改变返回值的类型?
1>1.Overload必须在同一类中实现,而Override发生在有继承关系的类之间
2.Overload的参数列表必须发生改变,而Override可以相同,且其访问权限必须必父类的大,抛出的异常必须必父类的少
2>不可以通过改变返回值的类型来达到重载的效果,若两个方法参数列表不同则是可以的
3.为什么不能根据返回类型来区分重载?
有些方法(map.remove(p))虽然有返回值类型,但基本不用,若有两个参数列表相同的方法,仅仅是返回类型不一致,
java就无法确定编程者倒底是想调用哪个方法了,因为它无法通过返回结果类型来判断。
4.Java 中,什么是构造函数?什么是构造函数重载?
1>构造函数:创建对象是初始化对象的成员方法。
2>可以通过重载构造方法来表达对象的各种多种初始化行为
5.构造器 Constructor 是否可被 Override?
构造器不可以被重写
6.Java 支持多继承么?
不能
7.接口和抽象类的区别是什么?
接口方法都是抽象的,且其成员变量的修饰符必须为private static final,,且不能有private方法,可以被很多其他类实现
抽象类可以有非抽象方法,且变量也没有此要求,只能被单继承
8.抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(native),是否可同时被synchronized修饰?
不能
9.两个对象值相同(x.equals(y) == true),但却可有不同的 hash code,这句话对不对?
对
10.接口是否可继承(extends)接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)?
可以
11.当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
值传递
12.是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?
不能直接调用
关键字
1.”static” 关键字是什么意思?Java 中是否可以覆盖(override) 一个 private 或者是 static 的方法?
静态,不能
2.是否可以在 static 环境中访问非 static 变量?
不能
3.访问修饰符 public, private, protected, 以及不写(默认)时的区别?
public:随便调用
protected:其他包不可调用,有继承关系中
default:同一包下
private:本类中
4.volatile关键字是否能保证线程安全?
不能,是对变量写保护
5.Java 有没有 goto?
有
6.Java 中的 final关键字有哪些用法?
修饰变量:则此变量不能被改变,即变为常量,若为引用数据类型,则此变量不能指向另一个对象
修饰方法:此方法不能被重写
修饰类:此类不能被继承
7.final, finally, finalize 的区别?
final为修饰符,finally为异常机制里用于输出一些必要数据,finallize为JVM里用于回收垃圾的方法
基本类型与运算
1.说说 & 和 && 的区别?
&和&&都是逻辑运算符前后都为true则为true
&前后都要判断,且其也是位运算符的一种
&&(短路与)若前面为false则不进行后面的判断,直接显示为true
2.用最有效率的方法算出 2 乘以 8 等於几?
2<<3
3.存在使 i + 1 < i的数吗?
存在, -1+1的二进制本应该是 100000000000000000000000000000000,由于1在第33位
4.float f=3.4;是否正确?
不正确
5.int 和 Integer 有什么区别?
基本数据类型和其包装类
6.char 型变量中能不能存贮一个中文汉字?为什么?
能,char用来存储Unicode编码集
7.Math.round(11.5) 等于多少? Math.round(-11.5)等于多少?
12,-11
8.short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
有,int不能直接转化为short;没错,不涉及转化
9.自动装箱和拆箱
基本数据类型与其包装类的自动转转化
10.switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?
byte,可以,long不行,String在1,7JDK以上版本是可以的
11.数据类型之间的转换
1)低级到高级的自动类型转换;
2)高级到低级的强制类型转换(会导致溢出或丢失精度);
3)基本类型向类类型转换;
简单类型的变量转换为相应的包装类,可以利用包装类的构造函数。即:Boolean(boolean value)
而在各个包装类中,总有形为××Value()的方法,来得到其对应的简单类型数据。
4)基本类型向字符串的转换;
其它类型向字符串的转换
①调用类的串转换方法:X.toString();
②自动转换:X+“”;
③使用String的方法:String.volueOf(X);
字符串向其他类型转化
int i = Integer.parseInt( s );
String
1.在Java中String是什么?String是一种数据类型?
String是一个类,不是
2.有什么不同的方法来创建String对象的?
1>String s="SB";(缓冲池)
2>String s=new String("SB");
3.写一个方法来检查输入的字符串是否是回文(对称)?
public void circle(String text){
int length = text.length();
for(int i=0;i<length/2;i++){
if(text.charAt(i)!=text.charAt(length-i-1)){
return false;
}
}
return true;
}
4.写一个方法从字符串中删除给定的字符?
public void change(String aa,String bb){
String newStr =aa.replace(bb,"");//替换字符串中的字符为空
}
5.怎样才能转换字符串大写或小写?
"SS".toLowerCase();
"ss".toUpperCase();
6.如何在java程序比较两个字符串?
大小:String.compareTo
长度:length();
是否相同:equals();
7.我们可否在switch 条件中使用字符串?
有版本限制
8.下面代码的运行结果为?
9.数组有没有 length() 方法? String 有没有 length() 方法?
没有,有
10.是否可以继承 String 类?
不可以,是被final修饰的
11.String 和StringBuilder、StringBuffer 的区别?
都是对字符串进行操作的类
String是不可变类,若要改变其值,需要很多中间变量,而StringBuilder、StringBuffer 是可变的,
而运行速度StringBuilder>>StringBuffer,但是StringBuffer线程安全
1.如果要操作少量的数据用 = String
2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
12.将字符 “12345” 转换成 long 型
long a=Lang.parseLang(“12345”);
13.为了显示 myStr = 23 这样的结果,写出在控制台输入的命令
14.String s = "Hello";s = s + " world!”; 这两行代码执行后,原始的 String 对象中的内容到底变了没有?
没有
15.如何把一段逗号分割的字符串转换成一个数组?
String[] ss="wewer,rtre".split(",")
16.下面这条语句一共创建了多少个对象:String s=“a”+”b”+”c”+”d”;
一个
17.String 和 StringBuffer 的区别?
可变类与不可变类
日期与时间
1.如何取得年月日、小时分钟秒?
String sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
2.如何取得从1970年1月1日0时0分0秒到现在的毫秒数?
Calendar.getInstance().getTimeInMillis()
3.如何取得某月的最后一天?
Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH);
4.如何格式化日期?
SimpleDateFormat time=new SimpleDateFormat("yyyy MM dd HH mm ss")
5.打印昨天的当前时刻。
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
System.out.println(cal.getTime());
正则表达式
1.简述正则表达式及其用途 51
2.Java中是如何支持正则表达式操作的 51
八、循环控制语句
1.在Java中,如何跳出当前的多重嵌套循环?
在想要跳出的循环前面设置key,在break(key);
2.用Java写一个冒泡排序
Java异常机制
1.Java异常体系
NopointerException
RuntimeException ArrayIndexOutofException
(自己蠢,不捕获) ArithmeticException
ClassCastException
Exception
IOException
CheckedException
(需要捕获) SQLException
throwable
VirtualMarchine Error
Error OutOfMemory Error
ThreadDeath
2.运行时异常和非运行时异常
3.异常的处理方式
1>用try...catch机制来捕捉
2>向上抛出(throwable)
4.Throwable类中的常用方法
1>getMessage() 返回此 throwable 的详细消息字符串。
2>printstacktrace() 将此 throwable 及其追踪输出至标准错误流。
5.异常处理的一般原则
具体明确,提早抛出,延迟捕获
6.扩展:错误和异常的区别(Error vs Exception)
错误,不能捕获,而异常可以
7.try{} 里有一个 return 语句,那么紧跟在这个 try 后的 finally{} 里的 code 会不会被执行,什么时候被执行,在 return 前还是后? 59
会
8.Java 语言如何进行异常处理,关键字:throws、throw、try、catch、finally 分别如何使用?
throws是获取异常
throw是抛出异常
try是将会发生异常的语句括起来,从而进行异常的处理,
catch是如果有异常就会执行他里面的语句,
而finally不论是否有异常都会进行执行的语句。
9.运行时异常与受检异常有何异同?
10.请写出 5 种常见到的runtime exception。
11.error 和 exception 有什么区别?
JAVA中的集合
1.HashSet vs. TreeSet vs. LinkedHashSet 比较
Set接口继承了Collection接口。Set中不包含重复的元素
如果你需要一个访问快速的Set,你应该使用HashSet;不保证有序
HashSet集合判断两个元素相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode()方法返回值相 等
当你需要一个排序的Set,你应该使用TreeSet;TreeSet可以确保集合元素处于排序状态
当你需要记录下插入时的顺序时,你应该使用LinedHashSet。
,当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素。
LinkedHashSet在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet。
2.Java集合类框架的基本接口有哪些?
List,Set,Map
3.为什么集合类没有实现 Cloneable 和 Serializable 接口?
集合类接口指定了一组叫做元素的对象。集合类接口的每一种具体的实现类都可以选择以它自己的方式对元素进行保存和排序。
有的集合类允许重复的键,有些不允许。
4.什么是迭代器(Iterator)?
迭代器(Iterator)模式,又叫做游标模式,它的含义是,提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。
5.Iterator和ListIterator的区别是什么?
都是迭代器,当需要对集合中元素进行遍历不需要干涉其遍历过程时,这两种迭代器都可以使用
1>.使用范围不同,Iterator可以应用于所有的集合,Set、List和Map和这些集合的子类型。而ListIterator只能用于List及其子类型。
2>.ListIterator有add方法,可以向List中添加对象,而Iterator不能。
3>.ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator不可以。
4>.ListIterator可以定位当前索引的位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。
5>.都可实现删除操作,但是ListIterator可以实现对象的修改,set()方法可以实现。Iterator仅能遍历,不能修改。
6.快速失败(fail-fast)和安全失败(fail-safe)的区别是什么?
fail-fast机制在遍历一个集合时,当集合结构被修改,会抛出Concurrent Modification Exception。
fail-safe任何对集合结构的修改都会在一个复制的集合上进行修改,因此不会抛出ConcurrentModificationException
7.Java 中的 HashMap 的工作原理是什么?
8.hashCode() 和 equals() 方法的重要性体现在什么地方?
Java中的HashMap()使用hashcode()和equals()方法来确定键值对的索引,若没正确的实现这两个方法,两个不同的键可能会有相同的hash值
且这两个方法也用来实现这两个方法,也可用来发现重复元素
9.HashMap 和 Hashtable 有什么区别?
HashMap是HashTable的轻量级实现
1>同步性:HashMap是线程不安全的,不同步
2>历史原因:HashTable是基于陈旧的Dictionary类,而HashMap是java1.2引进的Map接口的一个实现
3>值:只有HashSet可以以空值作为key/value
10.数组(Array)和列表(ArrayList)有什么区别?什么时候应该使用 Array 而不是 ArrayList?
列表只是动态数组,故当数组的元素个数不确定时,可使用ArrayList,数目确定时可使用Array
11.ArrayList 和 LinkedList 有什么区别?
ArrayList和LinkedList都实现了List,故都是有序且可以重复的
1>ArrayList是基于动态数组的数据结构,而LinkedList是基于链表的数据结构
2>对于随机访问get和set,ArrayList性能要优于LinkedList,因为LinkedList要移动指针
3>对于新增add和删除delete操作,LinkedList要优于ArrayList,因为ArrayList要移动数据
12.Comparable 和Comparator 接口是干什么的?列出它们的区别。
是JAVA的接口,对集合中元素进行比较,排序的
13.Java集合类框架的最佳实践有哪些?
1>假如元素的大小是固定的,且事先知道,就该用Array而不是ArrayList
2>有些集合允许指定初始容量。因此,如果我们能估计出存储元素的数目,我们可以设置初始容量来避免重新计算hash值或者扩容
3>为了类型安全,可读性和健壮性的原因总要使用泛型。使用泛型还能避免运行时的ClassCastException
4>使用JDK提供的不变类作为Map的键可以避免我们为自己的类实现hashCode和equals()方法
5>编程时接口优于实现
14.Enumeration 接口和 Iterator 接口的区别有哪些?
15.HashSet 和 TreeSet 有什么区别?
相同点:单列集合,元素不可重复
不同点
1>底层存储的数据结构不同
HashSet底层用的是HashMap哈希表结构存储,而TreeSet底层用的是TreeMap树结构存储
2>存储时保证数据唯一性依据不同
HashSet是通过复写hashCode()方法和equals()方法来保证的,而TreeSet通过Compareable接口的compareTo()方法来保证的
3>有序性不一样
HashSet无序,TreeSet有序
16.List、Set、Map 是否继承自 Collection 接口?
list,Set是,而Map不是
17.说出 ArrayList、Vector、LinkedList 的存储性能和特性?
ArrayList和Vevtor,索引快,而插入慢《可以直接按序号索引,当插入是涉及数组元素的移动》
Vector<线程安全,性能各方面比ArrayList差>
LinkedList插入快,而索引慢《双向链表》
18.List、Map、Set 三个接口存储元素时各有什么特点?
List----有序,可重复
Set-----无序,不可重复
Map-----key,value键值对
19.判断下列语句是否正确,如果有错误,请指出错误所在? 68
20.你是怎么理解 Java 泛型的?
泛型为更好的封装数据提供了一个良好的捷径
21.Collection和Collections的区别?
Collection是集合类的上层接口,其子接口有List,set等,而Collections为集合类提供了一些静态方法实现对各种结合的排序,搜索,以及线程
安全化操作等
22.TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?
输入输出流
1.Java中如何实现序列化,有什么意义?
2.Java中有几种类型的流? 70
3.编程实现文件拷贝。(这个题目在笔试的时候经常出现,下面的代码给出了两种实现方案) 70
4.写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数。 72
5.如何用Java代码列出一个目录下所有的文件? 73
6. 下面哪个流类属于面向字符的输入流? 74
7. 阅读 Shape 和 Circle 两个类的定义。在序列化一个 Circle 的对象 circle 到文件时,下面哪个字段会被保存到文件中? 76
8. 什么是 Java 序列化,如何实现 Java 序列化?
JAVA与内存
1.堆栈和堆
Java中的内存分为堆内存和栈内存
堆内存,一般用于存放对象数据,或者方法体以为的变量等
栈内存,用于存放方法体内的临时数据,作用域为方法体内
2.java中的垃圾回收机制
JVM会不定时的清除不用的数据,以释放内存,也可手动释放System.gc();
3.GC线程是否为守护线程?(是)
4.解释内存中的栈(stack)、堆(heap)和静态存储区的用法。
栈:又分为三个部分--基本类型变量区,执行环境上下文,操作指令区=====只保存基本数据类型和自定义对象的引用
堆:主要存取对象类型(所有线程共享)
静态存储区:存储所有的class和static变量,所有线程共享
5.Java 中会存在内存泄漏吗,请简单描述。
会,
6.GC 是什么?为什么要有 GC?
garbage collection(垃圾回收器),为了对无用的数据清除,已释放内存
7.描述一下 JVM 加载 class 文件的原理机制?
加载
把类的.class文件中的数据读入内存中,通常是创建一个字节数组读入.class文件,然后产生与所加载类对应的class对象。此时的对象还不稳重,类还不可以使用。
连接
当类被加载后就进入连接阶段,这一阶段包括验证、准备(为静态变量分配内存并设置默认的初始值)和解析(将符号引用替换为直接引用)三个步骤
初始化
1)如果类存在直接的父类并且这个类还没有被初始化,那么就先初始化父类;
2)如果类中存在初始化语句,就依次执行这些初始化语句。
Java多线程
3.进程和线程的区别是什么?
进程是资源分配的基本单位
线程是CPU独立运行和独立调度的基本单位
联系:线程和进程都是操作系统所运行的程序运行的基本单元
区别:进程拥有独立的空间地址,一个进程奔溃后,在保护模式下不会对其他进程产生影响
线程只是一个进程的不同执行路径,线程有自己的堆栈和局部变量
但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉。
4.创建线程有几种不同的方式?你喜欢哪一种?为什么?
1>继承Thread类
2>实现Runnable接口
3>使用Executor框架来创建线程池
实现Runnable,不用继承Thread类,在应用设计中已经继承了其他的类,而java中并不能实现多继承,而是可以实现多接口的
5.概括的解释下线程的几种可用状态。
1>新建(new)新建一个线程对象
2>可运行(runnable):线程被创建后,其他线程(main)调用了该对象的start()方法,该状态的线程位于可运行线程池中
,等待被线程调度选中,获取CPU使用权
3>运行(Running)可运行状态的线程获得了cpu时间片,执行程序代码
4>阻塞(block):由于某种原因线程放弃了CPU使用权,意即让出了CPU timeslice
5>死亡(dead线程结束了其生命周期)
6.同步方法和同步代码块的区别是什么?
同步方法作用于整个方法,同步代码块作用于整个代码块而已。
7.在监视器(Monitor)内部,是如何做线程同步的?程序应该做哪种级别的同步?
监听器和锁是一块使用的,监视器监视一块同步代码块,确保一次只有一个线程执行同步代码块每一个监视器都和一个对象引用相关联
线程在获取锁之前不允许执行同步代码块
在jvm中每个对象通过某种逻辑关连监视器,为了实现监视器的互斥功能,每个对象都关联着一把锁,一旦方法或者代码块被
synchronized修饰,name这部分就放入了监视器的监视范围,确保一次只能有一个线程执行该部分的代码,线程在去锁之前不允
许执行该部分额代码
8.什么是死锁(deadlock)?
两个线程或两个以上线程都在等待对方执行完毕才能往下继续执行的时候就发生了死锁,线程陷入无限等待之中
9.如何确保 N 个线程可以访问 N 个资源同时又不导致死锁?
指定获取锁的顺序,并强制线程按照指定的顺序执行
10.sleep() 和 wait() 有什么区别?
sleep不释放同步锁,且可控制时间
wait释放同步锁,不可控制时间,需要用notify()来唤醒
11.sleep() 和 yield() 有什么区别?
1>sleep()不考虑优先级,而yield()会考虑优先级会给相同的优先级或者更高的优先级以运行的机会
2>线程执行sleep()方法后转入Block状态,而执行yield之后会转向就绪状态(ready)
3>sleep()声明抛出InterruptExcwption,而yield没有此声明
4>sleep()比yield()更有移植性。
12.当一个线程进入一个对象的 synchronized 方法 A 之后,其它线程是否可进入此对象的 synchronized 方法?
不能
13.请说出与线程同步相关的方法。
Synchronized,wait ,notify
14.synchronized 关键字的用法?
synchronized用于
15.举例说明同步和异步。
16.启动一个线程是用 run() 还是 start() 方法?
start()
17.什么是线程池(thread pool)?
18. 线程的基本状态以及状态之间的关系?
1>新建(new)新建一个线程对象
2>可运行(runnable):线程被创建后,其他线程(main)调用了该对象的start()方法,该状态的线程位于可运行线程池中
,等待被线程调度选中,获取CPU使用权
3>运行(Running)可运行状态的线程获得了cpu时间片,执行程序代码
4>阻塞(block):由于某种原因线程放弃了CPU使用权,意即让出了CPU timeslice
5>死亡(dead线程结束了其生命周期)
19.死锁的必要条件?怎么克服?
如果一个进程集合里面的每个进程都在等待这个集合中的一个进程才能继续往下执行,若无外力他们将无法推进,这种情况即为死锁
1>互斥条件:进程对所分配到的资源不允许其他进程进行访问,若其他进程访问该资源,只能等待,
直至占有该资源的进程使用完成后释放该资源
2>请求和保持条件:进程获得一定的资源之后,又对其他资源发出请求,但是该资源可能被其他进程占有,此事请求阻塞,但又对自己获得的资源保持不放
3>不可剥夺条件:是指进程已获得的资源,在未完成使用之前,不可被剥夺,只能在使用完后自己释放
4>环路等待条件:是指进程发生死锁后,必然存在一个进程--资源之间的环形链
20.死锁的解决方法:
1>预防死锁:通过设置一些限制条件,去破坏产生死锁的必要条件
2>避免死锁:在资源分配过程中,使用某种方法避免系统进入不安全的状态,从而避免发生死锁
3>检测死锁:允许死锁的发生,但是通过系统的检测之后,采取一些措施,将死锁清除掉
4>解除死锁:该方法与检测死锁配合使用
JAVA的反射
1.Class.forName(String className)这个方法的作用
返回与给定字符串名称相关联的类或接口的class对象
3.获得一个类的类对象有哪些方式?
总共有四种
1>通过了类名的字符串获取对象
2>通过类本身来获取对象
3>通过了类名.class获取对象
4>通过子类的实例获取父类的对象
4.如何通过反射创建对象?
getClass().getname();
5.如何通过反射获取和设置对象私有字段的值?
可以通过类对象的getDeclaredField()方法字段(Field)对象,然后再通过字段对象的setAccessible(true)将其设置为可以访问
接下来就可以通过get/set方法来获取/设置字段的值了。下面的代码实现了一个反射的工具类,其中的两个静态方法分别用于获取和设
置私有字段的值,字段可以是基本类型也可以是对象类型且支持多级对象操作,例如ReflectionUtil.get(dog, "owner.car.engine.id");可以获得dog对象的主人的汽车的引擎的ID号。
6.如何通过反射调用对象的方法?
.getMethod()
梳理总结:
1.集合类,IO,线程,以及反射掌握的很差,需要好好补补
以上是关于Core Java 初级的主要内容,如果未能解决你的问题,请参考以下文章