java复习_1

2024-01-08 12:33:12

简单不先于复杂,而是在复杂之后。

在这里插入图片描述

填空题

课程推荐的 jdk 下载网址为 jdk.java.net

使用命令行编译程序:javac -d bin stc*.java

使用命令行运行程序: java -cp bin 类名

java 语言标识符:字母、数字、下划线和美元符号,数字不能做首字母

java 语言中标识符区分大小写

java 语言中基本类型:byte boolean char short int long float double

java 语言中数据类型分为基本数据类型引用类型

Java语言中基本数据类中的数值类型都是有符号的

java 语言声明常量时应使用的关键字是 final

String str = “ ”+ 23 //在23前面添加语句把23转换成String类型

int x = Integer.valueOf (“23”); int y = x + 1; //添加语句将字符串“23”转换为整型

int[] x 中变量 x 属于引用类型数据

封装


绝大多数情况下,interface 只有借助具体的 class 实现它的功能。

java 语言中核心的概念是 class ,不能在 class 的“{”和“}”之外定义变量和函数。

顶层语法元素是指在源文件中可以直接定义的程序语言语法元素。

其他的如变量、方法只能定义在顶层语法元素之内。

class 把一组相关的数据和操作封装在其中,而 package 将一组相关的 class (和 interface、enum、record)封装在其中。

class中的内容


  • 成员

    • 成员变量:表示对象的属性
    • 成员方法:表示对象的行为
    • (其他的内部顶层语法元素)
  • 非成员

    • 构造方法

实例成员和类成员


实例成员必须创建所属类的对象,只能通过对象的变量利用 “.”操作符加上成员名称来访问。

成员定义时添加 static 关键字,称为类成员。

类成员不需要创建对象,可以直接通过可以直接通过类名称“.”操作符加类成员来访问。

类方法只能访问类成员,不能在方法的代码中使用实例成员。

可以在 class 中定义其他的 class。(称为内部类或者接口)

非成员(构造方法)


构造方法不属于类的成员。

构造方法没有返回值,名称与类名相同。

构造方法在使用 new 关键字创建对象时使用,返回对象的引用。

如果构造方法被重载,则根据传递的实参的类型和数量确定实际执行时调用的构造方法。

构造方法重载是指在同一个类中定义了多个构造方法,它们的方法名相同但参数列表不同

只有在源代码中没有定义构造方法的情况下,编译器才会创建一个无参数的构造方法,这个无参构造方法称为默认构造方法(无参构造方法不一定是默认构造方法)

构造方法也和成员方法一样,可以被重载。

可以在定义构造方法时,使用 this 关键字调用其他重载的构造方法,必须是方法体中第一句。

this关键字表示对象自身,通常用在方法形参与成员变量同名时,也可以在其他为了区分二者的情况下使用。

this 关键字不能用于 static 方法内


包将一组相关的 class 、interface组织在一起,主要起到区分命名空间的作用,不同的包中可以各自定义自己类,即使相同的类名称,也不会造成命名冲突。

包名由一个或多个子包名用“.”连接起来组成,每个子包名必须符合 Java 语言的标识符命名规则

标识符由字母、数字、下划线(_)和美元符号($)组成。,第一个字符不能是数字。

包名一般使用小写字母,且采用逆域名命名规则。

如果要将源文件中的所有类都添加到某个包中,必须在源文件中添加 package语句,例如 package pack.age.name

包声明语句必须是源文件中第一行非注释语句。

没有包声明语句的源文件,其中的类属于默认包。

如果要使用包中的若干类,则必须在源文件中添加 import 语句:

  1. 导入包中的所有类:import pack.age.name.*;
  2. 导入包中的某个类:import pack.age.name.ClassName;
  3. 导入包中某个类的类成员:import static Math.PI;

主类


一个类成为主类必须同时具备两个条件:

  • 具有 public static void main(String[] args)方法
  • 在使用 java 命令执行时作为命令行参数指定该类。

一个类如果位于某个包中,则它的完整类名 = 包名+类名,如:xsyu.java2023.demo.Hello

运行时必须指定主类的完整名称

一个 class 定义必备的三个条件是:class 关键字、类名、{}

Java 源文件的名称必须和其中的 public 类的名称相同。

对于一个属于非默认包的类,它编译后的 class 文件必须保存在和包名对应的目录结构下。

开发过程的改变


假设 Hello.java 保存在 当前目录的 src 子目录下,编译命令为:javac -d bin src\*.java

这条命令把位于当前目录的 src 子目录中所有 java 源文件都编译成 .class 文件,保存在当前目录的 bin 目录下,可以看到 bin 目录下自动根据包名建立好了嵌套好的文件夹结构,Hello.class 保存在最底层的 demo 目录下。

要运行上面编译好的 Hello.class 程序,运行命令为java -cp bin xsyu.java2023.demo.Hello

interface


interface 中通常只定义两类内容:

  • 常量,但 public static final通常省略
  • 抽象方法,但 public abstract 通常省略

实现接口

class ClassName implements[interface列表]{
    //······
}

一个 class 可以实现多个 interface

所谓实现(implements)就是把 interface 中定义的抽象方法具体化,定义出这些方法的具体代码

如果一个类只实现了部分 interface 中定义的抽象方法具体化,则该类必须被定义为 abstrac class .未实现的方法无需在 abstrac class 中再声明。

一个非抽象类必须实现 implemnts 列表中的所有接口的所有方法。

可以声明 interface 类型的变量,把实现了同一 interface 的 class 对象赋值给对应 interface 类型的变量。但不可以用 new 关键字创建 interface 类型的变量,因为其中有未明确定义的抽象方法。

interface MyInterface {
    void myMethod();
}

class MyClass implements MyInterface {
    public void myMethod() {
        System.out.println("Implementation of myMethod");
    }
}

public class Main {
    public static void main(String[] args) {
        // 声明接口类型的变量
        MyInterface myObject;

        // 将实现了相同接口的类对象赋值给变量
        myObject = new MyClass();

        // 调用接口方法
        myObject.myMethod();  // 输出:Implementation of myMethod
    }
}

abstract class


抽象方法:abstract Type method([参数列表]); 添加了 abstract 关键字装饰,但没有定义方法体的方法。

抽象类中可以包含 abstract 方法 ,也可以不包含 abstract 方法。

如果一个 class 中定义了 abstract 方法,则这个 class 必须被定义为 abstract class

抽象类中可以定义构造方法

和 interface 一样,可以声明某个 abstract class 类型的变量,把某个继承了这个 abstract class 的具体类对象赋值给对应 abstract class 类型的变量。但不可以使用 new 关键字创建 abstract class 类型的变量

访问控制关键字


public: 所有代码都可以访问

protected: 除同一个 package 中的其他类可以访问外,即使属于不同包的子类也可以访问。

默认(无修饰符): 默认只有同一个 package 中的其他类可以访问

private: 只有类自身的成员方法和构造方法可以访问

通常情况下,成员变量都定义为 private ,然后根据需要定义读取或者修改成员变量的方法。

成员方法也只在明确需要外界访问时,定义成 public 等相对宽松的访问范围

继承


class ClassName extends SuperClass{
    //
}

interface InterfaceName extends /*[interface列表]*/{
    //
}

在 java 语言中,class 是单继承,extends 关键字后只能有一个类名,即只能有一个直接父类;interface 是单继承,extends 关键字后可以有多个 interface 名称。

如果一个类定义时没有使用 extends 关键字,则它的超类是 Object 类

Object类是Java中所有类的根类,它定义了一些通用的方法,如toString()equals()hashCode()等。因此,所有的Java类都最终是Object类的子类,直接或间接地。

子类的代码中,可以直接访问所有符合访问控制规则的超类中的成员。

子类的构造方法总会调用超类的构造方法。如果在子类的构造方法中,没有调用超类构造方法的语句,则编译器会插入调用超类无参构造方法的语句

子类中明确调用超类构造方法时,使用 super 关键字。

需要时,子类中可以使用 super 关键字访问超类的成员变量或者成员方法。

可以把子类对象赋值给超类类型的变量。(向上转型)

可以使用子类类型的变量访问超类中符合访问规则的成员

如果把子类对象赋值给超类类型变量,则不能使用超类类型变量访问只在子类中定义的成员’

不属于和超类同一包中的类,无法通过子类变量来访问 protected 成员。

  1. 在同一包中的类:
    • 类可以访问同一包中其他类的 protected 成员。
  2. 不同包中的子类:
    • 子类可以访问其父类中声明为 protected 的成员。
  3. 不同包中的非子类:
    • 非子类的类无法直接访问其它包中类的 protected 成员。

final class ClassName {…},则该类不能被继承

文章来源:https://blog.csdn.net/Lixinze__/article/details/135370900
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。