Hello,老同学们,又见面啦,新同学们,你们好哦!
在看完本人的《数据结构与算法》专栏的博文的老同学,恭喜你们在学习本专栏时,你们将会发现好多知识点都讲解过,都易于理解,那么,没看过的同学也不必心急,只需在页面左上角点击本博主的头像,在弹出页面的左边分类专栏那里就能找到《数据结构与算法》专栏啦!!!
当然,实在着急的同学也可以直接开始JAVA的学习,那么,话不多说,开始我们《JAVA SE》专栏的学习吧!!!
在讲之前,本人先来说明一下,要想电脑能够 编译 并 运行 我们所编写的*.java文件,我们就必须要先解决环境问题(即:安装JDK和JRE),安装好后,我们就可以学习并自己手动编写并运行JAVA语言啦!
作为我们JAVA SE的开篇,我们这里首先要来解释一个问题:
为什么在众多语言中,我们偏偏要挑选JAVA进行学习呢?
JAVA语言的优点:
1.最为突出 以及 最为重要 的一点就是:JAVA是面向对象的语言。
那么,什么时面向对象呢?
面向对象 是指:我们生活中的任何事物,都可以用JAVA语言进行描述。(其实就是制作“工具方法”)
2.JAVA语言提供了一个非常强大的库,这就保证了我们在编程过程中会极大程度上地 简化 以及 缩短 我们的代码;
3.JAVA语言提供了“垃圾回收机制”,这就保证了我们在C地学习过程中提到的 “内存泄漏” 现象不会出现,这样看来,相对于C,我们不用再畏首畏尾地去编程了;
4.JAVA语言具有可移植性(即平台无关性),即:无论是在Windows平台还是在Linux、MacOS等其他平台上对Java程序进行编译,编译后的程序在其他平台上都可以运行(这是因为JAVA语言在编译后,编译器会生成“中间代码”,即*.class文件);
5.JAVA语言十分安全:JAVA语言提供了“垃圾回收机制”(第三点以提到)、异常处理和安全检查机制(数组边界检测和Bytecode校验等);
6.相比于C++等语言,没有了头文件、指针、结构、单元、运算符重载、虚拟基础类、多重继承等繁琐的内容,使得我们的代码看起来更加清晰整洁;
7.提供了对Web应用开发的支持,可以用来开发应用。
那么,在了解了JAVA语言的强大之后,我们就来初步介绍下JAVA语言的基本使用方法吧!
首先,我们要介绍下文件类型:
我们知道,C语言的文件无非是 *.c 和 .h 文件。
那么,相对地,JAVA语言的文件是.java 和 *.class 文件
(注意:由于我们上面已经说过了,JAVA中没有头文件,.class文件 是编译器将 .java文件转换为机器能识别的“中间语言”,我们要运行JAVA语言所编译的代码,就要产生相应的.class文件)
其次,我们先来回顾下我们在初次学习C语言时,我们编写的输出“Hello C!”的程序吧:
#include <stdio.h>
int main() {
printf("Hello C!");
return 0;
}
关于这里的代码,由于我们太过于熟悉,本人就不进行解释了。
(若是没有学过C语言,本人建议还是先学习了 C语言 和 数据结构与算法 再来学习JAVA的知 识)
那么,我们现在来编写一下“Hello JAVA!”程序:
class MyFirstJava { //这里我们养成一个优良习惯:我们的.java文件的文件名为什么,我们的文件开头就要写成“class 文件名”
public static void main(String[] args) { //这里是主函数的定义,在有些情况下,可以无参数,args可以写成任意变量名
System.out.println("Hello, Java!"); //这里就是相当于C中的printf()函数的函数
}
}
那么,我们用命令行编译一下看看结果:
在以上代码中,我们可能会考虑两个问题:
1.变量类型;
2.输出函数
那么我们在下方对这两个问题逐一进行解答:
1.变量类型:
八大基本变量类型:
char :1字节补码(UTF-8 和 UTF-16)
short:2字节补码
int:4字节补码
long:8字节补码(C语言的long是4字节补码.由此可以看出JAVA的long和C的long类型不一样)
float:4字节补码
double:8字节补码
(以上六种我们在学习C的过程中已经深入了解过了,我们就不进行过多的讲解了)
byte :1字节补码(均为 signed类型——即 有符号数,所以我们要注意位运算)
boolean:我们在《数据结构与算法》专栏中反复提到的布尔型,也就是逻辑型。
取值为 true 和 false
说明:在JAVA语言中,没有unsigned 类型修饰符,即:均有正负之分,所以,在这里的 int 类型的变量的范围是:-2147683648 ~ 2147683647
并且,在JAVA语言中,由于存在boolean类型,所以类似于:1>2>3是错误的,因为:1>2的结果是false,所以,false>3是语法错误。
String类与自动类型转换 :
String类型就是我们C语言中的字符串类型。
任何数据类型 + String,结果都被自动转换为String类型!
例:"abc" + 1的结果是 "abc1"
"bhhbh" + true 的结果是 "abctrue"
2.输出函数:
在JAVA语言中,输出函数只有如下三种:
1.printf:
和C的printf函数使用方法基本一样
2.print:
将它的参数显示在命令窗口,输出后不换行
3.println:
将它的参数显示在命令窗口,输出后换行
(注意:所有的输出函数的使用方法为: System.out.输出函数() )
那么,在讲解完输出函数后,我们就来编写一下“九九乘法表”程序吧:
public class NineNine {
public static void main(String[] args) { //args可以写成任何英文字符串,没有硬性要求。也可以不写参数
for (int i = 1; i < 10; i++) {
for (int j = 1; j <= i; j++) {
System.out.printf("%d*%d=%-2d ", i, j, i*j);
//String.out.println(j + "*" + i + '=' + i*j + ' ');
//只要有一个String类型,就会全转换为字符串类型
}
System.out.println();
//在JAVA语言中,println()函数会自动换行!
}
}
}
那么,我们用命令行窗口编译运行结果如下:
好了,输出函数这里我们差不多都已经基本会使用了,那么本人现在来介绍一下函数调用方法:
说到函数调用,这里我们要声明一点:形参和实参的关系与C中一样。
那么,我们现在来编写一个4层汉诺塔的递归函数来看看如何调用函数吧:
(汉诺塔问题:相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。
操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。
)
class Hanoii {
public static void hanoii(int num, char sourse, char aux, char target) {
if(num > 0) {
hanoii(num-1, sourse, target, aux);
System.out.println(num + ":" + sourse + "-->" + target);
hanoii(num-1, aux, sourse, target);
}
}
public static void main(String[] args) {
hanoii(4, 'A', 'B', 'C');
}
}
那么,我们编译一下,结果如下:
好了,现在我们再来讲解我们本篇博文的最后一个使用方法—— 类(相当于包含“函数”的 结构体)及其 的调用:
这里我们用输出点坐标的程序作为模板,代码如下:
SimplePoint.java:
class SimplePoint {
int row;
int col;
void showPoint() {
System.out.println("(" + row + "," + col + ")");
}
}
在如上结构体中,我们发现,和C语言不同的是,结构体中成员还能是函数!
SimplePointDemo.java:
class SimplePointDemo {
public static void main(String[] arg) {
SimplePoint b = new SimplePoint(); //b = (SimplePoint*) malloc(sizof(SimplePoint)); <=> b等同于指针,new的返回值是申请空间的首地址
b.row = 10;
b.col = 20;
b.showPoint();
}
}
我们另一个文件调用上一个文件中的类(可以理解为 包含“函数”的结构体),只需先将这两个.java文件放在同一个目录下,就可以正常运行啦
那么,我们来运行一下,看看结果:
可能有同学的命令行和本篇博文展示的不一样,本人做一下解释:
同学们的命令行可能是cmd(默认背景是黑色的)命令行,本人的命令行是Powershell命令行,基本操作是一样的,所以,对于代码的正确无需怀疑(JAVA语言的代码可是移植性最强的哦!!!)。
那么,我们这篇博文的全部内容就全部结束了,相信好多同学和我一样对于JAVA语言突然产生了极大的兴趣以及疑问,哈哈,可能会有同学觉得“如果不是为了学校课程才不会学习呢!”“竟然有人喜欢学习?”这样的看法。
总之,不论同学们是出自什么原因而走上JAVA 的求学之路,我们一定要坚持地走下去,关于JAVA的后续博文本人将在闲暇时间写出,希望大家能够喜欢!!!