初识 java - 1( 5000字详解 )

本文介绍了Java编程语言的基础知识,包括其设计理念、主要特点(如简单易学、面向对象、跨平台、安全性、高性能),以及如何编写和运行Java程序,涵盖了main方法、数据类型、运算符、方法重载、数组和null概念,以及二维数组的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:java是什么

Java 是一种高级、面向对象的编程语言和计算平台。它是由 Sun Microsystems( 现在是 Oracle Corporation )开发的,并在 1995 年首次发布。Java 的设计目标是简单、可移植、面向对象、安全和高性能,Java 的特点包括:

  1. 简单易学:Java 的语法相对于其他编程语言来说相对简单,并且有大量的文档和教程可供学习。

  2. 面向对象:Java 是一种纯粹的面向对象编程语言,它支持封装、继承和多态等面向对象的概念。

  3. 跨平台性:Java 是一种可移植的语言,它可以在不同的操作系统和硬件平台上运行,只需要安装对应的 Java 虚拟机(JVM)。

  4. 安全性:Java 在设计时考虑了安全性,它提供了许多安全性特性。

  5. 高性能:虽然 Java 是一种解释性语言,但它通过即时编译和其他优化技术实现了很高的执行效率。

Java 广泛应用于各种软件开发领域,包括桌面应用程序、移动应用程序、Web 应用程序、嵌入式系统、大数据处理和云计算等。它也是 Android 平台的主要编程语言,用于开发移动应用程序。

二:初始 java 的 main 方法

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

这是一个打印 Hello,World!的一个简单 java 代码,下面我详细解释一下这段代码的意思:

  • public class HelloWorld:这是定义一个名为 “HelloWorld” 的公共类。因为在 java 中,一个方法不能独立存在,方法必须存在于类中,且 main 方法应该在公有类之中
  • public static void main(String[] args):这是 Java 程序的主方法。它是程序的入口点,代码从这里开始执行。
  • (String[] args):主方法的参数,它是一个字符串数组,可以接收命令行参数。
  • System.out.println(“Hello, World!”):这是打印输出 “Hello, World!” 的代码。

注意:在一个源文件中只能有一个 public 修饰的类,而且源文件名字必须与 public 修饰类的名字相同,文件名字与内部类无关,内部类是隶属于外部类的,它不会影响源文件的命名规则。

这样做是为了保证代码的可读性和可维护性。当其他人阅读代码时,可以很容易地找到与文件名相匹配的 public 类,更快找到 public 类中的 main 方法,有助于代码的组织和理解。此外,Java 编译器在编译源文件时会生成与公共类相同名称的字节码文件,以方便类的加载和识别。

2.1 运行 java 程序

我们现在已经基本了解了 java 中的 main 方法,那么我们该怎么运行这个 java 程序呢

  • 编译命令:javac 文件名
  • 运行命令: java 类名

我们可以使用 cmd 命令行,通过 2 个命令将程序运行上述的程序,举个例子:

// 文件名:HelloWorld.java
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}
  1. 编译命令:javac HelloWorld.java
  2. 运行命令:java HelloWorld

在这里插入图片描述
在这里插入图片描述

当你执行 javac HelloWorld.java 命令时,它会使用 Java 编译器将 HelloWorld.java 源文件编译成 Java 字节码文件,编译后的字节码文件将会与源文件位于同一个目录中,紧接着执行 java HelloWorld 命令时,它会使用 Java 虚拟机来执行字节码文件,这个命令会加载并运行 HelloWorld.class 文件中的主方法。


注意:在运行 Java 程序前,必须先安装好 JDK,JDK 里面就包含了 javac 和 java 工具,Java 程序最终是在 JVM 中运行的, JDK、JRE、JVM 之间的关系如下:

  • JDK :Java 开发工具包,JDK = JRE + 开发工具
  • JRE :Java 运行时环境,JRE = JVM + 核心类库
  • JVM:Java 虚拟机,运行 Java 代码

在这里插入图片描述

三:基本数据数据类型

数据类型关键字内存占用
字节型byte1 字节
短整型short2 字节
整型int4 字节
长整型long8 字节
单精度浮点数float4 字节
双精度浮点数double8 字节
字符型char2 字节
布尔型boolean没有明确规定

在 java 中,为了保证程序的可移植性,所以不论是在何种系统下,每个类型的大小都是固定的,不会随着环境的改变而改变。

3.1 为什么 char 类型占两个字节

由于 ASCII 只能表示 128 或 256 个字符,它主要适用于表示英语及少数特殊字符,对于其他语言无法表示,因此随着全球化的发展, Unicode 字符应运而生。

Unicode 的字符集非常庞大,包含了世界上几乎所有语言的字符,以及数学符号、表情符号等。它的编码范围非常广泛,从最常用的字符到不常见的符号都可以表示,Unicode 的 UTF-8 兼容 ASCII,且是目前最常用的 Unicode 编码方式,所以 ASCII 是Unicode 的一个子集,因为需要表示更多字符,所以在 java 中一个 char 类型占用了 2 个字节。

3.2 为什么会有 boolean 类型

Java 引入 boolean 类型而不是使用 0 和非 0 来表示真假,主要有以下原因:

  • 类型安全:避免了使用整数作为布尔值可能带来的错误,确保只有 true 和 false 作为合法的布尔值。
  • 代码可读性:使用 true 和 false 明确表示真假,提高代码的直观性和可读性。
  • 避免隐式转换和歧义:防止任意非 0 值被认为是真,避免了潜在的逻辑错误。
  • 面向对象设计:符合 Java 的面向对象设计理念,专门为真假值引入了布尔类型,提升代码的严谨性。
  • 历史演进:Java 作为 C 语言的继承者,避免了 C 语言中的灵活但不安全的设计,并引入了布尔类型。

3.3 为什么会有字节类型

Java 中引入字节类型的主要目的是为了提供一种更紧凑的数据类型,用于表示只需要很小范围的整数值,字节类型在很多情况下是非常有用的。

四:运算符

java 的运算符大部分与 c 语言中的运算符相同,下面我主要说以下 java 中的运算符和 c 语言运算符中的不同:

  1. 在 java 中,进行除法和取模的时候,右操作数不能为 0
  2. 在 Java 中,% 不仅可以对整型取模,也可以对 double 类型取模,但是没有意义,一般都是对整型取模的
  3. 对于 && , 如果左侧表达式值为 false, 则表达式结果一定是 false, 无需计算右侧表达式
  4. 对于 ||, 如果左侧表达式值为 true,则表达式结果一定是 true,无需计算右侧表达式。
  5. & 和 | 如果表达式结果为 boolean 时, 也表示逻辑运算. 但与 && || 相比, 它们不支持短路求值.
  6. 在 java 中只有无符号右移,没有有符号右移

五:方法

java 中的方法其实和 c 语言中的函数没什么不同,都是完成特定的某个功能,只是在 C 语言中,函数可以单独存在,而在 Java 中,方法必须定义在类中。并且在 java 中不存在方法声明这一说

5.1 方法重载

在生活中,有许多词语存在一次多义的情况,一个词语在不同语境下可能有不同的意义,就比如说算账:

  1. 在记账的基础上计算反映企业的经营活动和成果或行政事业单位预算资金的收支或结余。
  2. 吃亏或失败后和人争执较量﹐有报复的意思。

在 java 中方法也可以一词多义,方法的一词多义就叫做方法的重载,方法重载是指在同一个类中可以定义多个具有相同名称但参数列表不同的方法,方法重载的特点有:

  1. 方法名称相同:重载方法必须具有相同的方法名称。
  2. 参数列表不同:重载方法的参数列表必须不同,可以是参数个数不同、参数类型不同或参数顺序不同。

简言之就是方法名必须相同,方法的参数不同即可,与返回值类型和访问修饰符无关。

public class MyClass {
    public void printNumber(int num) {
        System.out.println("整数:" + num);
    }
    
    public void printNumber(double num) {
        System.out.println("浮点数:" + num);
    }
    
    public void printNumber(String str) {
        System.out.println("字符串:" + str);
    }
    
    public static void main(String[] args) {
        MyClass obj = new MyClass();
        obj.printNumber(10);
        obj.printNumber(3.14);
        obj.printNumber("Hello");
    }
}
整数:10
浮点数:3.14
字符串:Hello

在上面的例子中,printNumber 方法被重载了三次,分别接受不同类型的参数( int、double 和 String ),根据参数的不同,会调用对应的重载方法来输出不同的结果。

5.2 方法签名

那么为什么方法能够重载呢?因为在 c 语言中,我们是通过函数名来唯一表示函数的,而在 java 中,我们是通过方法签名来唯一标识一个方法的,方法签名包括方法的名称、参数类型和参数顺序。

  1. 方法名
  2. 参数列表:包括方法的参数类型和参数名称,参数列表的顺序也是方法签名的一部分,不同顺序的参数列表会对应不同的方法。
public void calculateSum(int num1, int num2) { //方法签名: calculateSum(int, int)
   // 方法体
}

public void calculateSum(int[] numbers) { //方法签名:calculateSum(int[])
   // 方法体
}

在上面的示例中,两个方法都有相同的名字 calculateSum,但是它们的参数列表不同。因此,它们的方法签名是不同的,可以通过参数类型和顺序来进行区分。

六:数组的定义与使用

数组,即相同类型元素组成的一个集合

6.1 数组的创建

int[] array1 = new int[10];    // 创建一个可以容纳10个int类型元素的数组
double[] array2 = new double[5];  // 创建一个可以容纳5个double类型元素的数组

下面解释一下第一行代码:new 用于创建一个空间,new int[ 10 ] 就是创建一个有 10 个 int 类型元素的数组空间,并且 new 返回一个指向这个创建的整型数组的引用,这个引用被赋值给一个数组变量 array1,以便后续对数组进行操作和访问
在这里插入图片描述

6.2 对数组形式的思考

在 c 语言中对于数组的定义是:int arr[ ] = {0},这个数组的类型是 int [ ],因为 arr 挡在中间容易让人误解,所以 java 对数组的定义进行了优化,改成了 int [ ] arr = {0},这样就更直观明了 arr 是一个数组

6.3 数组的初始化

数组的初始化分为静态初始化和动态初始化两种

  1. 动态初始化:在创建数组时,直接指定数组中元素的个数
int[] array = new int[10];
  1. 静态初始化:在创建数组时不直接指定数据元素个数,而直接将具体的数据内容进行指定
int[] array1 = new int[]{0,1,2,3,4,5,6,7,8,9};//编译器在编译时会根据 { } 中元素个数来确定数组的长度。
double[] array2 = new double[]{1.0, 2.0, 3.0, 4.0, 5.0};
String[] array3 = new String[]{"hello", "Java", "!!!"};
  1. 静态初始化可以简写,省去后面的 new T[ ] 。即:
int[] array1 = {0,1,2,3,4,5,6,7,8,9};
double[] array2 = {1.0, 2.0, 3.0, 4.0, 5.0};
String[] array3 = {"hello", "Java", "!!!"};

6.4 null

在 Java 中,null 是一个特殊的值,表示一个引用类型变量不引用任何对象。

在这里插入图片描述

6.5 二维数组

二维数组的用法和一维数组并没有明显差别,只需要注意一下数组的创建格式即可:

 // 创建一个 3x3 的二维数组
int[][] twoDArray = new int[3][3];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ice___Cpu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值