编者按:
本文主要为新手或小白而写的java入门认知和学习指南。初步计划写三四篇,以便初学java编程的同学能更好的认知java、掌握java编程中核心备忘清单以及进阶学习中应该了解的热门应用框架。有经验的java人员可略过此篇。也欢迎各位新同学留言咨询。
关于2022年java的预测和假设,请参考:
何为java?
java就是基于面向对象编程系统 (object-oriented programming systems ,oops) 概念的面向对象编程语言(object-oriented programming language)。
java 中的一切都与对象有关。如果你掌握了对象的本质,java 就像吃你最喜欢的食物一样简单和讨人喜欢。
问题来了,既然就像食物,那就有很多的编程语言好的,但是为什么要学习 java呢?
简单来讲,因为java 就像您最喜欢的各种美味(易于编码)和健康(安全且健壮)的食物!
除了 java 是 2021 年的顶级热门编程语言之一,并且可能至少还会保持十年这样的事实之外,java 几乎在您能想到的每个领域都取得了成功!
由于 java 是安全的和多线程的,因此非常适合银行和交易管理服务。电子商务商店和计费软件的逻辑是在基于 core java 的框架中编写的。比如 android 这样的移动操作系统也是使用 java api的;股票市场算法基于 java;最近以来的所有大数据——海量数据都用 java 处理得轻而易举。实际上,hadoop 的 mapreduce 框架是用 java 编写的。 java 与 spring 等其他框架形成了强大的组合,可以对金融和 it 领域的实现依赖项进行有序化处理,并编写相应的服务器端应用程序。
java 是由 sun microsystems 开发的“一次编写、随处运行”的编程语言。它类似于 c 和 c ,但要容易得多。您可以将 java 与许多技术(如 spring、node js、android、hadoop、j2ee 等)结合起来,构建健壮、可扩展、可移植和分布式的成熟应用程序。 java 还使用 selenium 等工具促进持续集成和测试。
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(一个长期支持版)。
java 提供了许多吸引人的特性—
- ø 平台无关语言。
- ø 丰富的标准库使其易于编码。您可以使用 java 创建一个完整的独立应用程序。
- ø java 支持自动内存分配和释放(称为垃圾收集)。
- ø 它提供了出色的性能,因为 java 支持多线程和并发性,从而使其成为一种高度交互和响应性的语言。
- ø 安全简单。
- ø ……
要了解有关 java 功能特性的更多信息,请查阅ag凯发k8国际官网的文章。
您一定听说过很多关于 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 运行时环境)。要下载最新版本,请到javaag凯发k8国际官网。
然后,您可在系统上安装一个 ide 以处理我们将学习的概念。 eclipse 是我使用的一个很好的 ide,它很容易设置并且不会让你感到麻烦。您可以下载 eclipse 或 easy eclipse。 easy eclipse 是 eclipse 的轻量级版本,功能较少,适合初学者。还有其他更多 ide,如netbeans,jdeveloper、 intellij idea、bluej等——从java 9开始,可以在jshell中开始初步的java编程学习了,为初学者提供了便捷的学习支持。
如果您现在不想做任何这些,而只想阅读 一下关于java,那很好!只需继续阅读,掌握概念,然后随时开始编码!
哦,这里有个很好的 初学者的java 课程,您在学习了基础知识后会喜欢上它!@牛旦it课堂 专栏内有,如《》
在我们开始编码之前,让我们熟悉一些术语——
每个 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
这里我们使用 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 相同的 student 对象数组。代码如下:
student[] student = new student[numberofstudents];for(int i=0;i
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 等……
在本文中,我接触了 java 的基础知识,只是让您知道什么是编程语言,若之前使用过其他语言,就可以很快开始使用 java 进行编码。通过本文,要了解以下基本概念——
- l 类和对象
- l 构造函数
- l 输入/输出流
- l for 和 while 循环
- l 基本和非基本数据类型
- l tostring() 方法
- l 集合(arraylist)和迭代器
- l 异常处理基础
这里只是通过一个简单的程序来认知这些。还有许多高级概念不在本文的范围内,但请继续关注本头条号,这里将或已经推出更多关于线程、内部类、接口、垃圾收集等高级概念的文章。
赶快从的专栏开始学java编程吧:
下一篇,将为java编程学习的同学提供一份核心基础知识备忘清单,以供随时翻阅。本篇就到这里了,分享出去吧。再见!
ag凯发k8国际的版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。