Java入门复习
注:仅为个人复习所用,所用课本 清华大学出版社《Java基础入门(第2版)》
第一章
课本知识点:
- Java程序的执行入口:
public static void main(String[]args){}
定义了一个main()
方法。该方法是Java程序的执行入口,程序将从main()
方法所属大括号的代码开始执行。 Helloworld.java
源文件 - 编译器 -Helloworld.class
字节码文件 - 解析器 - 机器码文件 - 计算机
- 字节码后缀是
.class
,运行时运行的文件是解释后的机器码文件
习题:
一、填空题:
- Java的三大体系是(
Java EE
、Java SE
、Java ME
) - Java程序的运行环境简称为(
JRE
) - 编译Java程序需要使用(
javac
)命令 javac.exe
和java.exe
两个可执行程序存放在JDK安装目录的(bin)目录下- (
path
)环境变量用来存储java的编译和运行工具所在的路径,而(classpath
)环境变量则用来保存java虚拟机要运行的.Class
文件路径
二、判断题
- 通过java虚拟机可以在不同的操作系统上运行java程序,从而实现跨平台特性
- JRE中包含java基础类库,JVM和开发工具(错)
- Java中的包是专门用来存放类的,通常功能相同的类存放在相同的包内
java.until
包含大量Java中大量工具类,集合类等,例如Arrays、List、Set等- Java语言和C语言一样,都是面向过程的语言(错)
三、选择题
- (Java编译器、Java运行工具,Java文档生成工具和Java打包工具)都属于JDK工具
- Java属于(高级语言)
- (
.class
)的文件可以在Java虚拟机中运行 java.exe
命令的作用是(Java解释器)- 如果
jdk
的安装路径为d:\jdk
,若想在命令窗口中任何当前路径下,都可以直接使用javac
和java
命令,需要将环境变量path设置为(d:\jdk\bin
)
四、简答题
-
简述Java的特点:
面向对象,跨平台性,健壮性,安全性,可移植性,多线程性,动态性等
-
JRE与JDK的区别:
JRE(Java Runtime Environment,Java运行时环境),它相当于操作系统部分,提供了Java程序运行时所需要的基本条件和许多Java基础类,例如,IO类、GUI控件类、网络类等。JRE是提供给普通用户使用的,如果你只想运行别人开发好的Java程序,那么,你的计算机上必须且只需安装JRE。
JDK(Java Development Kit,Java开发工具包),它包含编译工具、解释工具、文档制作工具、打包工具多种与开发相关的工具,是提供给Java开发人员使用的。初学者学习和使用Java语言时,首先必须下载和安装JDK。JDK中已经包含了JRE部分,初学者安装JDK后不必再去下载和安装JRE了。 -
Java的运行机制
Java程序运行时,必须经过编译和运行两个步骤。首先将后缀名为
.java
的源文件进行编译,生成后缀名为.class
的字节码文件,然后Java虚拟机将字节码文件进行解释执行,并将结果显示出来。
五、编程题
1 public class HelloWorld {
2 public static void main(String[] args) {
3 System.out.println("这是第一个Java程序!");
4 }
5 }
第二、三章
课本知识点:
-
java标识符概念
ME:在编程中,通常用来标记名称的符号,如:包名、类名、方法名、参数名、变量名等。注:标识符可以由任意顺序的大小写字母,数字,下划线
_
和美元$
符号组成,但是标识符不能以数字开头,也不能是Java中的关键字在编程过程中,经常需要在程序中定义一些符号来标记一些名称,这些符号被称为标识符,标识符可以由任意顺序的大小写字母,数字,下划线
_
和美元$
符号组成,但是标识符不能以数字开头,也不能是Java中的关键字 -
类的定义格式
Java中的类是通过class关键字来定义的,语法如下:
【修饰符】class 类名【extends 父类名】【implements 接口名】
{
// 类体,包含类的成员变量和成员方法
}
- class之前的修饰符可以是public,也可以不写,class之后是定义的类名,首字母要大写,
extends
和implements
都是Java的关键字,implements
用于说明当前类实现了那些接口
-
对象的创建与使用
使用new关键字来创建对象
类名 对象名称 = new 类名()
-
访问控制符
- private(当前访问级别)只能被该类的其他成员访问,其他类无法直接访问
- default(包访问级别)默认访问控制级别,只能被本包中的其他类访问
- protected(子类访问级别)既能被同一包下的其他类访问,也能被不同包下该类的子类访问
- public(公共访问级别)能被所有类访问
-
构造满足的条件
-
方法名与类名相同
-
在方法名的前面没有返回值类型的声明
-
在方法中不能使用
return
语句返回一个值,但是可以单独写return
语句来作为方法的结束
-
-
this
关键字 指代当前对象
-
不能调用静态成员
-
要求:当前对象
-
功能:
- 通过
this
关键字调用成员变量,解决与局部变量名称冲突问题 - 通过
this
关键字调用成员方法,例:Class person{ public void openMouth(){ ··········· } public void speak(){ this.openMouth(); } }
- 通过
this
关键字调用构造方法Class person{ public Person(){ System.out.println(“无参的构造方法”); } public Person (int age){ this(); System.out.println(“有参的构造方法”); } } Public class Example1{ public static void main (String[]args){ Person p=new Person(18); } }
- 注意点:
- 只能在构造方法中使用
this
调用其他的构造方法,不能在成员方法中使用 - 使用
this
构造方法的语句必须是当前该方法的第一条执行语句,且只能出现一次 - 不能在一个类的两个构造方法中使用
this
相互调用
- 只能在构造方法中使用
- 注意点:
- 通过
课后题
一、判断题
- 在定义一个类的时候,如果类的成员被
private
所修饰,该成员不能在类的外部被直接访问 - Java中的每一个类都至少有一个构造方法,一个类中如果没有定义构造方法,系统会自动为这个类创建一个默认的构造方法
- 声明构造方法时,不能使用
private
关键字修饰(x) - 类中
static
修饰的变量和方法,可以使用类名或对象的引用变量访问 - 静态代码会随着类对象的创建而执行(x)
二、选择题
-
public class Move() {}
是正确的声明 -
对于构造方法的描述,正确的有
- 方法名必须和类名相同
- 方法名的前面没有返回值类型的声明
- 在方法中不能使用return语句返回一个值
- 定义了带参的构造方法,系统默认生产的构造方法不存在了
-
在Java中,针对类、成员方法和属性提供了4钟访问级别,控制级别由小到大的排序是:
private、default、protected、public
-
this
关键字调用问题和构造函数 -
关于·
static
关键字说法正确的是:static
可以修饰成员和所有的变量
第四章
课本知识点:
-
继承所需要的关键字:
extends
,继承过程为单继承 -
super
关键字:p108使用的具体说明:
调用父类的成员变量
super.name
和成员方法super.shout()
调用父类的构造方法
super()
-
final
关键字的影响
final
修饰的类不能被继承final
修饰的方法不能被子类重写final
修饰的变量(成员变量和局部变量)是常量,只能赋值一次
-
多态的表现形式:p122
方法的重载
方法的重写
-
自定义异常的过程
public class DivideByMinusException extends Exception{
public DivideByMinusException(){
super();
}
public DivideByMinusException(String message){
super(message);
}
}
public class Example36{
public static int divide(intx, int y) throws DivideByMinusException{
if(y==0){
throw new DivideByMinusException(“除数是0”);
}
int result = x / y;
return result;
}
public static void main (string[]args){
try{
int result=divide(4,0);
System.out.println(result);
}catch(DivideByMinusException e){
System.out.println("捕获的异常信息为:" = e.getMesssage())
}
}
}
习题
一、判断题
- 抽象方法必须定义在抽象类中,所以抽象类中方法都是抽象方法(x)
- Java中被
final
关键字修饰的变量,不能被重新赋值 - 不存在继承关系的情况下,也能实现方法重写(x)
- 函数式接口在Java中是指有且只有一个抽象方法的接口
- 接口中只能定义常量和抽象方法(x)
二、选择题
-
在类的继承关系中,需要遵循(单一)的继承原则
-
关于
super
关键字的说法正确的是:super
可以调用父类的构造方法普通方法,但是不能与this
同时存在于同一个构造方法中 -
(private)只能在本类中被访问
-
Java中,如果想让一个类继承另一个类,可以使用(extend)关键字
三、简答题
抽象类和接口的区别
在Java中,使用abstract
关键字修饰的类称之为抽象类。抽象类是不能被实例化的,通常需要写一个子类来继承抽象类,同时实例化子类来获得该类的对象。抽象类通常用于表示一种抽象的概念。
接口可以说是一种特殊的抽象类,接口中只能定义常量、抽象方法、静态方法和默认方法。由于接口的特殊性,在定义时需要使用interface
关键字。
五、编程题
- 设计一个学生类Student和它的一个子类Undergraduate,要求如下
- Student类
name
和age
属性,一个包含两个参数的构造方法,用于给name
和age
属性赋值,一个show()
方法打印Student的属性信息。 - 本科生类Undergraduate增加一个
degree
属性 ,有一个包含三个参数的构造方法,前两个参数用于给name
和age
属性赋值,第三个参数给degree
专业赋值,一个show()
方法用于打印Undergraduate的属性信息。 - 在测试类中分别创建Student对象和Undergraduate对象,调用他们的
show()
- Student类
class Student {
public String name;
public int age;
public Student(String name,int age){
this.name=name;
this.age=age;
}
public void show(){
System.out.println("name: "+name+" age: "+age);
}
}
class UnderGraduate extends Student{
public String degree;
public UnderGraduate(String name,int age,String degree){
super(name, age);
this.degree=degree;
}
public void show(){
System.out.println("name: "+name+" age: "+age+" degree: "+degree);
}
}
public class Test01{
public static void main(String[] args) {
Student student = new Student("zhangsan", 16);
student.show();
UnderGraduate underGraduate = new UnderGraduate("lisi", 20, "bechalor");
underGraduate.show();
}
}
- 编程题
设计一个Shape接口和它的两个实现类Square和Circle。要求如下
(1)Shape接口中有一个抽象方法area(),接收一个double参数,返回一个double类型的结果
(2)Square和Circle中实现了Shape接口的area()抽象方法,分别求正方形和圆形的面积并返回
(3)在测试类中创建Square和Circle对象,计算边长为2的正方形面积和半径为3的圆形面积
interface Shape {
double area(double givenValue);
}
class Square implements Shape{
public double area(double sideLength) {
return sideLength*sideLength;
}
}
class Circle implements Shape{
public double area(double r) {
return Math.PI*r*r;
}
}
public class Test02 {
public static void main(String[] args) {
Shape square = new Square();
Shape circle = new Circle();
System.out.println(square.area(2));
System.out.println(circle.area(3));
}
}
第五章
课本知识点:
-
String类的常用方法
char charAt(int index)
返回字符串中index位置上的字符,其中index的取值范围是:0~(字符串长度-1)int length()
返回此字符串的长度boolean equals(Object anObject)
将此字符串与指定字符串比较String[ ] split(String regex)
根据参数regex将字符串分割为若干个字符串String substring(int beginIndex,int endIndex)
此方法从0开始取值,比如:数字5是第六位 -
Math和Random类 使用方法
Math是一个工具类,主要完成复杂的数学运算,构造方法被定义为private,因此无法创建math类的对象。Math类中的所有方法都是静态方法,可以直接通过类名来调用他们
Random类 可以在指定的取值范围内随机产生数字
Random()
用于创建一个随机数生成器,每次实例化Random对象会生成不同的随机数
Random(long seed)
使用一个long形的seed创建伪随机数生成器,当seed相同时,每次实例化Random对象会生成相同的随机数区别:Random类提供了更多的方法来生成各种伪随机数,既可以生成整数型的随机数,也可以生成浮点类型
第六章
课本知识点:
-
集合继承体系 p192 图6-1
List接口的两个实现类:
ArrayList
和LinkedList
Set接口的两个实现类:
HashSet
和TreeSet
LinkHashSet
-
Iterator遍历集合 迭代器的使用 集合的遍历
实现过程
import java.util.ArrayList;
import java.util.Iterator;
public class Test {
public static void main(String[] args) {
//创建ArrayList集合
ArrayList list=new ArrayList();
//向该集合中添加字符串
list.add("data_1");
list.add("data_2");
list.add("data_3");
Iterator iterator=list.iterator( );
//判断集合中是否有下一个元素
while(iterator.hasNext()){
Object obj=iterator,next();
//取出ArrayList集合中的元素
System.out.println(obj);
}
}
}
迭代器原理
用于指出前一位的方法是hasNext()
返回false
, 表示到达了集合的末尾。
- 不做要求的
foreach
课后题
一、判断题
-
Set集合是通过键值对的方法来存储对象的。(错)
应该是通过
add()
添加存储对象,键值对是Map的方法 -
集合中不能存放基本数据类型,而只能存放引用数据类型。(对)
-
如果创建的
TreeSet
集合中没有传入比较器,则该集合中存入的元素需要实现Comparable
接口。(对) -
使用Iterator迭代集合元素时,可以调用集合对象的方法增删元素。(错)
只起到了读取功能,不能删减
-
JDK 8 中增加一个Stream接口,该接口可以将集合、数组中的元素转换为Stream流的形式(对)
二、选择题
- 想要保留具有映射关系的数据,可以使用以下哪些集合 (
TreeMap
HashMap
) - 使用Iterator时,判断是否存在下一个元素可以使用以下哪个方法 (
hasNext()
) - 在程序开发中,经常会使用以下哪个类来存储程序中所需配置?(Properties)
- 想要在集合中保存没有重复的元素并且按照一定的顺序排列,可以使用以下哪个集合?(
TreeSet
) - 以下哪种方法是
LinkedList
集合中定义的?(getLast()
getFirst()
remove(int index)
)
第八章
BorderLayout
(边界布局管理器)是一种较为复杂的布局方式,如何设定在最下端 PAGE_END p284
Example:
package BorderLayout;
import java.awt.*;
import javax.swing.*;
public class Example {
private static void createAndShowGUI() {
// 创建一个名为BorderLayout的顶级容器窗口
JFrame f = new JFrame("BorderLayout");
// 设置窗体中的布局管理器为BorderLayout
f.setLayout(new BorderLayout());
f.setSize(300, 300); // 设置窗体大小
f.setLocation(300, 200); // 设置窗体显示的位置
// 下面的代码是创建5个按钮组件
JButton but1 = new JButton("PAGE_START");
JButton but2 = new JButton("PAGE_END");
JButton but3 = new JButton("LINE_START");
JButton but4 = new JButton("LINE_END");
JButton but5 = new JButton("CENTER");
// 下面的代码是将创建好的按钮组件添加到窗体中,并设置按钮所在的区域
f.add(but1, BorderLayout.PAGE_START);
f.add(but2, BorderLayout.PAGE_END);
f.add(but3, BorderLayout.LINE_START);
f.add(but4, BorderLayout.LINE_END);
f.add(but5, BorderLayout.CENTER);
f.setVisible(true); // 设置窗体可见
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
// 使用SwingUtilities工具类调用createAndShowGUI()方法执行并显示GUI程序
SwingUtilities.invokeLater(Example::createAndShowGUI);
}
}
-
在Swing事件处理的过程中,主要涉及三类对象:
①事件源
②事件对象
③监听器
-
实现Swing事件处理的主要步骤如下
①创建事件源
②自定义事件监听器
③为事件源注册监听器
-
Swing常用事件处理
// 窗体事件 例8-7
package 窗体事件;
import java.awt.event.*;
import javax.swing.*;
public class Example {
private static void createAndShowGUI() {
JFrame f = new JFrame("WindowEvent");
f.setSize(400, 300);
f.setLocation(300, 200);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 使用内部类创建WindowListener实例对象,监听窗体事件
f.addWindowListener(new WindowListener() {
//可以改成WindowAdapter
public void windowOpened(WindowEvent e) {
System.out.println("windowOpened---窗体打开事件");
}
public void windowIconified(WindowEvent e) {
System.out.println("windowIconified---窗体图标化事件");
}
public void windowDeiconified(WindowEvent e) {
System.out.println("windowDeiconified---窗体取消图标化事件");
}
public void windowDeactivated(WindowEvent e) {
System.out.println("windowDeactivated---窗体停用事件");
}
public void windowClosing(WindowEvent e) {
System.out.println("windowClosing---窗体正在关闭事件");
}
public void windowClosed(WindowEvent e) {
System.out.println("windowClosed---窗体关闭事件");
}
public void windowActivated(WindowEvent e) {
System.out.println("windowActivated---窗体激活事件");
}
});
}
public static void main(String[] args) {
// 使用SwingUtilities工具类调用createAndShowGUI()方法执行并显示GUI程序
SwingUtilities.invokeLater(Example::createAndShowGUI);
}
}
// 鼠标事件 例8-8
package 鼠标事件;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Example {
private static void createAndShowGUI() {
JFrame f = new JFrame("MouseEvent");
f.setLayout(new FlowLayout()); // 为窗口设置布局
f.setSize(300, 200);
f.setLocation(300, 200);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton but = new JButton("Button");// 创建按钮对象
f.add(but); // 在窗口添加按钮组件
// 为按钮添加鼠标事件监听器
but.addMouseListener(new MouseListener() {
public void mouseReleased(MouseEvent e) {
System.out.println("mouseReleased-鼠标放开事件");
}
public void mousePressed(MouseEvent e) {
System.out.println("mousePressed-鼠标按下事件");
}
public void mouseExited(MouseEvent e) {
System.out.println("mouseExited—鼠标移出按钮区域事件");
}
public void mouseEntered(MouseEvent e) {
System.out.println("mouseEntered—鼠标进入按钮区域事件");
}
public void mouseClicked(MouseEvent e) {
System.out.println("mouseClicked-鼠标完成单击事件");
}
});
}
public static void main(String[] args) {
// 使用SwingUtilities工具类调用createAndShowGUI()方法并显示GUI程序
SwingUtilities.invokeLater(Example::createAndShowGUI);
}
}