初始java ( 1 ) 6000字详解

一:java是什么

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

Java的特点包括:

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

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

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

  4. 安全性:Java在设计时考虑了安全性,它提供了许多安全性特性,如沙箱环境和字节码验证等。

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

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

二:初始java的main方法

以下是打印Hello,World!的一个简单java代码

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

让我来解释一下这段代码的结构和原理:

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

因此,当你运行这段代码时,它会在控制台输出 “Hello, World!”。

这种写法是 Java 语言约定俗成的规范,主要是为了让程序员更好地理解和组织代码。

注意:

在一个源文件中只能有一个public修饰的类,而且源文件名字必须与public修饰类的名字相同

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

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

2.1运行java程序

  • javac 文件名.java

是编译命令的基本格式

  • java 类名

是运行命令的基本格式

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

  • javac HelloWorld.java

运行命令:

  • java HelloWorld

初始java ( 1 ) 6000字详解_第1张图片
初始java ( 1 ) 6000字详解_第2张图片
当你执行javac HelloWorld.java命令时,它会使用Java编译器(javac)将HelloWorld.java源文件编译成Java字节码文件(.class文件)。编译后的字节码文件将会与源文件位于同一个目录中。

当你执行java HelloWorld命令时,它会使用Java虚拟机(JVM)来执行字节码文件。这个命令会加载并运行HelloWorld.class文件中的主方法(public static void main(String[] args))。

注意:在运行Java程序前,必须先安装好JDK(Java Development Kit即Java开发工具包),JDK里面就包含了javac和
java工具,Java程序最终是在JVM(Java虚拟机)中运行的。

下面再说说JDK、JRE、JVM之间的关系

  • JDK(Java Development Kit):Java开发工具包,提供给Java程序员使用,包含了JRE,同时还包含了编译器javac与自带的调试工具Jconsole、jstack等。

  • JRE(Java RuntimeEnvironment):Java运行时环境,包含了JVM,Java基础类库。是使用Java语言编写程序运行的所需环境。

  • JVM:Java虚拟机,运行Java代码

以下是图示关系:

初始java ( 1 ) 6000字详解_第3张图片

三:基本数据数据类型

初始java ( 1 ) 6000字详解_第4张图片

  • 在java中,为了保证程序的可移植性,所以不论是在何种系统下,int都占用4个字节,long都占8个字节,char类型都占2字节………以此类推
  • 在給在给变量设置初始值时,值不能超过该类型的表示范围,否则会导致溢出,会报错

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

  • 在c语言中,字符采用ASCII值的方式进行存储,而在java中采用unicode字符,ASCII字符是Unicode编码中的一部分,ASCII编码的值与对应的Unicode编码是相同的。Unicode则包含了更广泛的字符集,并提供了不同的编码方案来表示这些字符。
  • 因为需要表示更多字符,所以在java中一个char类型占用了2个字节,这使得java中的char可表示的字符种类更多,包括中文

3.2为什么会有boolean类型

  • Java语言中引入了boolean类型是为了提供更直观、更易理解的布尔值表示方式。使用true和false作为布尔值可以更清晰地表达代码的意图,增加代码的可读性和可维护性。
  • 相比于C语言中使用0和非0来表示真假,使用true和false可以更加直观地表达布尔逻辑。在Java中,boolean类型只能取值true或false,这种限制可以避免常见的编程错误,例如将一个非零值误认为真值。
  • 另外,Java的设计目标之一就是提供一种更安全、更易于使用的编程环境,因此采用了更严格的类型检查。引入boolean类型是符合这一目标的一部分,可以在编译时检查布尔值的正确使用,避免一些潜在的逻辑错误

总而言之,Java中引入boolean类型是为了提高代码的可读性、可维护性和安全性。使用true和false可以更直观地表达布尔逻辑,并且在编译时进行类型检查,减少潜在的编程错误。

3.3为什么会有字节类型

在Java中,字节类型(byte)是一种基本的数据类型,用于表示整数值。Java中引入字节类型的主要目的是为了提供一种更紧凑的数据类型,用于表示只需要很小范围的整数值。

字节类型在很多情况下是非常有用的。例如,在处理二进制数据,特别是文件或网络中的字节流时,字节类型非常常见。此外,字节类型也可以用于处理数字的二进制表示,例如位操作、哈希算法等。

此外,对于使用字节类型的情况,Java提供了许多内置的方法和工具类来方便地进行字节操作,例如InputStream和OutputStream等。

四:运算符

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

在java中,进行除法和取模的时候,右操作数不能为0

在Java中,% 不仅可以对整型取模,也可以对double类型取模,但是没有意义,一般都是对整型取模的

在java中,

  • 对于 && , 如果左侧表达式值为 false, 则表达式结果一定是 false, 无需计算右侧表达式.
  • 对于 ||, 如果左侧表达式值为 true,则表达式结果一定是 true,无需计算右侧表达式。
  • & 和 | 如果表达式结果为 boolean 时, 也表示逻辑运算. 但与 && || 相比, 它们不支持短路求值.

下面通过一个简单的代码示例:

System.out.println(10 > 20 && 10 / 0 == 0);       // 打印 false
System.out.println(10 < 20 || 10 / 0 == 0);       // 打印 true

我们都知道, 计算 10 / 0 会导致程序抛出异常. 但是上面的代码却能正常运行, 说明 10 / 0 并没有真正被求值

System.out.println(10 > 20 & 10 / 0 == 0);       // 程序抛出异常
System.out.println(10 < 20 | 10 / 0 == 0);       // 程序抛出异常

而这两行代码则抛出了异常,说明 10 / 0 被求值了,因此报错了

在java中只有无符号右移,没有有符号右移

五:方法

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

5.1 方法重载

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

算账:

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

在java中方法也可以一词多义,方法的一次多义就叫做方法的重载

在Java中,方法重载(Method Overloading)是指在同一个类中可以定义多个具有相同名称但参数列表不同的方法。这样的方法可以根据调用时传递的参数来决定具体执行哪个方法。

方法重载的特点有:

  1. 方法名称相同:重载方法必须具有相同的方法名称。

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

  3. 返回类型可以相同也可以不同:返回类型与方法重载没有直接关系,只要参数列表不同即可进行重载。

  4. 方法重载与访问修饰符无关:方法重载可以包括不同的访问修饰符(如public、private、protected或默认修饰符)。

注意事项:

  1. 方法重载不能仅仅通过返回类型的不同来实现,因为Java方法的重载是根据方法的参数列表来区分的。

  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中,我们是通过方法签名来唯一标识一个方法的

在Java中,方法签名是指用于唯一标识一个方法的组合,包括方法的名称、参数类型和参数顺序。它用于区分不同的方法,确保方法的唯一性。

方法签名包括以下部分:

  1. 方法名:方法的名称是方法签名的一部分,用于标识方法的唯一性。

  2. 参数列表:包括方法的参数类型和参数名称。参数类型指定了方法接受的参数的数据类型,参数名称则是用于在方法体内部引用参数的标识符。参数列表的顺序也是方法签名的一部分,不同顺序的参数列表会对应不同的方法。

方法签名的示例:

public void calculateSum(int num1, int num2) {
   // 方法体
}

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

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

需要注意的是,方法签名与方法的返回类型无关,只与方法名和参数列表有关。如果两个方法的方法名和参数列表一样,但是返回类型不同,那么他们的方法签名一样,会产生编译错误。

六:数组的定义与使用

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

6.1数组的创建

数组创建的基本格式:

  • T[] 数组名 = new T[N];

其中T代表的是类型,以下是数组创建的几个简单例子:

  • int[] array1 = new int[10]; // 创建一个可以容纳10个int类型元素的数组
  • double[] array2 = new double[5]; // 创建一个可以容纳5个double类型元素的数组
  • String[] array3 = new double[3]; // 创建一个可以容纳3个字符串元素的数组

下面我来解释一下 int [ ] array = new int[10] 这段代码:

new用于创建一个空间,new int[10]就是创建一个有10个int类型元素的数组空间,并且返回的是一个指向这个创建的整型数组的引用。这个引用被赋值给一个数组变量array,以便后续对数组进行操作和访问。引用也有类型,主要是用于指示引用所指向的对象的类型。int [ ]便是array的类型

以下是简单的示例图:
初始java ( 1 ) 6000字详解_第5张图片

6.2对数组形式的思考

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

6.3数组的初始化

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

  1. 动态初始化:在创建数组时,直接指定数组中元素的个数

基本格式:

T[] 数组名 = new T[N];

  1. 静态初始化:在创建数组时不直接指定数据元素个数,而直接将具体的数据内容进行指定

基本格式:

T[] 数组名 = new T[N]; {data1, data2, data3, …, datan};

下面是代码例子:
动态初始化:

  • int[] array = new int[10];

静态初始化

  • 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. 静态初始化虽然没有指定数组的长度,编译器在编译时会根据{}中元素个数来确定数组的长度。
  2. 静态初始化时, {}中数据类型必须与[]前数据类型一致。
  3. 静态初始化可以简写,省去后面的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是一个特殊的值,表示一个引用类型变量不引用任何对象。
视图如下,
初始java ( 1 ) 6000字详解_第6张图片

6.5 二维数组

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

  • 数据类型[][] 数组名称 = new 数据类型 [行数][列数] { 初始化数据 };

你可能感兴趣的:(java,java,开发语言)