JMU----数科 java期末知识点民间总结(1)

根据老师给的知识点自己的一些总结

不保证是对的 有疑问请看书或者看视频

jdk

详细解释:

JDK(Java Development Kit)是Java开发工具包的缩写。它是由Oracle(以前是Sun Microsystems)提供的一套软件开发工具,专门用于Java应用程序的开发、编译、调试和运行。JDK包括了Java编译器(javac)、Java虚拟机(JVM)、Java类库以及其他一些工具和实用程序。开发人员使用JDK来创建、编译和运行Java应用程序,它是Java开发的基础。

通俗易懂的解释:

JDK就像是一个魔法工具箱,里面有各种工具,让程序员们能够轻松地创建、改进和运行Java程序。比如,你要画画,工具箱里就有画笔、颜料等工具,JDK里有编程的工具,让程序员们可以写程序、检查程序有没有问题,并且运行程序。简单来说,JDK就是帮助程序员编写和运行Java程序的工具包。

/bin目录

命令运行目录通常在/bin里

详细解释:

/bin 目录通常是一个计算机系统中的二进制文件(binary files)目录,这里存放了可执行文件(executable files)或者命令(commands)。在Java开发中,特指JDK中的 /bin 目录,这是Java开发工具的二进制文件目录。在这个目录中,你会找到一些关键的工具,比如 javac(Java编译器)和 java(Java虚拟机)等。通过这些工具,你可以编译和运行Java程序。

在命令行中,你可以使用 javac 命令来编译你的Java源代码文件(以 .java 结尾)。例如,你可以打开命令行窗口,切换到包含你的Java文件的目录,然后运行类似以下的命令:

javac YourJavaFileName.java

这将使用 javac 编译器将你的Java源代码文件编译成Java字节码文件(以 .class 结尾)。然后,你可以使用 java 命令运行生成的字节码文件,比如:

java YourJavaFileName

这样就会在命令行中执行你的Java程序。

通俗易懂的解释:

/bin 目录就像是一个魔法盒子,里面放着一些特殊的工具,让程序员们能够通过命令行窗口完成一些重要的任务。比如,有一个叫做 javac 的工具,它能够把你写的Java代码翻译成计算机能懂的语言;还有一个叫做 java 的工具,它能够运行你的Java程序。所以,当你在命令行中输入一些命令,比如 javac YourJavaFileName.java,其实就是在告诉计算机使用 /bin 目录里的某个工具,让它帮你完成编译的工作。

类的修饰符

在Java中,类的修饰符用于控制类的访问和行为。以下是一些常见的类修饰符:

  1. public 这是最广泛使用的修饰符,表示类对所有的类可见,其他类可以访问该类。

  2. abstract 抽象类的修饰符,表示该类不能被实例化,只能被继承,并且可能包含抽象方法。

  3. final 表示类是最终版本,不能被其他类继承。

  4. strictfp 用于浮点数计算,确保在不同平台上的结果一致。

  5. final abstract 在某些情况下,一个类可以同时使用finalabstract关键字,表示该类不能被继承,但可以包含抽象方法。

  6. default(Java 8及以上版本): 用于指定接口中的默认方法

访问控制符

在Java中,有四种主要的访问控制符,它们用于控制类、变量、方法和构造方法的访问权限。这些访问控制符包括:

  1. public(公共的): 最宽松的访问级别。被声明为 public 的类、方法、变量等,可以被任何其他类访问。

  2. protected(受保护的): 这个访问级别用于类的成员,使得它们对同一包内的其他类可见,同时也对子类可见。

  3. default(默认的,不使用关键字修饰): 如果没有指定任何访问控制符,默认为包级私有,即同一个包内的类可以访问。

  4. private(私有的): 最严格的访问级别。被声明为 private 的类、方法、变量等,只能被定义它们的类访问。

类的修饰符和访问控制符的关系

  • 修饰符描述了类的特性和行为,而不直接控制访问权限。
  • 访问控制符用于控制类的成员的访问权限,决定哪些类可以访问这些成员。

在实际使用中,这两者可以结合起来,以达到更好的封装和控制访问权限的效果。例如,一个类可以使用 public 修饰符表示它对外公开,但其成员变量可以使用 private 控制,以保护这些变量不被外部直接访问。

数组的声明与定义

声明

// 声明一个整型数组,数组名为numbers
int[] numbers;

定义

// 定义一个包含5个整数的数组
numbers = new int[5];

声明与定义

int[] numbers = new int[5];

构造方法及其特点

构造方法是一种特殊类型的方法,用于在创建对象时进行初始化操作。在Java中,构造方法的名称必须与类的名称相同,并且没有返回类型,甚至没有 void 关键字。以下是构造方法的特点:

  1. 方法名称与类名相同: 构造方法的名称必须与类的名称完全相同,包括大小写。

    public class MyClass {
        // 构造方法
        public MyClass() {
            // 构造方法的内容
        }
    }
    

    没有返回类型: 构造方法没有返回类型,甚至没有 void 关键字。这是因为构造方法的目的是初始化对象而不是返回值。

        

public class MyClass {
    // 构造方法
    public MyClass() {
        // 构造方法的内容
    }
}

用于对象初始化: 构造方法用于在创建对象时执行必要的初始化操作。当使用 new 关键字实例化一个类时,构造方法会被自动调用。

MyClass myObject = new MyClass(); // 构造方法被调用

可以重载: 与普通方法一样,构造方法可以被重载,即可以有多个构造方法,它们有不同的参数列表。这使得创建对象时可以根据不同的需求选择不同的构造方法。

public class MyClass {
    // 默认构造方法
    public MyClass() {
        // 构造方法的内容
    }

    // 带参数的构造方法
    public MyClass(int value) {
        // 构造方法的内容,可以使用传入的参数进行初始化
    }
}

在继承中的特殊性: 如果子类没有定义构造方法,那么将使用父类的无参构造方法。如果子类定义了构造方法,可以通过 super() 调用父类的构造方法,确保父类的初始化得以执行。

public class ChildClass extends ParentClass {
    // 构造方法
    public ChildClass() {
        super(); // 调用父类的构造方法
        // 子类构造方法的内容
    }
}

成员变量和局部变量

在Java中,变量分为成员变量(也称为实例变量)和局部变量,它们有着不同的作用范围和生命周期。

成员变量

成员变量是定义在类中,但在任何方法、构造方法或者块之外的变量。它们与对象的实例相关联,每个类的对象都有一份成员变量的拷贝,用于描述对象的属性。成员变量可以是各种数据类型,包括基本数据类型和引用数据类型。

public class MyClass {
    // 成员变量
    int memberVariable;
    
    // 构造方法
    public MyClass(int value) {
        memberVariable = value;
    }

    // 方法
    public void printMemberVariable() {
        System.out.println(memberVariable);
    }
}

局部变量

局部变量是定义在方法、构造方法或者语句块内部的变量。它们在方法调用时创建,方法结束时销毁。局部变量在声明时需要初始化,否则编译器会报错。局部变量只在声明它的方法、构造方法或者语句块中可见,超出该范围就不能访问。

public class MyClass {
    // 成员变量
    int memberVariable;
    
    // 构造方法
    public MyClass(int value) {
        memberVariable = value;
    }

    // 方法
    public void printLocalVariable() {
        // 局部变量
        int localVar = 10;
        System.out.println(localVar);
    }
}

总结

  • 成员变量: 属于类的一部分,每个对象都有一份,用于描述对象的属性。
  • 局部变量: 定义在方法、构造方法或者语句块内部,只在声明它的作用域内可见,方法结束时销毁。

java的垃圾回收机制

ava的垃圾回收机制是一种自动管理内存的机制,目的是使开发者从手动管理内存的负担中解脱出来,避免内存泄漏和其他与手动内存管理相关的问题。以下是Java的垃圾回收机制的主要特点和原理:

特点:

  1. 自动化: Java的垃圾回收机制是自动执行的,无需程序员手动释放内存。垃圾回收器负责识别和回收不再被引用的对象。

  2. 透明: 垃圾回收是在后台默默进行的,程序员无需关心垃圾回收的具体实现细节。这使得开发者可以更专注于业务逻辑而不是内存管理。

  3. 不确定性: 垃圾回收的时机是不确定的,它依赖于Java虚拟机的具体实现。虽然我们可以手动调用 System.gc() 来建议垃圾回收,但并不能确保立即执行。

原理:

Java的垃圾回收机制基于以下两个主要原理:

  1. 引用计数法: 这是一种简单的垃圾回收方法,它通过对每个对象记录引用次数。当引用次数变为零时,说明对象不再被引用,就可以被回收。然而,Java并没有采用引用计数法,因为该方法难以解决循环引用的问题。

  2. 可达性分析法: Java的主要垃圾回收方式是基于可达性分析。它通过根对象(如栈中的引用、静态变量等)出发,标记所有被引用的对象,然后将未标记的对象视为垃圾,进行回收。这种方法可以有效解决循环引用的问题。

垃圾回收器(Garbage Collectors):

Java有不同类型的垃圾回收器,例如串行回收器(Serial Collector)、并行回收器(Parallel Collector)、并发标记清理回收器(Concurrent Mark-Sweep Collector)、G1收集器等。这些回收器有不同的性能特点,可以根据应用程序的需求进行选择。

总体而言,Java的垃圾回收机制通过不断追踪对象的引用关系,识别和回收不再被引用的对象,以释放内存空间。这一特性使得Java成为一种相对安全和方便的编程语言,减轻了开发者的内存管理负担。

类的继承,子类调用父类的构造函数

在Java中,子类通过使用关键字 super 来调用父类的构造函数。这通常发生在子类的构造函数中,用于初始化从父类继承而来的属性或执行父类的一些初始化逻辑

public class ParentClass {
    // 父类的构造函数
    public ParentClass() {
        // 父类的初始化逻辑
    }
}

public class ChildClass extends ParentClass {
    // 子类的构造函数
    public ChildClass() {
        // 调用父类的构造函数
        super();
        // 子类的初始化逻辑
    }
}

如果父类有多个构造函数,子类在调用父类构造函数时可以选择调用特定的构造函数,

public class ParentClass {
    // 第一个构造函数
    public ParentClass() {
        // 父类的初始化逻辑
    }

    // 第二个构造函数
    public ParentClass(int value) {
        // 父类的初始化逻辑,可以根据参数进行不同的初始化
    }
}

public class ChildClass extends ParentClass {
    // 子类的构造函数
    public ChildClass() {
        // 调用父类的第一个构造函数
        super();
        // 子类的初始化逻辑
    }

    // 子类的构造函数,可以选择调用父类的第二个构造函数
    public ChildClass(int value) {
        // 调用父类的第二个构造函数
        super(value);
        // 子类的初始化逻辑
    }
}

总体来说,使用 super() 可以在子类的构造函数中调用父类的构造函数,确保了继承关系中父类的初始化工作得以执行。

final,interface,instanceof(),object类,package,@override

final

  • final 是一个关键字,用于修饰类、方法或变量。
  • 当用于类时,表示该类不能被继承,即为最终类。
  • 当用于方法时,表示该方法不能被子类重写。
  • 当用于变量时,表示该变量是一个常量,一旦赋值后不能被修改。
    final class FinalClass {
        // 类的定义
    }
    
    class ChildClass /*extends FinalClass*/ { // 无法继承FinalClass
        // 类的定义
    }
    
    class Example {
        final int constantValue = 10;
    
        final void finalMethod() {
            // 方法的定义
        }
    }
    

    interface

  • interface 是一个关键字,用于定义接口,一种抽象类型。
  • 接口中可以包含抽象方法、常量(默认为 public static final),但不包含实例变量或构造方法
  • 类通过 implements 关键字实现接口,实现接口的类必须提供接口中定义的所有方法的具体实现。
    interface MyInterface {
        void myMethod();
    }
    
    class MyClass implements MyInterface {
        @Override
        public void myMethod() {
            // 方法的具体实现
        }
    }
    

    instanceof

  • instanceof 是一个关键字,用于在运行时判断对象是否是某个类的实例。
  • 返回 true 表示对象是指定类或其子类的实例,返回 false 表示不是。
    class Example {
        public static void main(String[] args) {
            Object obj = new String("Hello");
    
            if (obj instanceof String) {
                System.out.println("obj is an instance of String");
            } else {
                System.out.println("obj is not an instance of String");
            }
        }
    }
    

    Object 类:

  • Object 类是Java中所有类的根类,即所有类都直接或间接地继承自 Object 类。
  • Object 类提供了一些通用的方法,如 toString()equals()hashCode() 等。
  • 所有类都可以通过重写这些方法来定制它们的行为。
    class Example {
        public static void main(String[] args) {
            Object obj = new Object();
            String str = obj.toString(); // 调用Object类的toString方法
        }
    }
    

    package

  • package 是一个关键字,用于定义Java中的包,用于组织和管理类。
  • 包是一种将相关的类组织在一起的机制,有助于解决类名冲突和提高代码的可维护性。
  • 包名通常是小写字母,按照域名反写的方式组织。
    package com.example.myapp;
    
    public class MyClass {
        // 类的定义
    }
    

    @Override

  • @Override 是一个注解,用于告诉编译器该方法是重写父类或实现接口中的方法。
  • 如果使用了 @Override 注解,但实际上并没有覆盖父类或接口的方法,编译器会产生错误。
    class ParentClass {
        void myMethod() {
            // 父类方法的定义
        }
    }
    
    class ChildClass extends ParentClass {
        @Override
        void myMethod() {
            // 子类覆盖父类方法的定义
        }
    }
    

  • 22
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值