java考点整理
Java章节重点回顾(第一部分)

辨别你要用的是哪一个类,系统会默认为裸体类。
Import: 简单方法,直接在需要用到包里面的类时,直接在这个类的首行
把需要引用的类全名写出来。如: import com.bjsxt.java.Cat; 或者:import com.bjsxt.java.*。 包括需要引用的类文件名
(.class)
Байду номын сангаас
类的概念: 类是用于描述同一类型的对象的一个抽象的概念,类中定 义了这一类对象所因具有的静态和动态属性。
属性=成员变量 实例=对象 方法=函数
关联关系:有那么点关联的关系。是最弱的一种关系。 继承关系:**是一种**。 聚合关系(聚集关系、组合关系):一个整体和一个部分的关系。**是 **的一部分。 实现关系:父类与子类之间的关系。
包: 为便于管理大型软件系统中数目众多的类,解决类的命名冲突问 题,而引入的一种机制。提供类的多重类命名空间。
Package 语句作为JAVA源文件的第一条语句, 指明该文件中定义的类 所在的包。(若缺省该语句,则指定为无名包)
格式: packeage pkg1[.pkg2[.pk3....]];
Package: 如果要把一个类放到包里面,第一句话写package,package后面
引用的基本概念:Java语言中除基本类型之外的变量类型都称之为引 用类型。Java中的对象是通过引用对其操作的。
通过引用调这个对象的方法,才能永远有效的对这个对象产生作用。
方法的返回值是存在一个临时的区域里面。 所有的方法来说是针对某一个对象来调用(使用这个对象的引用加上 点)。 弄清楚了内存 = 弄清了一切
This 是对当前对象的引用。 当一个参数你不能确定它指的是哪一个变量的时候,找离它最近的声 明(就近声明原则)。
java高级知识点总结ppt

java高级知识点总结ppt一、泛型1. 为什么需要泛型- 早期的Java中,集合类中的元素都是Object类型,需要进行类型转换导致代码冗余和安全隐患- 泛型可以在编译时进行类型检查,提高代码的安全性和可读性2. 泛型的相关概念- 泛型类:class MyClass<T> {}- 泛型接口:interface MyInterface<T> {}- 泛型方法:public <T> void myMethod(T t) {}- 泛型通配符:List<?>、List<? extends Number>、List<? super Number>3. 泛型的继承和通配符- extends关键字用于指定类型上限- super关键字用于指定类型下限- PECS(Producer Extends, Consumer Super)原则4. 类型擦除- Java中的泛型是通过擦除实现的- 泛型在编译时会被擦除为Object类型- 泛型参数的实际类型信息会丢失5. 泛型使用的注意事项- 泛型数组的创建是不允许的- 泛型类型参数不能是基本类型- 无法创建参数化类型的数组二、注解1. 什么是注解- 注解是一种用于向编译器、开发工具和其他程序读取信息的标记- 可以用于标记方法、字段、类等2. 常用的注解- @Override:用于标记重写父类的方法- @Deprecated:用于标记已过时的方法或类- @SuppressWarnings:用于忽略编译器警告- @FunctionalInterface:用于标记函数式接口- @Target:用于指定注解的作用目标- @Retention:用于指定注解的生命周期- @Documented:用于指定注解是否包含在JavaDoc中3. 自定义注解- 定义注解:@interface MyAnnotation {}- 注解元素:可以是基本数据类型、枚举类型、Class类型,或者其他注解类型 - 使用注解:@MyAnnotation4. 注解处理器- 注解处理器是用来处理注解的工具- 可以在编译时、运行时或者在自定义工具中处理注解5. 元注解- 元注解用于标记其他注解的注解- 常用的元注解有:@Target、@Retention、@Inherited、@Documented三、反射1. 什么是反射- 反射是指程序在运行时能够获取自身的信息,并能够对自身进行操作的能力2. Class类- 反射的核心是Class类,代表了一个类的属性和方法- 通过Class类可以获取类的构造函数、字段、方法等信息- 可以通过Class类创建类的对象3. 反射的应用- 动态代理:通过反射实现动态生成代理类- 注解处理器:通过反射获取注解信息并进行相应处理- 类加载器:通过反射加载指定路径下的类文件4. 反射的性能问题- 反射在性能上有一定的损耗- 应尽量避免在性能敏感的代码中大量使用反射5. 相关类和接口- Field:代表类的字段- Method:代表类的方法- Constructor:代表类的构造函数- Modifier:提供了用于反射的访问修饰符常量四、Lambda表达式1. 什么是Lambda表达式- Lambda表达式是一种匿名函数,可以作为参数传递给其他方法- 包含三个部分:参数列表、箭头符号、方法体2. Lambda表达式的特点- 简洁:去除了冗余的语法- 方便:可以直接以函数式接口变量接收Lambda表达式3. 函数式接口- 函数式接口是指只包含一个抽象方法的接口- 可以使用@FunctionalInterface注解来标记一个接口为函数式接口 - Java中内置了一些常用的函数式接口,如Runnable、Comparator等4. Lambda表达式的应用- 可以使用Lambda表达式来简化匿名内部类的写法- 可以用于简化集合类的遍历、排序等操作- 可以用于简化线程的创建和启动5. Lambda表达式的限制- 只能用于函数式接口- 不能使用break和continue关键字- 不能改变非final的局部变量的值五、并发编程1. 线程安全性- 多线程程序的最大挑战之一是确保数据的一致性和正确性- synchronized关键字和Lock接口是保证线程安全性的常用手段2. 并发容器- Java中提供了一些线程安全的集合类,如ConcurrentHashMap、CopyOnWriteArrayList 等- 这些集合类在多线程环境下能够安全地进行并发访问3. 线程池- 线程池可以管理和复用线程,避免线程频繁创建和销毁的开销- Executors类提供了创建线程池的工厂方法- ThreadPoolExecutor类提供了更灵活的线程池配置4. 原子操作- 原子操作是指不可被中断的一个或一系列操作- Java中提供了一些原子操作的类,如AtomicInteger、AtomicLong等5. 并发工具类- Java提供了一些并发工具类,如CountDownLatch、Semaphore、CyclicBarrier等,用于解决特定的并发问题总结本次总结了Java中的一些高级知识点,包括泛型、注解、反射、Lambda表达式和并发编程。
java期末考点总结

java期末考点总结一、基础知识1. Java语言的起源和特点2. Java开发环境的配置和使用3. Java程序的基本结构和语法规则4. 数据类型和变量5. 运算符和表达式6. 控制流程和循环结构二、面向对象编程1. 面向对象的基本概念和原则2. 类和对象的定义和使用3. 封装、继承和多态4. 接口和抽象类5. 继承和多态的应用6. 继承和接口的区别三、异常处理1. 异常的概念和分类2. 异常的处理机制3. try-catch语句的使用4. finally语句的作用5. 异常的抛出和捕获6. 自定义异常四、常用类库1. String类的常用方法2. Math类和常用数学方法3. Date类和Calendar类的使用4. 集合框架和常用集合类5. IO流的使用6. 文件的读写操作五、多线程编程1. 进程和线程的概念2. 创建线程和实现Runnable接口的区别3. 同步和互斥的实现4. 线程的状态和控制5. 线程的优先级和调度6. 线程池的使用和管理六、网络编程1. 网络通信的基本概念和协议2. Socket编程和TCP/IP协议3. UDP协议和DatagramSocket类4. URL和URLConnection类的使用5. 服务器和客户端的通信6. HTTP协议和网页的访问七、图形用户界面1. AWT和Swing的区别和优缺点2. 组件的布局和事件处理3. 容器和组件的层次结构4. 图形用户界面的设计和优化5. 多线程和事件处理6. 用户界面的国际化和本地化八、数据库编程1. 数据库的基本概念和SQL语句2. JDBC的使用和连接数据库3. Statement和PreparedStatement的使用4. ResultSet的处理和数据库操作5. 事务和批处理的管理6. 数据库连接池的使用九、Web开发1. HTML和CSS的基本语法和标签2. JavaScript的基本语法和事件处理3. Servlet和JSP的概念和使用4. MVC模式的理解和应用5. 数据库连接和数据处理6. Web应用的发布和部署十、设计模式1. 设计模式的基本概念和分类2. 单例模式和工厂模式的实现3. 观察者模式和适配器模式的应用4. MVC模式和策略模式的理解和应用5. 模板方法模式和装饰者模式的实现6. 设计模式的优缺点和使用场景以上是Java期末考点的总结,希望能帮助你复习和理解Java编程的重要知识点。
java考试大纲

java考试大纲Java考试大纲一、Java语言基础1. Java语言概述- Java的起源、特点、应用领域- Java开发环境的搭建(JDK、IDE)2. 基本语法- 标识符、关键字、数据类型、变量- 运算符、表达式、语句3. 控制流程- 条件语句(if、switch)- 循环语句(for、while、do-while)- 跳转语句(break、continue、return)4. 数组- 一维数组和二维数组的定义和使用- 数组的遍历、查找、排序5. 字符串- 字符串的定义、赋值、连接- 字符串常用方法(indexOf、substring、replace等)二、面向对象编程1. 面向对象基础- 类和对象的概念- 封装、继承、多态的实现2. 类和对象- 类的定义、成员变量、方法- 对象的创建和使用3. 继承- 继承的概念、super关键字的使用- 方法重写(Override)4. 多态- 多态的概念、实现方式- 接口和抽象类的使用5. 包和访问控制- 包的概念、使用- 访问控制(public、private、protected)三、集合框架1. 集合概述- 集合框架的组成、特点2. List接口- ArrayList、LinkedList的特点和使用3. Set接口- HashSet、LinkedHashSet、TreeSet的特点和使用4. Map接口- HashMap、LinkedHashMap、TreeMap的特点和使用5. 集合的遍历和操作- 迭代器(Iterator)的使用- 增强型for循环四、异常处理1. 异常的概念- 异常的分类、处理机制2. 异常处理- try、catch、finally的使用- 自定义异常的创建和抛出3. 断言和错误- 断言(assert)的使用- 错误的分类和处理五、输入输出(I/O)流1. 流的概念- 流的分类、作用2. 字节流- InputStream、OutputStream的使用3. 字符流- Reader、Writer的使用4. 文件操作- 文件的创建、读取、写入、删除5. 缓冲流- BufferedInputStream、BufferedOutputStream等的使用六、多线程编程1. 线程的概念- 线程的生命周期、状态2. 线程的创建和启动- 继承Thread类、实现Runnable接口3. 线程的同步- 同步方法、同步代码块- 锁(Lock)的使用4. 线程间通信- wait、notify、notifyAll的使用5. 线程池- Executor框架的使用七、Java网络编程1. 网络基础- 网络通信的基本原理2. Socket编程- ServerSocket、Socket的使用3. URL和URLConnection- URL的解析、URLConnection的使用4. HTTP协议- HTTP请求和响应的处理八、Java数据库连接(JDBC)1. JDBC概述- JDBC的作用、组件2. 数据库连接- DriverManager、Connection的使用3. SQL语句执行- Statement、PreparedStatement的使用4. 结果集处理- ResultSet的使用5. 事务处理- 事务的概念、处理方式九、Java Web基础1. Web应用概述- Web应用的组成、运行环境2. Servlet技术- Servlet的概念、生命周期、配置3. JSP技术- JSP的概念、页面指令、内置对象4. 会话管理- Cookie、Session的使用5. MVC模式- MVC的概念、实现十、Java开发工具和环境1. 开发工具- Eclipse、IntelliJ IDEA等IDE的使用2. 版本控制- Git的基本使用3. 构建工具- Maven、Gradle的使用4. 持续集成- Jenkins等CI工具的使用5. 测试- JUnit等测试框架的使用本大纲涵盖了Java语言的基础知识、面向对象编程、集合框架、异常处理、I/O流、多线程编程、网络编程、JDBC、Web基础以及开发工具和环境等多个方面,旨在为学习者提供一个全面的Java学习路径。
计算机二级考试java常考知识点

计算机二级考试java常考知识点考点一:不断扩展计算平台1.2.5 java平台-不断扩展的计算平台java不仅是编程语言,还是一个开发平台,java技术给程序员提供了许多工具:编译器、解释器、文档生成器和文件打包工具等等。
同时java还是一个程序发布平台,有两种主要的"发布环境",首先java运行时环境(java runtime environment,简称JRE)包含了完整的类文件包,其次许多主要的浏览器都提供了java解释器和运行时环境。
目前Sun公司把java平台划分成J2EE、J2SE、J2ME三个平台,针对不同的市场目标和设备进行定位。
J2EE是Java2 Enterprise Edition,主要目的是为企业计算提供一个应用服务器的运行和开发平台。
J2EE本身是一个开放的标准,任何软件厂商都可以推出自己的符合J2EE标准的产品,使用户可以有多种选择。
IBM、Oracle、BEA、HP等29家已经推出了自己的产品,其中尤以BEA公司的weglogic产品和IBM公司的websphare最为著名。
J2EE将逐步发展成为可以与微软的.NET战略相对抗的网络计算平台。
J2SE是Java2 Standard Edition,主要目的是为台式机和工作站提供一个开发和运行的平台。
我们在学习java的过程中,主要是采用J2SE来进行开发。
J2ME是Java2 Micro Edition,主要是面向消费电子产品,为消费电子产品提供一个java的运行平台,使得java程序能够在手机、机顶盒、PDA等产品上运行。
考点二:Java语言特点1.2.4 Java语言的特点1. 简单、面向对象和为人所熟悉java的简单首先体现在精简的系统上,力图用最小的系统实现足够多的功能;对硬件的要求不高,在小型的计算机上便可以良好的运行。
和所有的新一代的程序设计语言一样,java也采用了面向对象技术并更加彻底,所有的java程序和applet程序均是对象,封装性实现了模块化和信息隐藏,继承性实现了代码的复用,用户可以建立自己的类库。
java复习期末重点考点总结

java复习期末重点考点总结一、基本语法1. 变量和常量定义变量和常量,变量的作用域,变量类型转换等。
2. 数据类型Java的基本数据类型,如整型、浮点型、字符型、布尔型等。
3. 运算符Java的运算符,如算术运算符、关系运算符、逻辑运算符、位运算符等。
4. 控制结构条件语句,如if语句、switch语句。
循环语句,如for循环、while循环、do-while循环。
5. 数组一维数组、多维数组的定义和使用。
6. 方法定义方法,方法的重载、调用以及参数传递。
7. 异常处理Java的异常处理机制,如try-catch-finally语句块。
常见的异常类及其使用。
二、面向对象1. 类和对象类和对象的定义,成员变量和成员方法的访问权限。
2. 构造方法和析构方法构造方法和析构方法的定义和使用。
3. 继承子类和父类的关系,继承的实现和使用。
方法重写和父类引用子类对象的特点。
4. 接口接口的定义和实现,接口的多继承。
多态的概念和实现,向上转型和向下转型。
6. 包包的定义和使用,包的导入和导出。
三、输入输出1. 文件操作文件的读取和写入,字符流和字节流的使用。
2. 序列化和反序列化对象的序列化和反序列化,使用序列化实现对象的存储和传输。
四、集合框架1. 集合接口和类常用集合接口和类的介绍和使用,如List、Set、Map等。
2. 迭代器集合的迭代器,实现对集合元素的遍历和操作。
3. 泛型泛型的概念和使用,泛型类和泛型方法。
4. 排序和比较使用集合框架实现元素的排序和比较。
五、线程1. 线程的创建和启动线程的创建方式,使用Thread类和Runnable接口。
2. 线程同步线程同步的方法,如使用synchronized关键字实现线程同步。
3. 线程通信线程之间的通信方式,如使用wait()、notify()、notifyAll()方法进行线程通信。
线程池的定义和使用,使用线程池实现线程的复用。
六、网络编程1. 套接字套接字的概念和使用,使用套接字实现网络通信。
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版本中尚未使⽤,但以后版本可能会作为关键字使⽤变量:程序运⾏期间可以被改变的量。
java竞赛知识点总结

java竞赛知识点总结引言随着计算机技术的发展,编程竞赛已经成为了大学生程序员们的一项受欢迎的比赛。
而Java语言也成为了编程竞赛的主流语言之一。
本文将对Java编程竞赛涉及的知识点进行总结,以帮助读者更好的准备并参加Java编程竞赛。
一、基础知识1. 数据类型Java中的数据类型主要分为基本数据类型和引用数据类型。
基本数据类型包括整型(byte、short、int、long)、浮点型(float、double)、字符型(char)、布尔型(boolean)。
而引用数据类型包括类、数组、接口等。
在竞赛中,需要熟练掌握各种数据类型的特点及使用方法。
2. 控制语句Java中的控制语句包括:if-else语句、switch-case语句、for循环、while循环、do-while循环、break语句、continue语句等。
.这些控制语句可以帮助程序员控制程序的逻辑流程,是解决问题的重要工具。
3. 数组数组在编程竞赛中是常用的数据结构。
需要掌握数组的声明、初始化、遍历、排序等操作,以及在不同场景下的使用方法。
4. 字符串字符串在Java中是一个重要的数据类型。
需要掌握字符串的定义、初始化、操作方法、常用的API等知识点。
5. 类和对象面向对象是Java的编程范式,对于程序员来说需要熟练掌握类的定义、对象的创建、属性和方法的访问、继承、多态等重要知识点。
6. 包和导入包是Java中的一种组织结构,可以帮助程序员有效地管理Java类。
在编程竞赛中,需要熟练掌握包的定义、导入和使用。
7. 异常处理Java中的异常处理提供了一种灵活的机制来处理程序中的异常情况。
需要熟练掌握try-catch语句、throw和throws关键字等异常处理方法。
8. 输入输出在编程竞赛中,输入输出是非常关键的操作,需要掌握标准输入输出、文件输入输出、流操作等知识点。
9. 集合框架Java集合框架提供了一系列的接口和类来帮助程序员快速地操作集合数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编程题:4.编写一个应用程序,求100以内的全部素数。
答:class Primes{ public static void main(String args[]){ int w=1;for(int i=2;i<=100;i++){ for(int j=2;j<i;j++){ w=i%j;if(w==0)break;}if(w!=0)System.out.println(i+"是素数");}}}6. 一个数如果恰好等于它的因子之和,这个数就称为“完数”。
编写应用程序,求1000之内的所有完数。
答:class Wanshu{public static void main(String args[]){int x,i,sum;for(x=1;x<=1000;x++){sum=0;for(i=1;i<x;i++){if(x%i==0)sum+=i;}if(x==sum)System.out.println(x+"是完数");}}}7. 编写应用程序,分别使用while和for循环计算8+88+888+…前10项之和。
答: ①for循环class TheSum{public static void main(String args[]){long sum=0,data=8;for(int i=1;i<=10;i++){sum=sum+data;data=data*10+8;}System.out.println(sum);}}②while循环class TheSum{public static void main(String args[]){long sum=0,data=8,i=0;while(++i<=10){sum=sum+data;data=data*10+8;}System.out.println(sum);}}16.编写一个类A,该类创建的对象可以调用方法f输出英文字母表,然后再编写一个该类的子类B,要求子类B必须继承A类的方法f(不允许重写),子类创建的对象不仅可以调用方法f输出英文字母表,而且调用子类新增的方法g输出希腊字母表。
答: class A{int m;void f(){for(m=65;m<91;m++)System.out.print((char)m+" ");for(m=97;m<123;m++)System.out.print((char)m+" ");System.out.println(" ");}}class B extends A{int i;void g(){for(i=913;i<930;i++)System.out.print((char)i+" ");for(i=931;i<938;i++)System.out.print((char)i+" ");for(i=945;i<962;i++)System.out.print((char)i+" ");for(i=963;i<970;i++)System.out.print((char)i+" ");System.out.println(" ");}}public class Test{public static void main(String args[]){B b=new B();System.out.println("我调用方法f输出英文字母表:");b.f();System.out.println("我调用方法g输出希腊字母表:");b.g();}}3. 计算某年、某月、某日和某年、某月、某日之间的天数间隔。
要求年、月、日通过main方法的参数传递到程序中。
答:import java.util.*;class Test{public static void main(String args[]){Calendar c=Calendar.getInstance();c.set(2000,0,1);long time1=c.getTimeInMillis();c.set(2008,7,8);long time2=c.getTimeInMillis();long dayCous=(time2-time1)/(1000*60*60*24);System.out.println("2008年8月8日和2000年1月1日相隔"+dayCous+"天");}}12.参照例子9.14,模拟3个人排队买票,张某、李某和赵某买电影票,售票员只有3张五元的钱,电影票五元一张。
张某拿二十元一张的人民币排在李某的前面买票,李某排在赵某的前面拿一张十元的人民币买票,赵某拿一张五元的人民币买票。
答: import java.awt.*;import java.awt.event.*;public class Test{public static void main(String args[]){new MyFrame();}}class MyFrame extends Frameimplements Runnable,ActionListener{售票员王小姐;Thread 张某,李某,赵某;static TextArea text;Button start=new Button("排队买票");MyFrame(){王小姐=new 售票员(); //只有3张五元钱电影票五元一张张某=new Thread(this); //二十元排在最前面李某=new Thread(this); //十元排在中间赵某=new Thread(this); //五元排在最后text=new TextArea(10,30);start.addActionListener(this);add(text,BorderLayout.CENTER);add(start,BorderLayout.NORTH);setVisible(true);setSize(360,300);validate();addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});}public void actionPerformed(ActionEvent e){try{张某.start();李某.start();赵某.start();}catch(Exception exp){}}public void run(){if(Thread.currentThread()==张某){王小姐.售票规则(20);}else if(Thread.currentThread()==李某){王小姐.售票规则(10);}else if(Thread.currentThread()==赵某){王小姐.售票规则(5);}}}class 售票员{int 五元钱个数=3,十元钱个数=0,二十元钱个数=0;String s=null;public synchronized void 售票规则(int money) {if(money==5){五元钱个数=五元钱个数+1;s="给您入场卷您的钱正好";MyFrame.text.append("\n"+s);}else if(money==10){while(五元钱个数<1){try{wait();}catch(InterruptedException e){}}五元钱个数=五元钱个数-1;十元钱个数=十元钱个数+1;s="给您入场卷"+" 您给我10元,找您5元";MyFrame.text.append("\n"+s);}else if(money==20){while((五元钱个数<4)&&(五元钱个数<1||十元钱个数<1)){try{wait();}catch(InterruptedException e){}}if(五元钱个数>=4){五元钱个数=五元钱个数-3;二十元钱个数=二十元钱个数+1;s="给您入场卷"+" 您给我20元,找您15元";MyFrame.text.append("\n"+s);}else if(五元钱个数>=1&&十元钱个数>=1){五元钱个数=五元钱个数-1;十元钱个数=十元钱个数-1;二十元钱个数=二十元钱个数+1;s="给您入场卷"+"您给我20元,找您15元";MyFrame.text.append("\n"+s);}}notifyAll();}}13.参照例子9.9,要求有3个线程:student1、student2和teacher,其中student1准备睡10分钟后再开始上课,其中student2准备睡一小时后再开始上课。
teacher在输出3句“上课”后,吵醒休眠的线程student1;student1被吵醒后,负责再吵醒休眠的线程student2。
答: class InterruptSleep implements Runnable{Thread student1,student2,teacher;InterruptSleep(){teacher=new Thread(this);student1=new Thread(this);student2=new Thread(this);}public void run(){if(Thread.currentThread()==student2){try{System.out.println("student2要睡一小时再听课,现在不听课");Thread.sleep(1000*60*60);}catch(InterruptedException e){System.out.println("student2还没睡够呢,但是被student1给叫醒了");}System.out.println("student2开始上课");}else if(Thread.currentThread()==student1){try{System.out.println("student1要睡10分钟再上课,现在不听课");Thread.sleep(1000*60*10);}catch(InterruptedException e){System.out.println("student1还没睡够呢,但是被teacher给叫醒了");}System.out.println("student1开始上课");student2.interrupt();}else if(Thread.currentThread()==teacher){for(int i=1;i<=3;i++){System.out.println("teacher: 上课!");try{Thread.sleep(500);}catch(InterruptedException e){}}student1.interrupt();}}}public class Test{public static void main (String[] args) {InterruptSleep a=new InterruptSleep();a.student2.start();a.student1.start();a.teacher.start();}}补充:字符串“yekmaakkccekymbvb”求出字符串中有多少种字符,以及每个字符的个数。