Java入门复习

这篇博客是作者的Java入门复习笔记,主要涵盖了Java程序的执行入口、编译与运行过程、Java的特点、JRE与JDK的区别、类和对象、继承与多态、异常处理等内容,包括填空、判断、选择和编程题目,旨在帮助初学者巩固Java基础知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java入门复习

注:仅为个人复习所用,所用课本 清华大学出版社《Java基础入门(第2版)》

第一章

课本知识点:

  1. Java程序的执行入口:public static void main(String[]args){} 定义了一个 main() 方法。该方法是Java程序的执行入口,程序将从 main() 方法所属大括号的代码开始执行。
  2. Helloworld.java 源文件 - 编译器 - Helloworld.class 字节码文件 - 解析器 - 机器码文件 - 计算机
  • 字节码后缀是 .class ,运行时运行的文件是解释后的机器码文件

习题:

一、填空题:

  1. Java的三大体系是(Java EEJava SEJava ME)
  2. Java程序的运行环境简称为(JRE)
  3. 编译Java程序需要使用(javac)命令
  4. javac.exejava.exe两个可执行程序存放在JDK安装目录的(bin)目录下
  5. (path)环境变量用来存储java的编译和运行工具所在的路径,而(classpath)环境变量则用来保存java虚拟机要运行的.Class文件路径

二、判断题

  1. 通过java虚拟机可以在不同的操作系统上运行java程序,从而实现跨平台特性
  2. JRE中包含java基础类库,JVM和开发工具(错)
  3. Java中的包是专门用来存放类的,通常功能相同的类存放在相同的包内
  4. java.until包含大量Java中大量工具类,集合类等,例如Arrays、List、Set等
  5. Java语言和C语言一样,都是面向过程的语言(错)

三、选择题

  1. (Java编译器、Java运行工具,Java文档生成工具和Java打包工具)都属于JDK工具
  2. Java属于(高级语言)
  3. (.class)的文件可以在Java虚拟机中运行
  4. java.exe命令的作用是(Java解释器)
  5. 如果jdk的安装路径为d:\jdk,若想在命令窗口中任何当前路径下,都可以直接使用javacjava命令,需要将环境变量path设置为(d:\jdk\bin)

四、简答题

  1. 简述Java的特点:

    面向对象,跨平台性,健壮性,安全性,可移植性,多线程性,动态性等

  2. 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了。

  3. Java的运行机制

    Java程序运行时,必须经过编译和运行两个步骤。首先将后缀名为.java的源文件进行编译,生成后缀名为.class的字节码文件,然后Java虚拟机将字节码文件进行解释执行,并将结果显示出来。

五、编程题

 1	public class HelloWorld {
 2		public static void main(String[] args) {
 3			System.out.println("这是第一个Java程序!");
 4		}
 5	}

第二、三章

课本知识点:

  1. java标识符概念

    ME:在编程中,通常用来标记名称的符号,如:包名、类名、方法名、参数名、变量名等。注:标识符可以由任意顺序的大小写字母,数字,下划线_和美元$符号组成,但是标识符不能以数字开头,也不能是Java中的关键字

    在编程过程中,经常需要在程序中定义一些符号来标记一些名称,这些符号被称为标识符,标识符可以由任意顺序的大小写字母,数字,下划线_和美元$符号组成,但是标识符不能以数字开头,也不能是Java中的关键字

  2. 类的定义格式

    Java中的类是通过class关键字来定义的,语法如下:

【修饰符】class 类名【extends 父类名】【implements 接口名】
{
    // 类体,包含类的成员变量和成员方法
}
  • class之前的修饰符可以是public,也可以不写,class之后是定义的类名,首字母要大写,extendsimplements都是Java的关键字,implements用于说明当前类实现了那些接口
  1. 对象的创建与使用

    使用new关键字来创建对象 类名 对象名称 = new 类名()

  2. 访问控制符

  • private(当前访问级别)只能被该类的其他成员访问,其他类无法直接访问
  • default(包访问级别)默认访问控制级别,只能被本包中的其他类访问
  • protected(子类访问级别)既能被同一包下的其他类访问,也能被不同包下该类的子类访问
  • public(公共访问级别)能被所有类访问
  1. 构造满足的条件

    • 方法名与类名相同

    • 在方法名的前面没有返回值类型的声明

    • 在方法中不能使用return语句返回一个值,但是可以单独写return语句来作为方法的结束

  2. 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相互调用

课后题

一、判断题

  1. 在定义一个类的时候,如果类的成员被private所修饰,该成员不能在类的外部被直接访问
  2. Java中的每一个类都至少有一个构造方法,一个类中如果没有定义构造方法,系统会自动为这个类创建一个默认的构造方法
  3. 声明构造方法时,不能使用private关键字修饰(x)
  4. 类中static修饰的变量和方法,可以使用类名或对象的引用变量访问
  5. 静态代码会随着类对象的创建而执行(x)

二、选择题

  1. public class Move() {}是正确的声明

  2. 对于构造方法的描述,正确的有

    1. 方法名必须和类名相同
    2. 方法名的前面没有返回值类型的声明
    3. 在方法中不能使用return语句返回一个值
    4. 定义了带参的构造方法,系统默认生产的构造方法不存在了
  3. 在Java中,针对类、成员方法和属性提供了4钟访问级别,控制级别由小到大的排序是:

    private、default、protected、public

  4. this关键字调用问题和构造函数

  5. 关于·static关键字说法正确的是:

    static可以修饰成员和所有的变量

第四章

课本知识点:

  1. 继承所需要的关键字:extends,继承过程为单继承

  2. super关键字:p108

    使用的具体说明:

    ​ 调用父类的成员变量super.name和成员方法super.shout()

    ​ 调用父类的构造方法super()

  3. final关键字的影响

  • final修饰的类不能被继承
  • final修饰的方法不能被子类重写
  • final修饰的变量(成员变量和局部变量)是常量,只能赋值一次
  1. 多态的表现形式:p122

    方法的重载

    方法的重写

  2. 自定义异常的过程

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())
        }
    }
}

习题

一、判断题

  1. 抽象方法必须定义在抽象类中,所以抽象类中方法都是抽象方法(x)
  2. Java中被final关键字修饰的变量,不能被重新赋值
  3. 不存在继承关系的情况下,也能实现方法重写(x)
  4. 函数式接口在Java中是指有且只有一个抽象方法的接口
  5. 接口中只能定义常量和抽象方法(x)

二、选择题

  1. 在类的继承关系中,需要遵循(单一)的继承原则

  2. 关于super关键字的说法正确的是:

    super可以调用父类的构造方法普通方法,但是不能与this同时存在于同一个构造方法中

  3. (private)只能在本类中被访问

  4. Java中,如果想让一个类继承另一个类,可以使用(extend)关键字

三、简答题

抽象类和接口的区别

在Java中,使用abstract关键字修饰的类称之为抽象类。抽象类是不能被实例化的,通常需要写一个子类来继承抽象类,同时实例化子类来获得该类的对象。抽象类通常用于表示一种抽象的概念。

接口可以说是一种特殊的抽象类,接口中只能定义常量、抽象方法、静态方法和默认方法。由于接口的特殊性,在定义时需要使用interface关键字。

五、编程题

  1. 设计一个学生类Student和它的一个子类Undergraduate,要求如下
    1. Student类nameage属性,一个包含两个参数的构造方法,用于给nameage属性赋值,一个show()方法打印Student的属性信息。
    2. 本科生类Undergraduate增加一个degree属性 ,有一个包含三个参数的构造方法,前两个参数用于给nameage属性赋值,第三个参数给degree专业赋值,一个show()方法用于打印Undergraduate的属性信息。
    3. 在测试类中分别创建Student对象和Undergraduate对象,调用他们的show()
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();
	}
}
  1. 编程题

设计一个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));
	}
}

第五章

课本知识点:

  1. 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是第六位

  2. Math和Random类 使用方法

    Math是一个工具类,主要完成复杂的数学运算,构造方法被定义为private,因此无法创建math类的对象。Math类中的所有方法都是静态方法,可以直接通过类名来调用他们

    Random类 可以在指定的取值范围内随机产生数字

    Random()用于创建一个随机数生成器,每次实例化Random对象会生成不同的随机数

    Random(long seed)使用一个long形的seed创建伪随机数生成器,当seed相同时,每次实例化Random对象会生成相同的随机数

    区别:Random类提供了更多的方法来生成各种伪随机数,既可以生成整数型的随机数,也可以生成浮点类型

第六章

课本知识点:

  1. 集合继承体系 p192 图6-1

    List接口的两个实现类:ArrayListLinkedList

    Set接口的两个实现类:HashSetTreeSet

    LinkHashSet

  2. 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, 表示到达了集合的末尾。

  1. 不做要求的 foreach

课后题

一、判断题

  1. Set集合是通过键值对的方法来存储对象的。(错)

    应该是通过add()添加存储对象,键值对是Map的方法

  2. 集合中不能存放基本数据类型,而只能存放引用数据类型。(对)

  3. 如果创建的TreeSet集合中没有传入比较器,则该集合中存入的元素需要实现Comparable接口。(对)

  4. 使用Iterator迭代集合元素时,可以调用集合对象的方法增删元素。(错)

    只起到了读取功能,不能删减

  5. JDK 8 中增加一个Stream接口,该接口可以将集合、数组中的元素转换为Stream流的形式(对)

二、选择题

  1. 想要保留具有映射关系的数据,可以使用以下哪些集合 (TreeMap HashMap)
  2. 使用Iterator时,判断是否存在下一个元素可以使用以下哪个方法 (hasNext())
  3. 在程序开发中,经常会使用以下哪个类来存储程序中所需配置?(Properties)
  4. 想要在集合中保存没有重复的元素并且按照一定的顺序排列,可以使用以下哪个集合?(TreeSet)
  5. 以下哪种方法是LinkedList集合中定义的?(getLast() getFirst() remove(int index))

第八章

  1. 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);
	}
}
  1. 在Swing事件处理的过程中,主要涉及三类对象:

    ①事件源

    ②事件对象

    ③监听器

  2. 实现Swing事件处理的主要步骤如下

    ①创建事件源

    ②自定义事件监听器

    ③为事件源注册监听器

  3. 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);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值