Java 是一种广泛使用的编程语言,由 James Gosling 在 Sun Microsystems(现在是 Oracle Corporation 的一部分)于 1995 年发表。Java 是一种静态类型的、类基础的、并发性的、面向对象的编程语言。Java 广泛应用于企业级应用、Web 应用、移动应用(Android)、桌面应用、嵌入式系统和大数据等领域。
首先确定你需要的 JDK 版本。Oracle 提供了多个版本的 JDK,包括最新的版本和旧版本。常见的选择有Oracle JDK 和 OpenJDK。
访问下载页面:访问 Oracle 官方网站
设置环境变量:为了在命令行中方便地运行 Java 程序,你应该设置 JAVA_HOME
环境变量,指向 JDK 的安装路径,并将 JDK 的 bin
目录添加到 PATH
环境变量。
验证安装测试:在命令行中运行 java -version
和 javac -version
,来验证安装并检查 JDK 版本。
Java 环境包包含内置开发工具在 bin 目录下面
Java 内置常用开发工具
开发工具 | 具体文件 | 详细介绍 |
---|---|---|
Java 编译器 | Javac.exe | 将- Java 源代码文件(.java)转换成字节码文件 (.class)。 |
Java 解释器 | Java.exe | 用来执行 javac 编译成的字节码。 |
Java Applet 浏览器 | appletviewer.exe | 执行 HTML 文件上的 Java 小程序的 Java 浏览器。 |
Java 文档生成器 | javadoc.exe | 会使用 Java 源文件代码生成一组 HTML 格式的相关文件。 |
Java 调试器 | jdb.exe | 一个除错器,为 java 程序提供一个命令行调试环境,以便于对 java 解释的类进行除错。 |
Java 反汇编器 | javap.exe | 反汇编一个 Java 字节代码文件,返回类的相关成员。 |
JRE 的地位就像一台计算机一样,编写的 Java 程序必须要JRE才能运行。只要安装了 JRE,就可以正确运行 Java 应用程序。而 JDK 是用于开发 Java 程序的工具包,其中包含了 JRE。
javac 是 Java 编译器命令,用于将 Java 源代码文件编译成字节码文件。编译后,将在同一目录下生成一个以 .class 为后缀的字节码文件,其文件名与源代码文件名相同。这个字节码文件可以在 Java 虚拟机上运行。
javac FileName.java
其中 FileName.java 是要编译的 Java 源代码文件的文件名。请注意,使用 javac 编译 Java 源代码文件需要安装 Java Development Kit(JDK)并配置相应的环境变量。如果未正确配置环境变量,则可能无法在命令行中正确识别 javac 命令。
Java 是双类型的系统,也就是基本数据类型和对象数据类型,简称基本类型和对象。 其中 Java 中有 8 个预定义的基本类型。
byte, short, int, long, float, double, boolean, char
基本数据类型内存占用
在 Java 中 Scanner 类是一个用于获取用户输入的类。它通常用于读取键盘输入操作,从控制台窗口的命令行读取输入数据,或者从文件或字符串中读取输入数据。
Scanner scanner = new Scanner(System.in);
int i = scanner.nextInt();
System.out.println(i);
使用其他类的规则
使用同一个包中的类时,不需要导包。
使用java.lang包中的类时,不需要导包。
其他情况都需要导包。
如果同时使用两个包中的同名类,需要用全类名。
StringBuilder是Java中的一个类,它用于创建可变字符串。与String类不同,StringBuilder类的对象可以修改。这使得StringBuilder在需要频繁修改字符串时更加高效。
StringBuilder sb = new StringBuilder();
sb.append("Hello").append(" ").append("World!");
System.out.println(sb.toString());
sb.delete(5, 10); # 删除从第 5 个位置开始,到第 10 个位置结束的字符
System.out.println(sb.toString());
sb.replace(2, 5, "Java");
System.out.println(sb.toString());
我们创建的是 ArrayList 的对象,而 ArrayList 是 java 已经写好的一个类这个类在底层做了一些处理
打印对象不是地址值,而是集合中存储数据内容在展示的时候会拿 [] 把所有的数据进行包裹。
Java 是一种完全面向对象的编程语言。这意味着在 Java 中,一切都是对象,这包括我们所编写的类、接口、方法,甚至基本数据类型。这种全盘面向对象的特性使得 Java 非常适合构建复杂、可重用的软件架构。
OOP 是面向对象编程(Object-Oriented Programming)的缩写。它是一种编程范式,将程序看作是一系列对象的集合,这些对象之间通过消息传递进行通信和协作。
在 OOP 中,对象是类的实例,类是对象的蓝图或模板,定义了对象的基本结构和行为。类中的属性定义了对象的状态,而方法则定义了对象的行为。通过封装、继承、多态和抽象等特性,OOP 提供了构建复杂、可维护的软件系统的强大工具。
特性 | 名称 | 详细说明 |
---|---|---|
封装性 | Encapsulation | 在面向对象编程中,对象的状态(数据元素)和行为(方法)被捆绑在一起,称为封装。这意味着一个对象的状态不能直接访问,只能通过对象的方法来间接访问。这种封装方式提供了更好的数据隐藏和安全性。 |
继承性 | Inheritance | 继承是面向对象编程的另一个重要特性。它允许我们创建一个新的类(称为子类或派生类),该类继承了另一个类(称为父类或基类)的属性和方法。子类可以重写父类的方法,也可以添加新的方法。这种特性使得代码重用和抽象变得更加容易。 |
多态性 | Polymorphism | 多态是指一个接口或超类可以引用多种实际类型的实例。在运行时,具体引用哪种类型的实例由对象实例决定,而不是由代码决定。这可以提高代码的灵活性和可扩展性。 |
抽象性 | Abstraction | 抽象是指只展现对象行为特性的接口。在 Java 中,我们可以通过抽象类或接口来实现抽象。抽象可以使得程序更加灵活,更容易适应变化。 |
构造方法的作用?
创造对象的时候,由虚拟机自动调用,给成员变量进行初始化的。无参数构造方法初始化的对象时,成员变量的数据均采用默认值。有参数构造方法在初始化对象的时候,同时可以为对象进行赋值。
构造方法有哪些注意事项?
任何类定义出来,默认就自带了无参数构造器,写不写都有。一旦定义了有参数构造器,无参数构造器就没有了,此时就需要自己写无参数构造器了。建议在任何时候都手动写上空参和带全部参数的构造方法。
在Java中,静态变量(static variable)是类变量的一种,它们属于类本身,而不是类的具体实例。静态变量在类中使用static关键字进行声明。静态变量是随着类的加载而加载的,优先于对象出现的。
静态变量特点
静态变量不依赖于任何对象实例,因此它们在类被加载时就已经分配了内存空间。
静态变量在所有实例中共享,即如果一个实例改变了静态变量的值,那么这个改变会影响所有其他实例。
静态变量可以通过类名直接访问,而不需要创建类的实例。
静态变量在声明时必须进行初始化,否则编译器会报错。
Java 静态成员方法
在Java中,静态成员方法是一种属于类本身的方法,而不是类的实例。你可以通过类名直接访问静态方法,不需要创建类的实例。
注意,静态方法只能直接访问静态成员(变量和方法)。他们不能直接访问非静态成员,因为非静态成员需要类的实例来访问。如果你尝试在静态方法中访问非静态成员,编译器会报错。
虚方法表(Virtual Method Table,简称vtable)是Java虚拟机(JVM)实现动态派发的重要机制。在Java中,当一个类继承另一个类时,子类会继承父类中的所有非私有方法。然而,在运行时,JVM需要根据实际的对象类型来动态地调用相应的方法。这就是虚方法表发挥作用的地方。
虚方法表是一个表格,其中存储了对象类型所对应的方法的引用。当调用一个对象的方法时,JVM会通过查找该对象的虚方法表来确定要执行的方法。具体来说,JVM会根据对象的实际类型来确定应该查找哪个虚方法表,并在该表中查找对应的方法。
虚方法表的实现机制是Java虚拟机在运行时动态派发的基础。通过使用虚方法表,JVM可以实现动态派发,即在运行时根据实际的对象类型来选择要执行的方法。这种机制可以提高代码的灵活性和可维护性,因为可以根据需要动态地改变对象的行为。
方法名、参数列表必须与父类中被重写的方法相同。
返回类型必须与父类中被重写方法的返回类型相同或是其子类型。
访问权限不能比父类中被重写方法的访问权限更低。例如,如果父类的方法是public的,那么子类重写该方法时只能使用public访问权限,不能使用protected或private访问权限。
重写方法不能抛出比被重写方法更宽泛的异常类型。如果被重写方法没有声明任何异常,那么重写方法也不能抛出异常;如果被重写方法声明了某些异常,那么重写方法可以不声明这些异常,或者声明相同的异常或其子类异常,但不能声明更宽泛的异常。
子类能继承父类哪些内容?
在Java中,有三个关键字可以用来定义类的访问权限,分别是private
,protected
和public
。
访问权限 | 详细说明 |
---|---|
private | 如果一个类的成员被声明为private ,那么这个成员只能被其本身访问,其他任何类都无法直接访问这个成员。 |
protected | 如果一个类的成员被声明为protected ,那么这个成员可以被其本身、同一包下的其他类以及其子类访问。 |
public | 如果一个类的成员被声明为public ,那么这个成员可以被任何其他类访问。 |
这些访问权限关键字决定了其他类如何访问一个类的成员。通过合理使用这些关键字,可以有效地控制程序的访问权限,保证程序的安全性和稳定性。
Java 多态(Polymorphism)是面向对象编程的四大基本特性之一,其他三个为封装(Encapsulation)、继承(Inheritance)和抽象(Abstraction)。Java 多态是指父类引用指向子类对象。具体来说,如果一个父类引用变量被用来引用子类对象,那么该变量就可以调用子类中重写(Override)的父类方法,以及继承的父类方法。
Java 多态实现方式
方法重写(Override):子类重写父类中的方法,实现自己的行为。
接口实现(Implement):子类实现一个接口,并重写接口中的方法,实现自己的行为。
类型转换:将父类对象强制转换为子类对象,然后调用子类中的方法。
继承和多态性结合使用:子类继承父类并重写其方法,同时将子类对象赋值给父类引用变量,实现多态性。
public class Main {
public static void main(String[] args) {
Animal dog = new Dog();
System.out.println(dog.name);
dog.show();
}
}
class Animal{
public String name = "动物";
public void show() {
System.out.println("动物 - show");
}
}
class Dog extends Animal{
public String name = "狗狗";
public void show() {
System.out.println("狗狗 - show");
}
}
调用成员变量:编译看左边,运行也看左边。
编译看左边就是 javac 编译代码的时候,会看左边的父类中有没有这个变量,如果有,编译成功,如果没有编译失败。运行也看左边就是 java 运行代码的时候,实际获取的就是左边父类中成员变量的值。
调用成员方法:编译看左边,运行看右边。
编译看左边就是 javac 编译代码的时候,会看左边的父类中有没有这个方法,如果有,编译成功,如果没有编译失败。运行看右边就是 java 运行代码的时候,实际上运行的是子类中的方法。
Polymorphism 多态的弊端是什么?
不能调用子类的特有功能报错的原因是当调用成员方法的时候,编译看左边,运行看右边。那么在编译的时候会先检查左边的父类中有没有这个方法,如果没有直接报错。
try {
File file = new File("input.txt");
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = reader.readLine();
while (line != null) {
System.out.println(line);
line = reader.readLine();
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
FileWriter writer = new FileWriter("output.txt");
writer.write("Hello World!");
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
获取 class 对象的 3 种方式(字节码文件对象)
1. class.forName("全类名");
2.类名.class
3.对象.getclass( );