2016年java跳槽必备宝典

合集下载

Java基础知识总结(超详细整理)

Java基础知识总结(超详细整理)

Java基础知识总结(超详细整理)Java语⾔的特点1.⾯向对象⾯向对象(OOP)就是Java语⾔的基础,也是Java语⾔的重要特性。

⾯向对象的概念:⽣活中的⼀切事物都可以被称之为对象,⽣活中随处可见的事物就是⼀个对象,我们可以将这些事物的状态特征(属性)以及⾏为特征(⽅法)提取并出来,并以固定的形式表⽰。

2.简单好⽤Java语⾔是由C和C++演变⽽来的,它省略了C语⾔中所有的难以理解、容易混淆的特性(⽐如指针),变得更加严谨、简洁、易使⽤。

3.健壮性Java的安全检查机制,将许多程序中的错误扼杀在摇蓝之中。

另外,在Java语⾔中还具备了许多保证程序稳定、健壮的特性(强类型机制、异常处理、垃圾的⾃动收集等),有效地减少了错误,使得Java应⽤程序更加健壮。

4.安全性Java通常被⽤在⽹络环境中,为此,Java提供了⼀个安全机制以防恶意代码的攻击,从⽽可以提⾼系统的安全性。

5.平台⽆关性Java平台⽆关性由Java 虚拟机实现,Java软件可以不受计算机硬件和操作系统的约束⽽在任意计算机环境下正常运⾏。

6.⽀持多线程在C++ 语⾔没有内置的多线程机制,因此必须调⽤操作系统的多线程功能来进⾏多线程程序设计,⽽ Java 语⾔却提供了多线程⽀持。

多线程机制使应⽤程序在同⼀时间并⾏执⾏多项任务,该机制使得程序能够具有更好的交互性、实时性。

7.分布式(⽀持⽹络编程)Java语⾔具有强⼤的、易于使⽤的⽹络能⼒,⾮常适合开发分布式计算的程序。

java中提供了⽹络应⽤编程接⼝(),使得我们可以通过URL、Socket等远程访问对象。

8.编译与解释共存Java语法基础标识符: ⽤来标识类名、对象名、变量名、⽅法名、类型名、数组名、⽂件名的有效字符序列。

合法的标识符:由字母、数字、下划线“_”、美元符号“$”或者“¥”组成,并且⾸字符不能是数字。

不能把java关键字和保留字作为标识符。

标识符对⼤⼩写敏感。

关键字:Java语⾔中已经赋予了特定含义的保留字: const、goto,Java版本中尚未使⽤,但以后版本可能会作为关键字使⽤变量:程序运⾏期间可以被改变的量。

2016年《Java程序设计》复习题答案.

2016年《Java程序设计》复习题答案.

《Java程序设计》复习题一、选择题:1.哪个关键字可以抛出异常?A、transientB、finallyC、throwD、static 2.对于下列代码:String str1="java";String str2="java";String str3=new String("java");StringBuffer str4=new StringBuffer("java");以下表达式的值为true 的是A)str1= =str2;B)str1= =str4;C)str2= =str3;D)str3= =str4;3.Java 的核心包中,提供编程应用的基本类的包是。

A.ng B.java.util C.java.applet D.java.rming包中封装了所有编程应用的基本类;java.util包提供实用程序类和集合类,如系统特性定义和使用、日期函数类、集合等常用工具;java.applet包为Applet提供执行需要的所有类,。

主要是访问Applet内容的通信类。

java.rmi包提供程序远程方法调用所需的类。

4.下面程序段的输出结果是StringBuffer buf1=new StringBuffer( );System.out.println(buf1.length());A.0B.nullC. 16D.85.在编译Java 程序时,用于指定生成.class 文件位置的选项是。

A.-g B.-d C.-verbose D.-vonarn-g 输出文件中加行号以及局部变量信息,为调试程序时用。

-o 对类文件进行优化编译。

-nowarn 关闭警告信息,只显示错误信息。

-verbose 显示源代码文件和字节码文件的相关信息。

-d<目录>指定存放生成的类(.class)文件的位置6.欲构造ArrayList 类的一个实例,此类继承了List 接口,下列哪个方法是正确的()A . ArrayList myList=new Object();B. List myList=new ArrayList();C.ArrayList myList=new List();D. List myList=new List(); 7.不匹配正则表达式“a?b+[.,:]\\d”的字符串是。

java必备基本知识点

java必备基本知识点

java必备基本知识点Java是目前企业中应用最广的跨平台编程语言,在学习Java的过程中,我们需要掌握下面这些Java中的必备知识点。

01JVM相关JVM作为运行的基础,很难相信对于JVM一点都不了解的人可以把java语言吃得很透。

在面试有超过3年Java的开发者的时候, JVM 几乎就是一个必问的问题了。

当然JVM不是唯一决定技术能力好坏的面试问题,但是可以佐证java开发能力的高低。

在JVM这个大类中,需要掌握的知识有:GC原理,性能调优调优:Thread Dump,分析内存结构class 二进制字节码结构, class loader 体系, class加载过程,实例创建过程方法执行过程Java各个大版本更新提供的新特性02Java的运行这个知识点是最最基本的java开发者需要掌握的,初学java,第一个肯定是教你如何在命令行中执行java程序,但是很多人一旦把java学完了,IDE用上了,就把这个都忘了。

为什么强调要知道这个呢,知道了java最纯粹的启动方式之后,你才能在启动出问题的时候,去分析当时启动的目录多少,执行命名如何,参数如何,是否有缺失等。

这样有利于你真正开发中去解决那些奇奇怪怪的可能和环境相关的问题。

在这里需要掌握的知识有:javac 编译java文件为 class 文件java 命令的使用,带package的java类如何在命令行中启动java程序涉及到的各个路径(classpath,java。

library。

path,java运行的主目录等)03数据类型这条无非就是Java中的基本类型和对象类型的掌握。

可以再了解一些JDK如何自动转换方面的知识,包括装箱拆箱等,还要注意避免装箱之后的类型相等的判断。

主要知识点:基本类型: int, long, float, double, boolean ,。

对应的对象类型:Integer 等类型到基本类型的转换,装箱和拆箱Object类型: equals, hashcodeString 类型的特点04对象和实例,对象的创建在这方面,开发者需要了解class和instance的概念以及之间的差别,这是java面向对象特性的一个基础。

java初中级程序员面试宝典-蚂蚁课堂

java初中级程序员面试宝典-蚂蚁课堂

java初中级程序员⾯试宝典-蚂蚁课堂Java基础部分&与&&区别?&和&&都是逻辑运算符,都是判断两边同时真则为真,否则为假;但是&&当第⼀个条件不成之后,后⾯的条件都不执⾏了,⽽&则还是继续执⾏,直到整个条件语句执⾏完为⽌。

使⽤ final 关键字修饰⼀个变量时,是引⽤不能变,还是引⽤的对象不能变?使⽤ final 关键字修饰⼀个变量时,是指引⽤变量不能变,引⽤变量所指向的对象中的内容还是可以改变的。

静态变量和实例变量的区别?在语法定义上的区别:静态变量前要加 static 关键字,⽽实例变量前则不加。

在程序运⾏时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使⽤这个实例变量。

静态变量不属于某个实例对象,⽽是属于类,所以也称为类变量,只要程序加载了类的字节码,不⽤创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使⽤了。

总之,实例变量必须创建对象后才可以通过这个对象来使⽤,静态变量则可以直接使⽤类名来引⽤。

静态变量使⽤时,通过类名.名称,实例变量必须要初始化后才能使⽤。

实例变量是实例化后才会分配空间,⽽静态变量当类加载时会分配空间。

是否可以从⼀个 static ⽅法内部发出对⾮ static ⽅法的调⽤?不可以。

因为⾮ static ⽅法是要与对象关联在⼀起的,必须创建⼀个对象后,才可以在该对象上进⾏⽅法调⽤,⽽ static ⽅法调⽤时不需要创建对象,可以直接调⽤。

也就是说,当⼀个 static ⽅法被调⽤时,可能还没有创建任何实例对象,如果从⼀个 static ⽅法中发出对⾮static ⽅法的调⽤,那个⾮ static ⽅法是关联到哪个对象上的呢?这个逻辑⽆法成⽴,所以,⼀个 static ⽅法内部发出对⾮ static ⽅法的调⽤。

⾮static⽅法可以访问static⽅法.static⽅法不能访问⾮static⽅法"=="和 equals ⽅法究竟有什么区别?==如果判断值类型的话,判断内容是否相同。

jt叔叔2016年成都课汇总

jt叔叔2016年成都课汇总

jt叔叔2016年成都课汇总随着信息技术的不断发展,网络课程已经成为人们获取知识和技能的重要途径之一。

而jt叔叔作为一名资深的编程老师,他所推出的课程备受学生们的喜爱和好评。

在2016年,jt叔叔在成都开设了多门课程,下面我们来对这些课程做一个汇总和评价。

一、Python初级课程Python作为一门简单易学的编程语言,备受新手程序员的青睐。

jt叔叔的Python初级课程着重于基础知识和实际操作,通过生动的案例和实战演练,让学生们快速上手Python编程。

课程内容全面、系统,老师讲解清晰,备受好评。

二、Java进阶课程对于想要深入学习编程的学生来说,Java是一个非常重要的编程语言。

jt叔叔的Java进阶课程深入讲解了面向对象编程、多线程、网络编程等核心知识,同时还结合了大量的实际项目案例进行讲解,对提高学生的编程能力起到了很大的帮助。

三、Web前端开发课程随着互联网的不断发展,Web前端开发成为了一个炙手可热的职业方向。

jt叔叔针对这一需求,推出了Web前端开发课程。

课程内容涵盖了HTML、CSS、JavaScript等前端开发的基础知识,同时还介绍了各种流行的前端框架和工具的使用方法,是一门非常实用的课程。

四、算法与数据结构课程算法与数据结构是计算机科学的重要基础,也是程序员必备的核心能力。

jt叔叔在2016年推出的算法与数据结构课程内容涵盖了常用的算法思想和常见的数据结构,通过理论讲解和大量的实战练习,帮助学生们深入理解和掌握这一重要的知识领域。

五、课程总结通过以上对jt叔叔在2016年成都课程的汇总和评价,我们可以看出,这些课程无论是从内容的完整性、老师的讲解能力还是学生的反馈来看,都是非常优秀的。

希望jt叔叔在未来能够推出更多更优质的课程,让更多的学生受益。

六、网络安全与信息安全课程随着互联网的普及和发展,网络安全和信息安全问题也越来越受到重视。

为了帮助学生更好地了解和掌握网络安全知识,jt叔叔在2016年还推出了网络安全与信息安全课程。

java必备知识要点

java必备知识要点

1 第1章 Java语言概述 1、JDK、JRE、JVM分别指什么及其作用; JDK(Java Development Kit ):Java 软件开发工具包。 JDK是Java的核心,包括Java运行环境、一系列java开发工具和java基础的类库 JVM(java virtual machine):Java虚拟机 负责对本地*.class文件解释执行。包含类加载器、字节码确认器、以及JIT实时编译器。 JRE(Java Runtime Environment):Java运行环境。 运行Java程序所需要的环境的集合。包含JVM标准实现及java核心类库 2、Java的三个版本;标准版,企业版,微型版 3、JDK的安装及环境变量设置; 下载最新的jdk安装包 安装后配置环境变量:假设安装在F:\jdk1.6.0 (1)添加JAVA_HOME ,值为:F:\jdk1.6.0 (2)在Path环境变量添加:;%JAVA_HOME%\bin (3)添加CLASS_PATH ,值为:.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\jre\lib\rt.jar 4、Java源程序文件是什么?字节码文件是什么文件?如何在命令提示符下编译源程序?编译后如何运行? 5、如何编译及运行Applet?applet不能独立运行,必须嵌入在html文件中HelloJava.html 第2章 Java语言基础 1、标识符命名规则,即可以知道哪些可作为标识符,哪些不可; 标识符:用来表示变量、方法或类等的名字。定义的规则如下: ① 只能使用字母、数字、下划线和美元符($)。 ② 只能以字母、下划线和美元符开头。 ③ 严格区分大小写,没有长度限制。 注意:(1)一般类名首字母大写;方法与变量名首字母小写;第二个单词首字母大写。 (2)java支持Unicode标准字符集 2、基本数据类型有哪些,记住;字符型,数值类型,布尔类型 3、基本类型的自动转换与强制转换; 自动类型转换:低优先级的数据自动会转换为高优先级的数据。 强制类型转换:优先级高的数据转换为优先级低的数据。 例如: double d=3.14159; int a=(int)d; 4、算术运算符及逻辑运算符,尤其是&、&&,|、||的区别; 5、赋值运算符尤其是+=这类运算符; 复合赋值运算符:+= (加等于), - = (减等于), *= (乘等于), /= (除等于), /= (模除等于 如:a = 100 ; a += 1 ; //此时a为101 第3章 控制结构 1、if语句的使用;在if语句的所有形式中,布尔表达式总应该用括号括起来。 如:if((i>=0)&&(j<=10)) if(i>=0&&j<=10) if(i>0)&&(j<=10)错 2、switch语句的使用,注意switch关键字后表达式的类型,Case语句后break的作用,default

java知识点整理(良心出品必属精品)

Java 知识点整理第二章 Java 基本语法类名、方法名、变量:1、一定以字母、下划线、美元符号开头2、不可以有空格、就是不可以同名3、严格划分大小写基本数据种类和引用数据种类:1、byte 、short 、int 、long2、float、double3、boolean4、char小种类转大种类:自动变换大种类转小种类:强迫变换(有可能会出现精度丢掉)运算符: ++++在前;先运算,在赋值。

++在后;先赋值,后运算。

a+=1 === a = a+1流程控制语句:1、次序结构2、选择结构 if else;switch case( 在 JDK1.7 版本此后能够比较字符);a、 if else:在详细内容不确立的时候,只知道一个范围。

b、 switch case:当我取值已经确立好的时候。

3、循环结构 for、while(先判断后履行)、do while(先履行后判断)当我们知道集体的循环次数的时候用for;在不知道详细次数的时候用 whilebreak: 跳出循环continue :跳过本次循环,开始下次循环数组:申明数组 :int[] a;int a[];创立:int[] a = new int[5];int[] a = new int[]{1,2,2,3,4};int[] a = {1,2,3,4,4};数组就是寄存同样元素种类的会合。

数组的下标是从0 开始数组的长度一直是比数组的最大下标大 1 数组的寄存是依据次序寄存数组的长度是固定的,不可以改变的。

第三章类及对象OOP类是对象的抽象形式,对象是类的详细表现实例化对象:类名对象名 = new类的结构方法();四个接见权限修饰符:public:共有的,同一个项当今面都能够接见protected:受保护,同类里面、同包里面、不一样包里面的子类能够默认的:同一个类里面、同一个包下边。

private:私有的,只好在目前类里面使用封装:当我们不想让别人看到详细的实现,我们就将内容封装起来,供给一个公然的方法进行读写。

JavaEE程序员必读图书大推荐

JavaEE程序员必读图书大推荐下面是我根据多年的阅读和实践经验,给您推荐的一些图书:第一部分:Java语言篇1 《Java编程规范》星级:适合对象:初级,中级介绍:作者James Gosling(Java之父),所以这本书我觉得你怎么也得读一下。

对基础讲解的很不错。

2 《Java核心技术:卷Ⅰ基础知识》星级:适合对象:初级,中级介绍:官方机构图书,你怎么也得有一本,这本书比较全面而且易懂。

放在案旁用到的时候查一查,看一看。

是学习入门必备书。

注:新手必备3 《Java编程思想》星级:适合对象:初级,中级介绍:这本书的作者就是著名的C++编程思想,对OO的理解很好,Java作为一门面向对象的语言,你学习Java最好也同时参考这本书进行入门学习。

注:新手必备4 《Effective Java》星级:适合对象:初级,中级,高级介绍:作者是Java的第2号人物,目前是Google的Java老大,是James Gosling 强力推荐的一本书。

5 《Java与模式》星级:适合对象:中级,高级介绍:是国人写的难得的值得购买的一本书,当然现在也有大话设计模式之类的出现,这本书出现的比较早,是初级到中高级必读的图书之一。

注:没有理解面向对象前,读这本书没有意义。

最好是有过项目经验再读比较好。

6 《SCJP学习指南》星级:适合对象:初级,中级介绍:官方考试必备图书,对你检验自己学些Java知识情况很有帮助,这本书最适合学生阅读,这本书理解透了,找工作面试Java题目不会有任何问题,工作多年的拿这里的题目不会做的都很多。

7 《Java数据结构和算法》星级:适合对象:初级,中级,高级介绍:这本书使用Java语言描述了我们常用的数据结构,写的非常不错。

值得一看,不过目前基本断货(这个就是最有利的说明)。

8《Junit Recipes中文版:程序员实用测试技巧》星级:适合对象:初级,中级,高级介绍:目前敏捷盛行,这个你是不管怎样也得看一看的。

java知识点归纳(面试必备)

java知识点归纳(面试必备)知识点整理演讲人2020-11-2901volatilevolatilevolatile变量修饰的共享变量进行写操作是会生成lock汇编指令将当前处理器缓存的数据行写会内存一个处理器缓存写会内存导致其他处理器缓存失效02原子操作类原子操作类010203原子更新基本类型原子更新数组原子更新字段类原子操作类原子更新基本类型AtomicBooleanAtomicIntegerAtomicLongAtomicBoolean原子更新布尔类型原子更新整型12addAndGetcompareAndSet以原子的输入将输入的数值与实例中的数值相加如果输入的值等于预期值,则以原子的方式将该值设置为输入值34getAndIncrement......以原子方式将当前值加1 使用空循环,获取AtomicInteger中的值,将当期值加1,使用CAS更新AtomicLong原子更新长整型原子操作类原子更新数组AtomicIntegerArrayAtomicLongArrayAtomicReferenceArrayAto micIntegerArray原子更新整型数组中元素AtomicLongArray原子更新长整型整数数组元素AtomicReferenceArray原子更新应用类型数组元素原子操作类原子更新字段类010203AtomicIntegerFieldUpdaterAtomicLongFileUpdaterAtomicStampedReferenceAtomicIntegerFiel dUpdater原子更新整型的字段更新器AtomicLongFileUpdater原子更新长整型字段的更新器AtomicStampedReference原子更新带版本号的应用类型可以解决CAS的ABA问题03多线程多线程线程的优先级线程的状态Daemon线程中断操作线程间通信多线程线程的优先级操作系统分出一个个时间片,线程会分配到若干时间片,优先级高的分配到的时间片越多9,300Million单击此处添加标题构建线程的时候通过时间setPriority方法来修改优先级单击此处输入你的正文,文字是您思想的提炼,为了最终演示发布的良好效果,请尽量言简意赅的阐述观点;根据需要可酌情增减文字,以便观者可以准确理解您所传达的信息。

java命令大全

java命令大全摘要:1.Java简介2.Java开发环境搭建3.Java基本语法4.Java数据类型5.运算符与表达式6.流程控制语句7.数组8.字符串9.面向对象编程10.类与对象11.继承与多态12.抽象类与接口13.异常处理14.常用类库15.输入输出流16.多线程编程17.网络编程18.数据库编程19.Java Web开发20.Java命令总结正文:Java是一种广泛使用的计算机编程语言,它具有跨平台、面向对象、易于学习等特点。

Java可以用于开发各种应用程序,如桌面应用、网络应用、移动应用等。

本篇文章将为您介绍Java命令大全,帮助您更好地掌握Java编程。

1.Java简介Java由Sun Microsystems公司于1995年推出,其设计目标是为了实现“一次编写,到处运行”的跨平台特性。

Java代码被编译成字节码,然后在Java虚拟机(JVM)上运行。

JVM可以在各种平台上运行,因此Java程序可以在任何支持JVM的操作系统上运行。

2.Java开发环境搭建要开始Java编程,首先需要安装Java开发工具包(JDK)和集成开发环境(IDE),例如Eclipse、IntelliJ IDEA等。

安装完成后,配置环境变量,确保Java命令可以在命令行中运行。

3.Java基本语法Java程序的基本结构包括主类、类定义、方法定义等。

一个简单的Java 程序示例:```public class HelloWorld {public static void main(String[] args) {System.out.println("Hello, World!");}}```4.Java数据类型Java支持基本数据类型和引用数据类型。

基本数据类型包括byte、short、int、long、float、double、char等;引用数据类型包括数组、类、接口等。

5.运算符与表达式Java支持各种运算符,如算术运算符、关系运算符、逻辑运算符等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

JAVA常见面试题及解答(整合版) 1)transient和volatile是java关键字吗?(瞬联) 如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。例如: class T { transient int a; //不需要维持 int b; //需要维持 } 这里,如果T类的一个对象写入一个持久的存储区域,a的内容不被保存,但b的将被保存。

volatile修饰符告诉编译器被volatile修饰的变量可以被程序的其他部分改变。在多线程程序中,有时两个或更多的线程共享一个相同的实例变量。考虑效率问题,每个线程可以自己保存该共享变量的私有拷贝。实际的变量副本在不同的时候更新,如当进入synchronized方法时。 用strictfp修饰类或方法,可以确保浮点运算(以及所有切断)正如早期的Java版本那样准确。切断只影响某些操作的指数。当一个类被strictfp修饰,所有的方法自动被strictfp修饰。

strictfp的意思是FP-strict,也就是说精确浮点的意思。在Java虚拟机进行浮点运算时,如果没有指定strictfp关键字时,Java的编译器以及运行环境在对浮点运算的表达式是采取一种近似于我行我素的行为来完成这些操作,以致于得到的结果往往无法令你满意。而一旦使用了strictfp来声明一个类、接口或者方法时,那么所声明的范围内Java的编译器以及运行环境会完全依照浮点规范IEEE-754来执行。因此如果你想让你的浮点运算更加精确,而且不会因为不同的硬件平台所执行的结果不一致的话,那就请用关键字strictfp。 你可以将一个类、接口以及方法声明为strictfp,但是不允许对接口中的方法以及构造函数声明strictfp关键字,例如下面的代码:

strictfp interface A {} public strictfp class FpDemo1 { strictfp void f() {} } 2. 错误的使用方法 interface A { strictfp void f(); } public class FpDemo2 { strictfp FpDemo2() {} } 一旦使用了关键字strictfp来声明某个类、接口或者方法时,那么在这个关键字所声明的范围内所有浮点运算都是精确的,符合IEEE-754规范

的。例如一个类被声明为strictfp,那么该类中所有的方法都是strictfp的。 2)抽象类和接口有什么区别?(瞬联) 1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。

2.在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。 3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。

4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。

5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。

6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。

7.接口中的方法默认都是 public,abstract 类型的。 3)能说一下java的反射(reflection)机制吗?(瞬联) 开放性和原因连接(causally-connected)是反射系统的两大基本要素 4)在java中怎样实现多线程?(瞬联) extends Thread implement Runnable 方法一:继承 Thread 类,覆盖方法 run(),我们在创建的 Thread 类的子类中重写 run() ,加入线程所要执行的代码即可。下面是一个例子:

public class MyThread extends Thread { int count= 1, number; public MyThread(int num) { number = num; System.out.println ("创建线程 " + number); } public void run() { while(true) { System.out.println ("线程 " + number + ":计数 " + count); if(++count== 6) return; } } public static void main(String args[]) { for(int i = 0;i 〈 5; i++) new MyThread(i+1).start(); } }

这种方法简单明了,符合大家的习惯,但是,它也有一个很大的缺点,那就是如果我们的类已经从一个类继承(如小程序必须继承自 Applet 类),则无法再继承 Thread 类,这时如果我们又不想建立一个新的类,应该怎么办呢?

我们不妨来探索一种新的方法:我们不创建Thread类的子类,而是直接使用它,那么我们只能将我们的方法作为参数传递给 Thread 类的实例,有点类似回调函数。但是 Java 没有指针,我们只能传递一个包含这个方法的类的实例。

那么如何限制这个类必须包含这一方法呢?当然是使用接口!(虽然抽象类也可满足,但是需要继承,而我们之所以要采用这种新方法,不就是为了避免继承带来的限制吗?)

Java 提供了接口 java.lang.Runnable 来支持这种方法。 方法二:实现 Runnable 接口 Runnable接口只有一个方法run(),我们声明自己的类实现Runnable接口并提供这一方法,将我们的线程代码写入其中,就完成了这一部分的任务。但是Runnable接口并没有任何对线程的支持,我们还必须创建Thread类的实例,这一点通过Thread类的构造函数 public Thread(Runnable target);来实现。下面是一个例子:

public class MyThread implements Runnable { int count= 1, number; public MyThread(int num) { number = num; System.out.println("创建线程 " + number); } public void run() { while(true) { System.out.println ("线程 " + number + ":计数 " + count); if(++count== 6) return; } } public static void main(String args[]) { for(int i = 0; i 〈 5;i++) new Thread(new MyThread(i+1)).start(); } }

严格地说,创建Thread子类的实例也是可行的,但是必须注意的是,该子类必须没有覆盖 Thread 类的run 方法,否则该线程执行的将是子类的 run 方法,而不是我们用以实现Runnable 接口的类的 run 方法,对此大家不妨试验一下。

使用 Runnable 接口来实现多线程使得我们能够在一个类中包容所有的代码,有利于封装,它的缺点在于,我们只能使用一套代码,若想创建多个线程并使各个线程执行不同的代码,则仍必须额外创建类,如果这样的话,在大多数情况下也许还不如直接用多个类分别继承 Thread 来得紧凑。

综上所述,两种方法各有千秋,大家可以灵活运用。 下面让我们一起来研究一下多线程使用中的一些问题。 三、线程的四种状态 1. 新状态:线程已被创建但尚未执行(start() 尚未被调用)。 2. 可执行状态:线程可以执行,虽然不一定正在执行。CPU 时间随时可能被分配给该线程,从而使得它执行。

3. 死亡状态:正常情况下 run() 返回使得线程死亡。调用 stop()或 destroy() 亦有同样效果,但是不被推荐,前者会产生异常,后者是强制终止,不会释放锁。

4. 阻塞状态:线程不会被分配 CPU 时间,无法执行。 四、线程的优先级 线程的优先级代表该线程的重要程度,当有多个线程同时处于可执行状态并等待获得 CPU 时间时,线程调度系统根据各个线程的优先级来决定给谁分配 CPU 时间,优先级高的线程有更大的机会获得 CPU 时间,优先级低的线程也不是没有机会,只是机会要小一些罢了。

你可以调用 Thread 类的方法 getPriority() 和 setPriority()来存取线程的优先级,线程的优先级界于1(MIN_PRIORITY)和10(MAX_PRIORITY)之间,缺省是5(NORM_PRIORITY)。

5)你用过哪种设计模式?(瞬联,IBM,aspenTech) 设计:design 模式:pattern 框架:framework 创建模式,结构模式和行为模式 GoF设计模式 A.创建模式

设计模式之Factory(工厂模式)

相关文档
最新文档