|
Java就是基于面向对象编程系统 (Object-Oriented Programming Systems ,OOPS) 概念的面向对象编程语言(Object-Oriented Programming Language)。
Java 中的一切都与对象有关。如果你掌握了对象的本质,Java 就像吃你最喜欢的食物一样简单和讨人喜欢。
问题来了,既然就像食物,那就有很多的编程语言好的,但是为什么要学习 Java呢?
1.为什么是Java?
简单来讲,因为Java 就像您最喜欢的各种美味(易于编码)和健康(安全且健壮)的食物!
除了 Java 是 2021 年的顶级热门编程语言之一,并且可能至少还会保持十年这样的事实之外,Java 几乎在您能想到的每个领域都取得了成功!
由于 Java 是安全的和多线程的,因此非常适合银行和交易管理服务。电子商务商店和计费软件的逻辑是在基于 Core Java 的框架中编写的。比如 Android 这样的移动操作系统也是使用 Java API的;股票市场算法基于 Java;最近以来的所有大数据——海量数据都用 Java 处理得轻而易举。实际上,Hadoop 的 MapReduce 框架是用 Java 编写的。 Java 与 Spring 等其他框架形成了强大的组合,可以对金融和 IT 领域的实现依赖项进行有序化处理,并编写相应的服务器端应用程序。
2.何为Java编程?
Java 是由 Sun Microsystems 开发的“一次编写、随处运行”的编程语言。它类似于 C 和 C++,但要容易得多。您可以将 Java 与许多技术(如 Spring、node js、Android、Hadoop、J2EE 等)结合起来,构建健壮、可扩展、可移植和分布式的成熟应用程序。 Java 还使用 Selenium 等工具促进持续集成和测试。
3.Java简史
Java 最初是由 James Gosling 和他在 Sun Microsystems 的同事在 1990 年代初期开发的。最初,它被称为“Oak”项目,其实现类似于 C 和 C++。 Java 这个名字是经过充分的头脑风暴后选定的,它是来自咖啡豆的名称。 Java 1.0,第一个版本于 1995 年发布,标语是“一次编写,随处运行”(write once, run anywhere)。后来,Sun Microsystems 被甲骨文收购。从那以后,再也没有回头。 Java 的最新版本是 2021 年 9 月发布的 Java 17(一个长期支持版)。
4.Java的特点
Java 提供了许多吸引人的特性—
- Ø 平台无关语言。
- Ø 丰富的标准库使其易于编码。您可以使用 Java 创建一个完整的独立应用程序。
- Ø Java 支持自动内存分配和释放(称为垃圾收集)。
- Ø 它提供了出色的性能,因为 Java 支持多线程和并发性,从而使其成为一种高度交互和响应性的语言。
- Ø 安全简单。
- Ø ……
要了解有关 Java 功能特性的更多信息,请查阅官网的文章。
5.何为Java平台?
您一定听说过很多关于 Java 作为编程语言的信息。但是,你知道它也是一个“平台”吗? Java 平台是一个纯软件平台,与 Windows、Mac、Linux 或 Solaris 等传统平台截然不同。前者运行在后者平台的硬件之上。 Java 程序通过 Java 虚拟机,将字节码转换为本地代码,从而使程序可以在任何设备上运行!这意味着您不需要单独的特定于机器的编译器来运行 Java 代码。这就是 Java 也被称为平台的原因。 Java 编程语言不同于 Java 平台。 Java 编程语言可帮助您构建应用程序。您用 Java 编程语言编写的内容是在现有的程序和工具集合(统称为 Java 平台)的帮助下开发和运行的。 Java平台由JDK、JVM和JRE组成。
Java 编程语言有四种 Java 平台——
- Ø Java SE(Java 平台,标准版)
- Ø Java EE(Java 平台,企业版,现在为Jakarta EE)
- Ø Java FX(可以认为是更高级的Swing,但可开发移动应用)
- Ø Java ME(Java平台,微型版,终端电子设备)
虽然可以在 Java SE 平台上构建独立应用程序,但大多数万维网(互联网)都依赖于 Java EE。 Java ME 适用于小型设备(如手机)上的应用程序。
Java 有三个主要架构性组件 - JVM、JDK 和 JRE。
JDK( Java Development Kit) 即Java 开发工具包,是开发人员编写代码并通过 JRE(Java Runtime Environment,即 Java 运行时环境)来运行它的地方。
代码是如何转译或翻译的?那是通过 Java 虚拟机 (JVM)来完成的。使用 JVM,任何用 Java(或任何其他语言——支持字节码的)编写的代码都可以转换为 Java 字节码。任何机器都可以基于操作系统实现此代码。 JVM 与 Java 包(库)一起驻留在 JRE 中以为Java程序服务。
简而言之:
- ü JDK:包含JRE + 开发工具,如解释器(类加载器)、编译器(javac)、jar 文件(打包和存档)以及 javadocs等。
- ü JVM:执行 java 字节码的抽象机器。由描述 JVM 实现、实际实现程序和 JVM(运行时)实例的规范文档组成,可在其中运行主程序。
- ü JRE:JVM 的物理实现(运行时实例)。它包含 JVM 用于运行程序的库包和支持文件。
如果有电脑,可以在阅读本文时尝试一些事情以为练习:在本地系统上安装 JDK(Java 开发工具包)和 JRE(Java 运行时环境)。要下载最新版本,请到Java官网。
然后,您可在系统上安装一个 IDE 以处理我们将学习的概念。 Eclipse 是我使用的一个很好的 IDE,它很容易设置并且不会让你感到麻烦。您可以下载 Eclipse 或 Easy Eclipse。 Easy Eclipse 是 Eclipse 的轻量级版本,功能较少,适合初学者。还有其他更多 IDE,如netbeans,JDeveloper、 IntelliJ IDEA、BlueJ等——从Java 9开始,可以在JShell中开始初步的java编程学习了,为初学者提供了便捷的学习支持。
如果您现在不想做任何这些,而只想阅读 一下关于Java,那很好!只需继续阅读,掌握概念,然后随时开始编码!
哦,这里有个很好的 初学者的Java 课程,您在学习了基础知识后会喜欢上它!@牛旦IT课堂 专栏内有,如《Java从入门到实战(极速版)》
6.术语和编程认知
在我们开始编码之前,让我们熟悉一些术语——
每个 Java 程序都是由类或接口定义的不同类型对象的集合构成。这是基本结构——
class School {
//由好几个其它对象和实例变量组成
public String schoolName;
public int ID;
Teacher[] teachers;
Student[] students;
…..
// 以及其它一些方法
public int getSchoolName(){
}
}逻辑都在方法内部,可以像类的 getter 和 setter 方法一样简单,也可以像基于多个条件从数据库中获取某些内容一样复杂!
我们来写一个简单的程序,当我们学习更多 Java 概念时,我们会添加扩展它。
请注意,就像任何其他编程语言一样,Java 中的每个独立程序都应该由一个 main 方法来执行。
创建一个 Test 类,并向其添加一些简单的代码,示例如下:
class Test{
public static void main(String args[]){
int rollNumber = 36;
String name = “Solo”;
System.out.println(“My name is ” + name + “ and my roll number is ” + rollNumber);
}
}这段代码的每一行都会陆续学习,简要介绍如下:
- l class – 此关键字用于创建 java 类。当你运行程序时,你会用命令 javac Test.java 来编译代码,然后 java Test.java 来执行程序。如果您使用的是 IDE,则只需右键单击该类并选择“运行”。
- l public – public 是指示可见性的访问修饰符。 main 方法不能将访问修饰符设为私有(访问修饰符)。私有方法只能在类内调用,而公共方法对所有人可见。
- l static – 变量和方法可以使用 static 关键字修饰。为什么 main 方法是静态的?对于静态方法,我们不必创建对象就可使用。因此,我们不必创建 Test 对象来调用 main 方法。
- l void – 如果方法不返回任何值,则其类型设置为 void。
- l int, String – 这是 Java 使用的众多数据类型中的两种。因为它也使用原始类型,所以 Java 不被视为完全面向对象的语言。
- l System.out.println – out 是 System 类的静态字段。该字段存储 PrintStream 类的实例。 println() 是此类的方法,它将所需的输出打印到控制台。
让我们稍微修改一下这个程序,以获取用户输入的名称和卷号。有很多方法可以做到这一点。对于这段代码,让我们使用最常用的方法——Scanner 类。要使用这个类,我们需要先将类进行导入: import java.util.Scanner;
在之前的代码中,在 System.out.println (…) 之前,让我们添加以下几行代码——
Scanner scanInput = new Scanner(System.in);
System.out.println("Enter name: ");
name = scanInput.nextLine();
System.out.println("Enter roll number: ");
rollNumber = scanInput.nextInt();运行此程序时,系统会提示您"Enter name:",然后"Enter roll number:"。
另一种方法是通过 BufferedReader,这是传统的方法,但它有太多难以记住的包装。
我们来了解更多学生的信息——他们的姓名、登记号和科目。科目将在数组中,对于该程序,假设一名学生将修读 3 个科目。
将数组定义为 :
String[] subjects = new String[3];
//获取学生的所有科目信息
for(int j=0; j<subjects.length;j++){
subjects[j] = scanInput.next();
}这里我们使用 for 循环从用户那里获取科目并将其存储在 String 数组中。最新的java版本中for循环的语法已经改变,但这种语法更容易使用。 ‘j’是一个从0开始的临时计数器。注意j的变化。
subject.length 获取数组的长度,在本例中为 3。
要查看数组的内容,可通过 Arrays.toString(subjects)来查看,或输出到控制台。
如我们所见,我们有三个变量 name、rollNumber 和 subject,它们都属于一个公共实体 Student。那么,为什么不创建一个类并将所有 3 个变量作为该类的成员呢?当我们将它们用作对象时,添加、修改和删除数据会更容易!所以,我们来创建一个类 Student.java,如下所示:
public class Student {
int rollNumber = 0;
String name = &#34;&#34;;
String[] subjects = new String[3];
}我们将不得不更改代码以创建此类的对象,并通过 getter 和 setter 方法访问变量。 getter 和 setter 方法的一个例子如下:
public int getRollNumber() {
return rollNumber;
}
public void setRollNumber(int rollNumber) {
this.rollNumber = rollNumber;
}在使用IDE时 ,IDE可以为您创建所有这些内容提供快捷方式,但对于初学练习来讲,最好还是自己完成。
现在,让我们回到我们的主程序。
我们已经拥有一个学生的所有数据,为什么不获取更多学生的详细信息!我们可以创建一个 Student 对象数组,并将每个学生的详细信息存储在该数组中的一个对象中。
让我们从用户那里得到学生的数量:
int numberOfStudents = scanInput.nextInt();现在,让我们开始另一个 for 循环,它将从所有学生那里获取详细信息——
for(int i=0;i<numberOfStudents;i++){
//获取详细信息
}我们现在要做的就是将数据设置为学生对象。为此,创建一个大小与 numberOfStudents 相同的 Student 对象数组。代码如下:
Student[] student = new Student[numberOfStudents];
for(int i=0;i<numberOfStudents;i++){
student = new Student();
name = scanInput.next();
student.setName(name);
rollNumber = scanInput.nextInt();
student.setRollNumber(rollNumber);
// 跟前面写的一样
for(int j=0; j<subjects.length;j++){
subjects[j] = scanInput.next();
}
student.setSubjects(subjects);
}
- l 当我们创建 Student[] 数组时,单个 Student 对象仍然为空。这就是为什么在 for 循环中,我们要创建新的 Student 对象。不这样做,试图使用 student..就会抛出 NullPointerException,。 我们将在本文后面讨论异常。
- l 我们对 String 使用 next() 而不是 nextLine()。 nextLine() 将跳过当前行并转到下一行。最好使用 next()。
- l 假设用户将 numberOfStudents 设为 2。外部 for 循环将执行两次。主题数组的大小为 3,因此内部 for 循环将为每个外部循环执行 3 次,因此总共执行 6 次。
- l 请注意 Java 中的命名约定。变量名和方法名以小写开头,但我们将每个单词的第一个字母大写,而类名则以大写字母开头。
现在,我们拥有 Student 数组中的所有数据。我们可以使用 Java 构造函数来改进代码,这是一种比 setter 方法更有效的在对象中存储事物的方法。当你有很多数据时,你可以一次设置构造函数中的所有值,而不是使用 10 次 set 方法。让我们在 Student 类中创建一个构造函数。如下所示:
public Student(String name, int rollNumber, String[] subjects){
this.name = name;
this.rollNumber = rollNumber;
this.subjects = subjects;
}现在,让我们修改我们的 Test 类以使用这个构造函数。请注意,现在该行:
student = new Student();此行不会起作用,因为我们没有在我们的类中创建一个无参数的构造函数。当没有定义其他构造函数时,java编译器默认创建no-arg构造函数,否则,我们应该使用我们在代码中创建的构造函数。
我们的代码现在将变成——
System.out.println(&#34;Enter name and roll number: &#34;);
student = new Student(scanInput.next(), scanInput.nextInt(), subjects);这为我们减少了大约 3-4 行代码。想象一下,当有更多的对象和成员变量时,它会有多有用。请注意,subjects 数组是空的,因为我们正在获取科目的 name 和 rollNumber 之后才轮到subjects的值。
下一个问题是我们在哪里存储这些学生对象,以便我们以后可以检索它们并进行一些修改或显示列表的内容?简单的答案是 ArrayList。创建一个 ArrayList 并向其添加对象非常简单。
ArrayList 的一些重要特性须知:
- l ArrayList 是动态的。我们可以随时扩展ArrayList,大小不固定,不像数组。
- l ArrayList 是 Java 集合框架的重要组成部分。
- l 我们可以随机访问列表中的任何对象。
- l 我们只能在 ArrayList 中存储对象。如果我们必须创建一个整数的 ArrayList,我们需要将原始 int 类型包装到 Integer 对象中。
回到我们的代码,来创建ArrayList为 :
ArrayList studentList = new ArrayList();要将对象添加到列表中,在获取所有详细信息后,只需将完整对象添加到列表中。这样添加:
studentList.add(student);与其混淆数组循环并将每个对象寻址为 student[0]、student[1] 等……让我们使用 Iterator 来获取和显示数据。
可将迭代器视为一个游标,它遍历集合的元素。您可以使用迭代器从集合中获取或删除任何元素。类似如下:
Iterator itr = studentList.iterator();
System.out.println(&#34;所有学生的输入信息为---&#34;);
while(itr.hasNext()){
System.out.println(itr.next().toString());
}
- l 我们不创建 Iterator() 的新对象,而是使用列表的迭代器方法指向 itr。
- l while 循环使用 hasNext() 方法检查列表中是否还有更多对象。当 hasNext() 返回 false 时,while 循环将结束。
- l itr.next() 获取列表中的下一项。
您希望输出的应该是整洁的输入信息。不对头啊?Java 给的类似下面的东西——
Student@e7b241
因为要单独打印对象的成员,我们还需要覆盖 Student 类中的 toString() 方法。
public String toString(){
String studentDetails = null;
studentDetails = &#34;Student name: &#34; + this.name
+ &#34;, Student roll number: &#34;
+ this.rollNumber + &#34; , Chosen subjects: &#34;
+ Arrays.toString(this.subjects) + &#34;\n&#34;;
return studentDetails;
}
- l this 关键字是一个引用变量,指向当前类的实例变量。
- l 要从数组中获取值,我们使用实用程序类 Arrays 的 toString() 方法。请注意,Arrays包含静态方法,因此我们不需要创建对象来使用这些方法。我们直接使用类名和方法名。
看见没,现在会得到你想要的结果了!
但是,有一个问题……
我们没有处理用户输入错误的场景!例如,如果有人为 rollNumber 输入一个字符串会怎样?我们不会向用户抛出异常的整个堆栈跟踪。相反,我们可以向用户发送一条好消息。
尝试为 rollNumber 输入一个字符串,您将在线程“main”中得到异常
java.util.InputMismatchException。
try{
rollNumber = scanInput.nextInt();
}catch (InputMismatchException ime){
System.out.println(&#34;Please enter a valid number&#34;);
}为了确保不会发生这种情况,我们需要确保用户输入正确的值。但是,怎样实现?让我们放置一个 try/catch 块来捕获异常并在出现错误时向用户显示一条友好的消息。
我们也可以对 numberOfStudents 应用相同的方法。最好的做法是将整个代码放在 try 块中,这样任何异常都可以在 catch 块中捕获。
这在 Java 中称为异常处理。在实际应用程序中,类可以抛出异常,最后某个类将捕获并向用户显示适当的消息。 Java 中有更多的运行时异常,最常见的是 NullPointerException、ClassCastException、ArithmeticException、IllegalArgumentException、
ArrayIndexOutOfBoundsException 等……
7.快速回顾
在本文中,我接触了 Java 的基础知识,只是让您知道什么是编程语言,若之前使用过其他语言,就可以很快开始使用 Java 进行编码。通过本文,要了解以下基本概念——
- l 类和对象
- l 构造函数
- l 输入/输出流
- l for 和 while 循环
- l 基本和非基本数据类型
- l toString() 方法
- l 集合(ArrayList)和迭代器
- l 异常处理基础
原创2021-12-25 16:25·传新视界
链接;编程新手(一):Java认知及初学者指南-今日头条 (toutiao.com) |
|