曾用名
Oak(橡树)
公司
sun斯坦福大学校园网->oracle甲骨文收购
之父
詹姆斯·高斯林 James Gosling
应用
Java 是一种广泛应用于软件开发的编程语言。它是一种面向对象的、跨平台的语言,具有很强的可移植性和灵活性。以下是 Java 语言在不同领域的一些常见应用:
-
企业级应用开发: Java 在企业级应用开发中非常流行,特别是在构建大型、复杂的系统和服务方面。Java Enterprise Edition(Java EE)提供了一套规范,用于开发企业级应用,包括分布式系统、Web 应用程序等。
-
Web 开发: Java 被广泛用于构建 Web 应用程序。Java 的 Servlet 和 JSP(JavaServer Pages)技术使得开发者能够构建动态、可扩展的 Web 应用。流行的 Java Web 框架包括 Spring、Struts 和 JavaServer Faces(JSF)等。
-
移动应用开发: Android 操作系统的应用开发主要使用 Java 编程语言。开发者可以使用 Android Studio 和 Java 来构建 Android 应用,并通过 Java 编写应用的业务逻辑。
-
桌面应用程序: Java 提供了图形用户界面(GUI)开发的工具包,如 JavaFX 和 Swing,用于构建跨平台的桌面应用程序。这使得开发者能够创建能在不同操作系统上运行的应用。
-
嵌入式系统: Java 的一些轻量级版本,如 Java ME(Micro Edition),被用于嵌入式系统和移动设备的开发。这使得开发者能够在资源受限的环境中构建应用。
-
大数据和云计算: Java 在大数据处理和云计算领域也有一席之地。Hadoop、Spark 等大数据框架的部分组件是用 Java 编写的。同时,Java 的跨平台性和强大的网络支持使其成为云计算平台上开发应用的理想选择。
-
游戏开发: Java 也用于开发一些桌面和移动平台的游戏。例如,Minecraft 这个流行的游戏就是使用 Java 编写的。
-
金融应用: 由于 Java 具有高度可靠性和安全性,它在金融行业的应用非常广泛。许多银行、证券公司和金融机构使用 Java 来构建交易系统、风险管理系统等。
总体而言,Java 的广泛适用性和强大的生态系统使其成为许多不同领域的首选编程语言之一。
jdk、jvm、jre区别
在Java开发中,有三个重要的概念:JDK(Java Development Kit)、JRE(Java Runtime Environment)和JVM(Java Virtual Machine)。它们之间的区别如下:
简而言之:
通常情况下,如果你是开发人员,你需要安装 JDK;如果你只是运行 Java 应用程序,你只需安装 JRE。在任何情况下,都需要 JVM 来执行 Java 程序。
快捷键
文档注释
文档注释的内容是可以提取到一个程序说明文档中去的
关键字
java自己要用到的词、有特殊含义的一些词
标识符
就是名字,像前面我们取的类名,变量名其实都是标志符,就是定个命名规则
数据类型
API
Application Programming Interface:应用程序编程接口
包
Java有许多常用的包(packages)提供了各种功能,从基本的数据结构到网络编程、图形用户界面(GUI)和数据库连接。以下是一些Java中常用的包:
1.lang:包含Java语言的核心类,如基本数据类型的包装类、字符串处理、线程、异常处理等。
2.util: 提供了集合框架(如List、Set、Map)、日期和时间处理、随机数生成、Scanner等实用工具类。
3. io:包含用于进行输入和输出的类,包括文件操作、流(InputStream和OutputStream)、读写器(Reader和Writer)。
4. net: 用于网络编程的类,包括Socket、ServerSocket、URLConnection。
5. java.awt和javax.swing:用于创建图形用户界面(GUI)的类。其中,`java.awt`提供了抽象的窗口工具包,而`javax.swing`提供了一套轻量级的组件,它们构成了Swing GUI框架。
6. sql:用于数据库访问的类,提供了JDBC(Java Database Connectivity)的实现,允许Java程序连接和操作数据库。
7. math:包含用于高精度算术的类,如BigInteger和BigDecimal。
8. text:用于处理文本格式化和解析的类,包括DateFormat和NumberFormat。
9. nio: 提供了新的I/O(非阻塞IO)功能,包括Buffer、Channel、Selector等。
10. security:包含了与安全相关的类,包括消息摘要、加密、数字签名等。
11. java.xml和javax.xml:用于处理XML的类,包括DOM(Document Object Model)和SAX(Simple API for XML)。
12. java.util.concurrent:提供了并发编程的支持,包括线程池、并发集合等。
这只是Java中一小部分常用的包,Java平台还提供了许多其他专用于特定领域的包。根据具体的应用需求,你可能会使用到更多的包和类。
内存区域
在Java中,通常可以将内存划分为以下几个主要区域:
1. 方法区(Method Area):
- 存储类的结构信息、常量、静态变量、即时编译器编译后的代码等。
- 所有线程共享,用于存储类的元信息。
- 在HotSpot虚拟机中,方法区被称为"永久代",但在较新的Java版本中,"永久代"已经被"元空间"(Metaspace)所取代。
2. 栈区(Stack):
- 每个线程都有一个私有的栈,用于存储局部变量、操作数栈、方法出口等信息。
- 方法调用时会创建一个栈帧,方法执行完毕时栈帧被弹出。
- 栈的大小和深度是有限的,由虚拟机或者JVM启动参数设定。
3. 堆区(Heap):
- 存储对象实例,是Java程序中动态分配内存的主要区域。
- 所有线程共享,由垃圾回收器管理。
- 在堆上通常分为新生代和老年代,还可能包括Eden区、Survivor区等。
4. 本地方法栈(Native Method Stack):
- 用于执行本地方法,与虚拟机栈类似。
- 区别在于虚拟机栈执行Java方法,本地方法栈执行本地(非Java)方法。
- 和虚拟机栈一样,每个线程都有一个本地方法栈,生命周期与线程相同。
5. 寄存器区(Registers):
- 寄存器是CPU的寄存器,不属于Java虚拟机内存区域。
- 用于存储临时数据和指针,执行速度快。
- Java虚拟机可以将局部变量表中的数据存储到寄存器中,加速方法执行。
这些内存区域的划分有助于更有效地管理和优化Java程序的执行。其中,栈、堆、方法区是Java内存模型的核心部分,而本地方法栈和寄存器则属于与具体硬件和操作系统相关的部分。在程序执行过程中,数据在这些区域之间进行交换和传递。
深拷贝和浅拷贝
深拷贝(Deep Copy)和浅拷贝(Shallow Copy)是关于对象复制的两个概念,涉及到对象中的引用类型数据。
1. 浅拷贝(Shallow Copy):
- 浅拷贝是指在复制过程中,只复制对象本身和对象中的基本数据类型字段,而不复制引用类型字段指向的对象。
- 复制的对象和原对象共享引用类型字段指向的对象,修改其中一个对象中的引用类型字段会影响另一个对象。
- 在Java中,可以通过`Object`类的`clone()`方法实现浅拷贝,或者通过复制构造函数、赋值操作等方式。
class Person implements Cloneable {
String name;
Address address;
// 浅拷贝
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
2. 深拷贝(Deep Copy):
- 深拷贝是指在复制过程中,不仅复制对象本身和对象中的基本数据类型字段,还复制引用类型字段指向的对象,形成一份新的独立对象。
- 复制的对象和原对象不共享引用类型字段指向的对象,修改其中一个对象中的引用类型字段不会影响另一个对象。
- 实现深拷贝的方式通常包括手动递归复制引用类型字段、使用序列化与反序列化、使用第三方库等。
import java.io.*;
class Person implements Serializable {
String name;
Address address;
// 深拷贝通过序列化与反序列化实现
public Object deepCopy() throws IOException, ClassNotFoundException {
// 将对象写入流中
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(this);
// 从流中读取对象
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
return ois.readObject();
}
}
总体来说,浅拷贝只复制对象及其直接属性,而对于引用类型的属性,复制的是引用。深拷贝则会递归复制整个对象结构,包括对象中的引用类型字段。选择深拷贝还是浅拷贝取决于具体的业务需求和对象结构。
错题
谈一下方法的理解:
方法的理解:
方法是一段具有独立功能的代码块, 不调用就不执行
带来的好处:
1. 提高了代码的可阅读性
- 可以将原本挤在一起的臃肿代码, 按照功能进行分类管理.
2. 提高了代码的复用性
- 只需要编写好一个方法, 就可以对方法进行多次调用了
定义的格式:
public static 返回值类型 方法名 (参数列表) {
方法体;
return 结果数据;
}
详细描述:
public static : 目前来说, 暂时记住即可
返回值类型: 跟return返回的结果有关
方法名: 自己定义的名字(见名知意, 小驼峰命名法)
参数列表: 方法逻辑运行之前, 需要的一些材料
方法体: 方法中真正执行的代码逻辑
return :
1. 用于结束方法
2. 用于将结果返还给调用者
1.调用方法传递实际参数的时候, 参数是基本数据类型, 和引用数据类型, 有什么不同 ?
基本类型的参数传递:在方法调用时,实参的值被复制给形参。在方法内部,形参是实参的一个副本。因此,如果在方法内部修改形参的值,不会影响到实参的值。
引用类型的参数传递:在方法调用时,实参的引用被复制给形参。在方法内部,形参和实参指向同一个对象。因此,如果在方法内部修改形参所指向的对象的状态,实参也会受到影响。
2.正确的方法重载, 需要满足哪些条件呢 ?
-
方法名相同: 重载的方法必须具有相同的方法名。
-
参数列表不同: 重载的方法必须具有不同的参数列表,这包括参数的类型、数量或者顺序。
-
返回类型可以相同也可以不同: 方法的返回类型不是方法重载的一部分,因此可以有相同或不同的返回类型
-
访问修饰符可以相同也可以不同: 重载的方法可以具有相同或不同的访问修饰符。
-
方法重载不能仅仅依靠返回类型的不同: 返回类型不是方法重载的标志,只有参数列表不同才能构成重载。
3.返回值方法有几种调用格式, 分别是哪几种, 还有不带返回值方法的调用格式?
带返回值(单独调用(不推荐)、赋值调用(推荐)、输出调用(偶尔用))和不带返回值(只能单独调用)的方法
4.代码题:求最大公约数的方法
import java.util.Scanner;
public class Lei {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
System.out.println(gys(a, b));
}
// 求最大公约数的方法
public static int gys(int a, int b) {
if (a == 0 || b == 0) {
System.out.println("输入的数字不能为0");
return -1; // 返回一个非法值表示出错
}
while (a % b != 0) {
int t = a % b;
a = b;
b = t;
}
return b;
}
}
撒花
拖延症晚期,第一次完成博客记录今天学的Java内容和复盘,请多指教,欢迎所有人踊跃评论。