根据老师给的知识点自己的一些总结
不保证是对的 有疑问请看书或者看视频
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中,类的修饰符用于控制类的访问和行为。以下是一些常见的类修饰符:
-
public
: 这是最广泛使用的修饰符,表示类对所有的类可见,其他类可以访问该类。 -
abstract
: 抽象类的修饰符,表示该类不能被实例化,只能被继承,并且可能包含抽象方法。 -
final
: 表示类是最终版本,不能被其他类继承。 -
strictfp
: 用于浮点数计算,确保在不同平台上的结果一致。 -
final abstract
: 在某些情况下,一个类可以同时使用final
和abstract
关键字,表示该类不能被继承,但可以包含抽象方法。 -
default
(Java 8及以上版本): 用于指定接口中的默认方法
访问控制符
在Java中,有四种主要的访问控制符,它们用于控制类、变量、方法和构造方法的访问权限。这些访问控制符包括:
-
public
(公共的): 最宽松的访问级别。被声明为public
的类、方法、变量等,可以被任何其他类访问。 -
protected
(受保护的): 这个访问级别用于类的成员,使得它们对同一包内的其他类可见,同时也对子类可见。 -
default
(默认的,不使用关键字修饰): 如果没有指定任何访问控制符,默认为包级私有,即同一个包内的类可以访问。 -
private
(私有的): 最严格的访问级别。被声明为private
的类、方法、变量等,只能被定义它们的类访问。
类的修饰符和访问控制符的关系
- 修饰符描述了类的特性和行为,而不直接控制访问权限。
- 访问控制符用于控制类的成员的访问权限,决定哪些类可以访问这些成员。
在实际使用中,这两者可以结合起来,以达到更好的封装和控制访问权限的效果。例如,一个类可以使用 public
修饰符表示它对外公开,但其成员变量可以使用 private
控制,以保护这些变量不被外部直接访问。
数组的声明与定义
声明
// 声明一个整型数组,数组名为numbers
int[] numbers;
定义
// 定义一个包含5个整数的数组
numbers = new int[5];
声明与定义
int[] numbers = new int[5];
构造方法及其特点
构造方法是一种特殊类型的方法,用于在创建对象时进行初始化操作。在Java中,构造方法的名称必须与类的名称相同,并且没有返回类型,甚至没有 void
关键字。以下是构造方法的特点:
-
方法名称与类名相同: 构造方法的名称必须与类的名称完全相同,包括大小写。
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的垃圾回收机制的主要特点和原理:
特点:
-
自动化: Java的垃圾回收机制是自动执行的,无需程序员手动释放内存。垃圾回收器负责识别和回收不再被引用的对象。
-
透明: 垃圾回收是在后台默默进行的,程序员无需关心垃圾回收的具体实现细节。这使得开发者可以更专注于业务逻辑而不是内存管理。
-
不确定性: 垃圾回收的时机是不确定的,它依赖于Java虚拟机的具体实现。虽然我们可以手动调用
System.gc()
来建议垃圾回收,但并不能确保立即执行。
原理:
Java的垃圾回收机制基于以下两个主要原理:
-
引用计数法: 这是一种简单的垃圾回收方法,它通过对每个对象记录引用次数。当引用次数变为零时,说明对象不再被引用,就可以被回收。然而,Java并没有采用引用计数法,因为该方法难以解决循环引用的问题。
-
可达性分析法: 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() { // 子类覆盖父类方法的定义 } }