Java简介与实验基础
Java编程语言,拥有跨平台、面向对象的特性。
跨平台性是Java主要的特性之一,这个特性经常被称为“一次编译,到处运行”。这是怎么实现的?执行Java应用程序必须安装Java 运行时环境(Java Runtime Environment,JRE),JRE包括Java虚拟机(Java Virtual Machine,JVM),以及Java平台核心类和基础Java 平台库。通过JVM才能在电脑系统执行Java应用程序(Java Application),电脑上没有安装JVM,那么这些java程序将不能够执行。
Java虚拟机(Java Virtual Machine,简称 JVM)是一个”桥梁“,是一个”中间件“,是实现跨平台的关键,Java代码首先被编译成字节码文件,再由JVM将字节码文件翻译成机器语言,从而达到运行Java程序的目的。理解时请注意两点:
1)编译的结果不是生成机器码,而是生成字节码,字节码不能直接运行,必须通过JVM翻译成机器码才能运行。不同平台下编译生成的字节码是一样的,但是由JVM翻译成的机器码却不一样。
2)跨平台的是Java程序,不是JVM。JVM是用C/C++开发的,是编译后的机器码,不能跨平台,不同平台下需要安装不同版本的JVM。
Java编程语言是解释性语言,但Java不同于一般的解释型语言,它首先将源代码编译成字节码,再依赖各种不同平台上的虚拟机来解释执行字节码,从而具有“一次编写,到处运行”的跨平台特性。
面向对象是程序设计方法的一种,“面向对象程序设计语言”的核心之一就是开发者在设计软件的时候可以使用自定义的类型和关联操作。代码和数据的实际集合体叫做“对象”。一个对象可以想象成绑定了很多“行为(代码)”和“状态(数据)”的物体。
最常见的一种选择是在控制台中直接使用JDK附带的工具如Java编译器(javac.exe)、Java解释器(java.exe)、小应用程序浏览器(appletviewer.exe)等学习Java编程。源代码的编辑工作可以使用记事本或者EditPlus等文本编辑器完成。这种方式比较麻烦,适合想深入学习的人,感兴趣的读者可参见:使用JDK命令行编译、运行Java程序 及相关常见问题的解决(细致) https://blog.csdn.net/cnds123/article/details/101674527
下面介绍适合新手的BlueJ。
BlueJ是专为教学而设计的、Java环境下的一个内置编辑器、编译器、虚拟机、调试器的多应用软件。它的目的是提供有利于初学者使用的Java教学环境。
使用Java语言进行软件开发,有很多集成开发环境(IntegretedDevelopment Enviroment,IDE)可选择。本教材使用的是BlueJ。BlueJ专门针对入门级教学而设计,它的目标是给大学低年级的学生提供一个学习Java的方便、易于使用的教学环境。它是集编辑、编译、运行、调试、打包、发布等功能于一体的软件。其优点如下:
☆小巧、容易上手。商业级IDE自身的环境太复杂,而控制台涉及类路径等问题。BlueJ的基本操作见[附录A]。
☆BlueJ的主窗口显示了项目中的各个类以及类间的关系(继承和使用)。这种简易的UML类图可以使面向对象的抽象概念图形化。
☆可以方便地创建类和对象,可以直接调用/执行它的某个public方法。
☆它支持javadoc的生成、支持applet的生成和执行,同时支持生成可执行的jar文件。
BlueJ其它特点:
代码运行时会另弹出一个窗口。
BlueJ是轻量级的Java IDE,没有智能代码提示和帮助功能(这对学习Java的API和框架是不利的),也不会提醒你任何拼写错误,但你要是拼写错了就会打出红色波浪线。
我这里下载的是windows版的,目前是最新版本号4.22,下载完后:
解压后
顺便指出,其中bluej\examples子目录中有一些示例。
双击bluej.exe就可以使用了,第一次使用,将显示
【BlueJ collects anonymous interaction to improve the software and help researchers understand how students learn to program.
please help us bu participating.
(BlueJ收集匿名交互来改进软件,帮助研究人员了解学生如何学习编程。
请帮助我们参与。)
No thanks(不,谢谢)
I agree to take part, and I certify that I am 16 or older(本人同意参加,并证明本人年满16岁或以上)】
你可以选择参入或不参入
BlueJ的简单使用
打开BlueJ后主界面显示如下:
创建项目
打开菜单:项目→新建项目,参见下图:
【项目(Project:项目、工程)
实质上是一个目录结构,一个较大的程序(也可以说软件)往往包含多项功能代码文件和各种资源文件(图片、声音文件等),需要分门别类的放置不同的目录中。
项目的下一级就是包(package),包的下级就是类(class)。Java 编译器在编译时,直接根据package指定的信息直接将生成的class 文件生成到对应目录下。例如package aaa.bbb 编译器就将该 .java 文件下的各个类生成到 /aaa/bbb/ 这个目录下。包 就是项目下的 管理文件的目录,类就是所谓的文件了。
对于这些,先不必深究,大体了解即可】
创建新类
参见下图:
出现Hello类,参见下图:
用编辑器打开这个新建的Hello类,将看到BlueJ已自动为你生成了一些模板代码,你可以修改或全部删除这些代码,输入自己的代码。
在此,我们修改代码如下图:
编译通过后,关闭代码窗口。
【如果黄色框框里有多条的斜线,就是代表未编译,参见下图:
编译正确通过,斜线消失,参见下图:
】
System.out.println()语句将在一个终端窗口(Terminal Window)中显示输出信息。println输出一行(line)信息后,下一次打印位置的指示光标移到下一行;print则在输出若干信息后,指示光标移到刚才打印信息的尾部。
【提示:System.out.print(""); 输出语句后不换行,再进行输出接着刚才的语句后面;System.out.println(""); 输出语句后换行,再进行输出在新的一行输出。
怎么同时输出多个字符串?用引号包围来表示输出字符串,用加号进行连接多个字符串,可以连接其他数据类型。】
如果没有看见终端窗口,请在项目环境中单击菜单 查看 → 显示终端(View → Show Terminal),参见下图:
代码运行,按下面图示进行:
说明:右键快捷菜单中,其中有带new是构造函数,单击它可以创建类的实例,提供一个默认名称,不必修改使用它就行。要创建一个对象,从类菜单中选择一个构造函数。
用右键单击对象图标,也会弹出快捷菜单。
上面演示了用BlueJ,编写运行一个简单Java程序的例子。
BlueJ的一个明显特点,可以直接创建对象、直接调用该对象的方法、查看它的状态。这样可以使学生直观地看见和“感受“创建对象、调用方法、传递参数和接收返回值等操作的涵义。
【顺便指出:和使用JDK在控制台中编写运行Java程序不同,若要在控制台中运行的话,自己添加public static void main (String args[ ])方法】
你可以建立项目(工程)说明文件,对于项目(工程)意义不大,但一个大项目(工程)是非常必要的,参见下图:
打开这个比较简单的小项目所在的目录,可以看到其目录结构如下:
下面介绍一个需要运行过程中输入变量值的例子。代码如下:
//使用Scanner类,输入两个整数求和:
import java.util.Scanner;
public class MainA {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入两个整数(两数之间用空格分隔):"); //提示
int a=sc.nextInt(), b=sc.nextInt();
System.out.println("和:" + (a+b));
}
}
用前面的方法建立新类,名称为:MainA
将BlueJ自动为你生成了一些模板代码全部删除,输入自己的代码,参见下图:
编译通过后,关闭代码窗口。
按如下图示运行:
请留心参数是如何输入的。
下面介绍为Java方法的参数输入值的例子
求正整数的阶乘(factorial)。正整数的阶乘是所有小于及等于该数的正整数的积, 0的阶乘为1。自然数n的阶乘写作n!。
public class MainClass {
public static void main(String args[]) {
System.out.printf("%d! = %d\n", 5, factorial(5));
}
public static long factorial(long number) {
if (number <= 1)
return 1;
else
return number * factorial(number - 1);
}
}
用前面的方法建立新类,名称为:MainClass
将BlueJ自动为你生成了一些模板代码全部删除,输入自己的代码,参见下图:
编译通过后,关闭代码窗口。
按如下图示运行:
为Java方法输入参数输入值时,注意事项:
☆ 如果形参是字符串文字,注意用双引号包围它。
☆ 如果形参是数组如int[],则输入的参数形如{1,2,3}
关于public static void main(String args[])的说明:
public void main(String args[]) 也可以写为 public void main(String[] args) ,两者作用相同。
main是程序的入口方法,所以当程序运行时,第一个执行的方法就是 main()方法通常来讲,要执行一个类的方法,先必须实例化一个类的对象,然后通过对象来调用这个方法。但由于main是程序的入口方法,此时还没有实例化对象,因此在编写main()方法时就要求不需要实例化对象就可以调用这个方法,鉴于此,main()方法需要被定义成 public与 static。
参考https://www.cnblogs.com/guankelei/p/11327360.html
1)public关键字,这个好理解,声明主函数为public就是告诉其他的类可以访问这个函数。
2)static关键字,告知编译器main函数是一个静态函数。也就是说main函数中的代码是存储在静态存储区的,即当定义了类以后这段代码就已经存在了。如果main()方法没有使用static修饰符,那么编译不会出错,但是如果你试图执行该程序将会报错,提示main()方法不存在。因为包含main()的类并没有实例化(即没有这个类的对象),所以其main()方法也不会存。而使用static修饰符则表示该方法是静态的,不需要实例化即可使用。
3)void关键字表明main()不需要返回值。
4)参数String[] args是一个字符串数组,接收来自程序执行时传进来的参数。看下面的例子:
public class ArgsDemo {
public static void main(String[] args) {
String str = new String();
for (int i = 0; i < args.length; i++) {
System.out.println(args[i]);
str += args[i];
}
System.out.println(str);
}
}
用前面的方法建立新类,名称为:ArgsDemo
将BlueJ自动为你生成了一些模板代码全部删除,输入自己的代码,参见下图:
编译通过后,关闭代码窗口。
按如下图示运行:
这样传进main函数的就是一个字符串数组, args[0] =a; args[1]=b;args[2]=c, 如果不传参数进来,args为空。
【若命令行编译运行
使用javac ArgsDemo.java命令编译生成ArgsDemo.class文件
使用java ArgsDemo a b c 运行,将得到这样的输出:
a
b
c
abc 】
BlueJ提供的调试功能
在编辑器文本区的左边是断点区,你可以通过在断点区单击来设置断点。一个小的停止图标会出现来标明断点。只要执行到断点所在行,编辑器窗口就会自动跳出,显示当前行的代码。同时调试器窗口也会出现。在此就不多说了。
使用BlueJ创建独立的应用程序
BlueJ 可以创建可执行的 jar 文件。使用菜单 项目 → 创建jar文件,一个对话框会出现,询问你保存的格式,选择 jar 文件 来创建一个可执行的 jar 文件。
为了是这个 jar 文件可执行,你还必须指定一个主类。这个类必须有一个有效定义的 main()方法(使用主类定义 public static void main(String args[]))。
在此就不多说了。
使用BlueJ在项目(工程)中加入已有的类文件
你经常想要在 BlueJ 的项目中使用一些从其他地方得到的类。你只需要在菜单中选择 编辑 → 从文件添加一个类…… 就可以轻松的将以一个已经存在的类合并到你的项目中去。这样 BlueJ 允许你导如一个选中的 Java 源文件(文件名以 .java 结尾)。当某个类成功的被导入一个项目以后,它就被复制并且储存到当前的项目目录中。这跟你创建一个类并且写入所有的代码效果是完全一样的。
另一种可供选择的方法是,直接从外部添加一个类的源文件到你的项目所在目录中。下次启动 BlueJ 的时候,这类就会被包含在项目框图中。
附录、BlueJ的简单使用 https://blog.csdn.net/wang15877/article/details/105883397/