背景
学习Java我们不仅要学会如何去打代码、程序。还要懂得他们每一个字符、字符串和类等等的含义与用途。虽然这些内容基础,但是我们一旦对这些内容的认识和理解加深,不仅会对 Java 进一步学习起到基石般的支撑作用,帮助我们更顺畅地理解各种代码示例和框架的实现原理。
—————————————————————————————————————————
目录
- 基本数据类型和引用数据类型的区分
- String的定义与作用
- jre、jvm分别是什么?java为什么可以实现跨平台运行? —————————————————————————————————————————
一、基本数据类型和引用数据类型的区分
1.什么是基本数据类型与引用数据类型
(1)基本数据类型:
定义:基本数据类型是编程语言中最基础的数据类型,它们通常用来表示简单的数据值。
分类:一共八个基本数据类型,分别为byte、short、int、long(整数类型),float、double(浮点类型),char(表示字符),boolean(表示真假)。
| 数据类型 | 字节数 | 取值范围(示例,不同环境下具体范围有标准定义) | 默认值 | 示例代码声明方式 |
|---|---|---|---|---|
byte | 1 字节(8 位) | -128到 127 | 0 | byte num = 10; |
short | 2 字节(16 位) | -32768到 32767 | 0 | short num = 100; |
int | 4 字节(32 位) | -2147483648到 2147483647 | 0 | int num = 1000; |
long | 8 字节(64 位) | -9223372036854775808到 9223372036854775807 | 0L(注意要加 L 后缀表示长整型) | long num = 10000000000L; |
float | 4 字节(32 位) | 大约 ±3.40282347× 到 ±1.40129846×(有精度限制) | 0.0f(注意要加 f 后缀表示单精度浮点数) | float num = 3.14f; |
double | 8 字节(64 位) | 大约 ±1.7976931348623157× 到 ±2.2250738585072014×(有精度限制) | 0.0d(一般 d 可省略) | double num = 3.1415926; |
char | 2 字节(16 位) | '\u0000'(即 0)到 '\uffff'(即 65535),表示 Unicode 字符 | '\u0000'(空字符) | char ch = 'A'; |
boolean | 理论上 1 位,但实际按字节对齐,通常占 1 字节 | true或false | false | boolean flag = true; |
(2)引用数据类型
-
类(Class)
- 定义:类是面向对象编程中最基本的引用数据类型。它用于定义对象的模板,包含属性(成员变量)和方法(成员函数)。
String类用于处理字符串,ArrayList是动态数组,HashMap用于存储键值对。例如,在 Java 中可以定义一个Person类:
- 定义:类是面向对象编程中最基本的引用数据类型。它用于定义对象的模板,包含属性(成员变量)和方法(成员函数)。
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
-
用途:通过类可以创建多个对象,每个对象都有自己的属性值和行为(通过方法实现)。类之间还可以通过继承、实现接口等方式建立关系,以实现代码的复用和复杂的业务逻辑。例如,
Student类可以继承Person类,增加学生特有的属性(如学号)和方法(如学习)。
-
接口(Interface)
- 定义:接口是一种抽象类型,它定义了一组方法签名(方法名、参数列表和返回类型),但没有方法体。在 Java 中,接口使用
interface关键字定义。例如:
- 定义:接口是一种抽象类型,它定义了一组方法签名(方法名、参数列表和返回类型),但没有方法体。在 Java 中,接口使用
interface Shape {
double getArea();
double getPerimeter();
}
-
用途:接口主要用于定义规范和契约,实现接口的类必须实现接口中定义的所有方法。它使得代码具有更高的可插拔性和可维护性。例如,
Circle类和Rectangle类都可以实现Shape接口,分别实现计算面积和周长的方法,这样在处理不同形状的图形时,可以统一通过Shape接口来调用方法,而不需要关心具体是哪种形状。
-
数组(Array)
- 定义:数组是一种用于存储多个相同类型元素的数据结构,它是引用数据类型。在 Java 中,数组的声明和初始化有多种方式。例如,声明一个整型数组:
int[] numbers = new int[5];或者int[] numbers = {1, 2, 3, 4, 5};。 - 用途:数组用于存储和处理批量数据,方便对一组相关的数据进行操作,如排序、查找等。例如,可以使用数组来存储学生的成绩,然后通过循环遍历数组来计算平均分、最高分等。
- 定义:数组是一种用于存储多个相同类型元素的数据结构,它是引用数据类型。在 Java 中,数组的声明和初始化有多种方式。例如,声明一个整型数组:
-
枚举(Enum)
- 定义:枚举是一种特殊的数据类型,它允许定义一组命名的常量。在 Java 中,枚举使用
enum关键字定义。例如:
- 定义:枚举是一种特殊的数据类型,它允许定义一组命名的常量。在 Java 中,枚举使用
enum Season {
SPRING, SUMMER, AUTUMN, WINTER
}
-
用途:枚举主要用于表示一组固定的值,使得代码更加清晰和可读。例如,在表示一周的星期几、颜色的种类等情况下使用枚举,可以避免使用魔法数字(没有明确含义的数字常量),并且编译器会对枚举类型进行类型检查,提高代码的安全性。
-
注解(Annotation)
- 定义:注解是一种为程序元素(类、方法、变量等)添加元数据(关于数据的数据)的方式。在 Java 中,注解以
@符号开头,通过@interface关键字定义。例如:
- 定义:注解是一种为程序元素(类、方法、变量等)添加元数据(关于数据的数据)的方式。在 Java 中,注解以
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@interface MyAnnotation {
String value();
}
- 用途:注解主要用于提供额外的信息给编译器或其他工具,用于代码的配置、检查等目的。例如,在框架开发中,注解可以用于自动配置、依赖注入等功能。在 Java 的企业级开发中,像 Spring 框架就大量使用注解来简化配置和开发流程。
2.区分基本数据类型和引用数据类型
(1.)存储方式不同:
基本数据类型:基本数据类型的值直接存储在栈内存中;
栈(Stack): 在 Java 中,栈是一种数据结构,用于存储数据。它遵循后进先出的原则,就像一个只允许在一端进行插入和删除操作的容器。比喻:有一叠盘子,最后放上去的盘子会最先被拿走,这就类似于栈的操作方式。
引用数据类型:引用数据类型存储的是对象的引用,而对象本身存储在堆内存中。
堆内存(Heap Memory):是计算机内存中的一块区域,主要用于动态分配对象的存储空间,是存储对象和动态分配的数据结构。
二、String的定义与作用
-
定义:在java中,String是一个类,是java中已经给我们定义好的类,用于表示字符序列,也就是我们通常所说的字符串。它是一种引用数据类型。
-
创建方式:
(1.)直接赋值:可以使用双引号将字符序列括起来直接赋值给String变量,这是最常见的方式。例如:String message = "Welcome to Java";。在这种情况下,Java 会在字符串常量池中查找是否已经存在相同内容的字符串,如果存在,则直接复用该字符串对象;如果不存在,则在常量池中创建一个新的字符串对象。
(2.)使用new关键字构造:通过new关键字调用String的构造函数来创建对象。例如:String anotherMessage = new String("Another String");。这种方式会在堆内存中创建一个新的String对象,即使字符串内容与常量池中已有的字符串相同。不过,在实际开发中,除非有特殊需求,直接赋值的方式更加简洁高效。
-
字符串常量池
字符串常量池是 Java 内存中的一个特殊区域,用于存储字符串常量。它的存在是为了提高性能和节省内存。当使用直接赋值方式创建字符串时,Java 会先在常量池中查找是否有相同内容的字符串,如果有,就直接返回该字符串的引用,避免了重复创建相同内容的字符串对象。例如:
String str1 = "Java";
String str2 = "Java";
System.out.println(str1 == str2);
-
在实际开发中的应用场景
- 文本处理:用于存储和处理各种文本信息,如用户输入、文件内容、日志信息等。例如,在一个用户注册系统中,存储用户输入的姓名、密码等信息都可以使用
String类型。 - 网络通信:在网络编程中,发送和接收的消息通常也是以字符串形式存在。例如,HTTP 协议中的请求头和响应体中的文本内容可以用
String来处理。 - 数据库操作:在与数据库交互时,SQL 语句通常是字符串形式。例如,
String sql = "SELECT * FROM users WHERE age > 18";,用于查询年龄大于 18 岁的用户信息。
- 文本处理:用于存储和处理各种文本信息,如用户输入、文件内容、日志信息等。例如,在一个用户注册系统中,存储用户输入的姓名、密码等信息都可以使用
三、java的jre、jvm和特性
1.jre是Java 运行环境(Java Runtime Environment,JRE),是运行 Java 程序的最小环境。它主要由 Java 虚拟机(JVM)、Java 核心类库(Java Class Library)和支持文件组成。JRE 就像是一个 Java 程序的 “运行工具包”,提供了运行 Java 程序所必需的一切组件。
2.jvm是Java 程序和底层操作系统及硬件之间的一个中间层抽象。它就像是一个虚拟的计算机,为 Java 程序提供了一个统一的运行环境。先把java程序编译成字节码,而字节码是一种无关平台的表现形式,字节码的文件扩展名.class(例如,一个简单的HelloWorld程序经过编译后会生成HelloWorld.class文件。),jvm能够理解并运行这些字节码,再通过字节码解释器把字节码解释为机器码来运行,并且不会因为系统和和硬件的不同来重新编译。
3.特性:java可以实现跨平台,即java程序可以在windows、Linux、Mac上都可以正常运行。因为java有java虚拟机(jvm)这个重要因素的存在,所以可以跨平台运行。
总结:
1.数据类型
(1)八个基本数据类型:byte、short、int、long、float、double、char、boolean
(2)和引用数据类型:类、数组、枚举、注解、接口。
2.String是引用数据类型,也是一个类,即字符串。
3.jre是java的运行环境提供了java运行所需的一切组件;jvm是java虚拟机,能够让java实现跨平台运行。
#java之旅#