余晖落尽暮晚霞,黄昏迟暮远山寻
本站
当前位置:网站首页 > 编程知识 > 正文

编程新手(一):Java认知及初学者指南(java教程 廖)

xiyangw 2022-11-25 11:21 41 浏览 0 评论

编者按:

本文主要为新手或小白而写的Java入门认知和学习指南。初步计划写三四篇,以便初学Java编程的同学能更好的认知Java、掌握Java编程中核心备忘清单以及进阶学习中应该了解的热门应用框架。有经验的Java人员可略过此篇。也欢迎各位新同学留言咨询。

关于2022年Java的预测和假设,请参考:Java 2022:值得一看的价值预测和假设

何为Java?

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 = "";
	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[i] = new Student();
	name = scanInput.next();
	student[i].setName(name);
	rollNumber = scanInput.nextInt();
	student[i].setRollNumber(rollNumber);
	// 跟前面写的一样
	for(int j=0; j<subjects.length;j++){
		subjects[j] = scanInput.next();
	}
	student[i].setSubjects(subjects);
}
  • l 当我们创建 Student[] 数组时,单个 Student 对象仍然为空。这就是为什么在 for 循环中,我们要创建新的 Student 对象。不这样做,试图使用 student[i]..就会抛出 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[i] = new Student();

此行不会起作用,因为我们没有在我们的类中创建一个无参数的构造函数。当没有定义其他构造函数时,java编译器默认创建no-arg构造函数,否则,我们应该使用我们在代码中创建的构造函数。

我们的代码现在将变成——

System.out.println("Enter name and roll number: ");
student[i] = 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[i]);

与其混淆数组循环并将每个对象寻址为 student[0]、student[1] 等……让我们使用 Iterator 来获取和显示数据。

可将迭代器视为一个游标,它遍历集合的元素。您可以使用迭代器从集合中获取或删除任何元素。类似如下:

Iterator itr = studentList.iterator();
System.out.println("所有学生的输入信息为---");
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 = "Student name: " + this.name 
    + ", Student roll number: " 
    + this.rollNumber + " , Chosen subjects: " 
    + Arrays.toString(this.subjects) + "\n";
	return studentDetails;
}
  • l this 关键字是一个引用变量,指向当前类的实例变量。
  • l 要从数组中获取值,我们使用实用程序类 Arrays 的 toString() 方法。请注意,Arrays包含静态方法,因此我们不需要创建对象来使用这些方法。我们直接使用类名和方法名。

看见没,现在会得到你想要的结果了!

但是,有一个问题……

我们没有处理用户输入错误的场景!例如,如果有人为 rollNumber 输入一个字符串会怎样?我们不会向用户抛出异常的整个堆栈跟踪。相反,我们可以向用户发送一条好消息。

尝试为 rollNumber 输入一个字符串,您将在线程“main”中得到异常 java.util.InputMismatchException。

try{
	rollNumber = scanInput.nextInt();
}catch (InputMismatchException ime){
	System.out.println("Please enter a valid number");
}

为了确保不会发生这种情况,我们需要确保用户输入正确的值。但是,怎样实现?让我们放置一个 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 异常处理基础

这里只是通过一个简单的程序来认知这些。还有许多高级概念不在本文的范围内,但请继续关注本头条号,这里将或已经推出更多关于线程、内部类、接口、垃圾收集等高级概念的文章。

赶快从@牛旦IT课堂的专栏开始学Java编程吧:

新手福音:极速入门Java编程

Java语法快速参考手册(2020版)

Java从入门到实战(极速版)


下一篇,将为Java编程学习的同学提供一份核心基础知识备忘清单,以供随时翻阅。本篇就到这里了,分享出去吧。再见!

相关推荐

辞旧迎新,新手使用Containerd时的几点须知

相信大家在2020年岁末都被Kubernetes即将抛弃Docker的消息刷屏了。事实上作为接替Docker运行时的Containerd在早在Kubernetes1.7时就能直接与Kubelet集成使...

分布式日志系统ELK+skywalking分布式链路完整搭建流程

开头在分布式系统中,日志跟踪是一件很令程序员头疼的问题,在遇到生产问题时,如果是多节点需要打开多节点服务器去跟踪问题,如果下游也是多节点且调用多个服务,那就更麻烦,再者,如果没有分布式链路,在生产日志...

Linux用户和用户组管理

1、用户账户概述-AAA介绍AAA指的是Authentication、Authorization、Accounting,即认证、授权和审计。?认证:验证用户是否可以获得权限,是3A的第一步,即验证身份...

linux查看最后N条日志

其实很简单,只需要用到tail这个命令tail-100catalina.out输入以上命令,就能列出catalina.out的最后100行。...

解决linux系统日志时间错误的问题

今天发现一台虚拟机下的系统日志:/var/log/messages,文件时间戳不对,跟正常时间差了12个小时。按网上说的执行了servicersyslogrestart重启syslog服务,还是不...

全程软件测试(六十二):软件测试工作如何运用Linux—读书笔记

从事过软件测试的小伙们就会明白会使用Linux是多么重要的一件事,工作时需要用到,面试时会被问到,简历中需要写到。对于软件测试人员来说,不需要你多么熟练使用Linux所有命令,也不需要你对Linux...

Linux运维之为Nginx添加错误日志(error_log)配置

Nginx错误日志信息介绍配置记录Nginx的错误信息是调试Nginx服务的重要手段,属于核心功能模块(nginx_core_module)的参数,该参数名字为error_log,可以放在不同的虚机主...

Linux使用swatchdog实时监控日志文件的变化

1.前言本教程主要讲解在Linux系统中如何使用swatchdog实时监控日志文件的变化。swatchdog(SimpleWATCHDOG)是一个简单的Perl脚本,用于监视类Unix系统(比如...

syslog服务详解

背景:需求来自于一个客户想将服务器的日志转发到自己的日志服务器上,所以希望我们能提供这个转发的功能,同时还要满足syslog协议。1什么是syslog服务1.1syslog标准协议如下图这里的fa...

linux日志文件的管理、备份及日志服务器的搭建

日志文件存放目录:/var/log[root@xinglog]#cd/var/log[root@xinglog]#lsmessages:系统日志secure:登录日志———————————...

运维之日志管理简介

日志简介在运维过程中,日志是必不可少的东西,通过日志可以快速发现问题所在。日志分类日志分类,对不同的日志进行不同维度的分析。操作系统日志操作系统是基础,应用都是在其之上;操作系统日志的分析,可以反馈出...

Apache Log4j 爆核弹级漏洞,Spring Boot 默认日志框架就能完美躲过

这两天沸沸扬扬的Log4j2漏洞门事件炒得热火朝天:突发!ApacheLog4j2报核弹级漏洞。。赶紧修复!!|Java技术栈|Java|SpringBoot|Spring...

Linux服务器存在大量log日志,如何快速定位错误?

来源:blog.csdn.net/nan1996jiang/articlep/details/109550303针对大量log日志快速定位错误地方tail/head简单命令使用:附加针对大量log日志...

Linux中查看日志文件的正确姿势,求你别tail走天下了!

作为一个后端开发工程师,在Linux中查看查看文件内容是基本操作了。尤其是通常要分析日志文件排查问题,那么我们应该如何正确打开日志文件呢?对于我这种小菜鸡来说,第一反应就是cat,tail,vi(或...

分享几款常用的付费日志系统,献给迷茫的你!

概述在前一篇文章中,我们分享了几款免费的日志服务器。他们各有各的特点,但是大家有不同的需求,有时免费的服务器不能满足大家的需要,下面推荐几款付费的日志服务器。1.Nagios日志服务器Nagio...

取消回复欢迎 发表评论: