从C语言到Java学习过程(1)
文章目录
前言
本人由于课程需要使用java语言,而之前对于该语言并不是很熟悉,但在大一的课程上简单的学习过一些C语言的知识,对编程语言方面并不算毫无基础。这篇及以后可能写的几篇博客算是记载一下我个人的Java学习过程吧,也希望能给以后的读者(如果有的话)一些帮助吧。
一.Helloworld
所有语言的学习一般都是从写Helloworld程序开始的吧,所以我打算先写个Java版的Helloworld程序并拿来和C语言的比较一下。
1.代码
下面是C语言的Helloworld,文件名记为Helloworld.c,代码如下:
#include <stdio.h>
int main(int argc, char** argv)
{
printf("Helloworld\n");
return 0;
}
下面是Java语言的Helloworld,文件名记为Helloworld.java,代码如下:
public class Helloworld{
public static void main(String[] args){
System.out.println("Helloworld");
}
}
2.编译、运行
C语言和Java语言均属于静态编译语言,所以想要运行两者都需要进行编译。
对于C程序,使用gcc编译,可以在命令行中输入如下指令:
gcc Helloworld.c -o Helloworld.exe
可以得到程序的exe文件,在命令行中输入
./Helloworld.exe
即可运行,效果为在命令行中输出Helloworld字样
对于JAVA语言,可以使用javac进行编译,在命令行中输入
javac Helloworld.java
可以得到Helloworld.class文件,在命令行中输入
java Helloworld
即可运行,效果与C语言程序相同。
注:javac命令需要安装jdk才能使用,而gcc编译器一般linux自带,在windows下可以通过安装mingw获取gcc编译器。具体安装过程网上有的是,这里不再赘述。
两者都需要将其对应可执行程序所在目录设置为环境变量时,才能直接在命令行中使用。
3.个人总结
Java和C语言最大的差别就是java是一个彻底的面向对象的语言,也就是说,程序的一切行为都是以类为基础的,不可以有单独存在的方法(函数)与属性(变量),所以main函数的外面需要套在一个class的代码块中。
而且一般来说,Java文件的名字应该与其主类名称相同(这里为Helloworld)。除此之外,每个java类中都可以有一个main方法,且当将这个类被编译为.class文件时,并直接通过java命令运行时,运行的就是这个类中的main方法。
另外,关于库调用方面,C语言是通过引入头文件的形式得以调用函数库中的已有函数,而java则是通过引入其他包来调用其他文件中的类及其各种方法(System类属于Java默认调用的包,不需要特意进行引入)。
二.基本知识
Java中的许多初学者基础知识和C语言及其相似,以下是个人学习过程中的一些总结。
1.基本数据类型
(1) 基本介绍
Java和C都有char、short、int、long、float、double这几个数据类型,不同的是,Java中还有boolean类型用以表示布尔值,以及byte类型用于单独表示一个字节,而C语言中有指针类型和long long与long double(后两种并不常见)。
数据类型 | java中所占字节数 | C语言中所占字节数 |
---|---|---|
byte | 1 | \ |
char | 2 | 1 |
short | 2 | 2 |
int | 4 | 4 |
long | 8 | 4/8 |
long long | \ | 8 |
float | 4 | 4 |
double | 8 | 8 |
long double | \ | 8/12/16 |
bollean | 不明 | \ |
void* | \ | 4/8 |
java中的char类型存储字符的unicode编码,而C语言中的char存储的是ASCII码,另外,java通过使用byte表示占用一个字节的值,而C语言往往使用signed char来表示一个字节的值。
关于short、int、long、float、double等数据类型的使用场合,Java和C一般相同,java的long类型相比于C语言的更加确定,相当于long long类型。
C语言中通常使用int类型表示布尔值,为0表示false,为其他任意非0值时表示true。而Java中则用boolean类型来表示布尔值,且只有true和false两种取值。
至于C语言中的指针,个人认为Java中与其对应的为各种引用数据类型,不同的是,指针可以直接进行各种操作,而Java中对引用数据类型的操作则受到各种限制。
指针可以使程序的编写过程更加灵活,但也可能因为程序员水平不高导致潜在风险,但无论如何指针都是C语言的精髓。至于引用数据类型的细节后面再说吧。
(2) 类型转换
Java的类型转换与C语言差不多,分为自动(隐式)类型转换和强制类型转换。隐式类型转换发生在小数据类型与大数据类型进行运算以及整数数据类型与浮点数据类型运算的时候,这里不再赘述。需要注意,整数的默认类型为int,浮点数的默认类型为double,若要声明float类型的浮点数,需要在后面加f或者F。
强制类型转换方面,两者也差不多,通常发生在将大的数据类型转换为小的数据类型以及浮点数转换为整数的时候。需要注意的是,通常强制类型转换会导致数据精度损失以及数据溢出,且浮点数转换为整数并不是四舍五入,而是抛弃小数位。
boolean类型不可进行类型转换。
注:上面的强制类型转换仅局限于对基本数据类型进行操作,暂时不包括引用数据类型。
(3) 常量声明
在C语言中,常量包括宏常量和const常量两种,前者通过在预编译阶段直接替换实现,后者通过存储在只读数据段中实现,具体实例如下:
#define X 100 // 定义一个表示100的宏常量
const int y = 100; // 定义一个表示100的const常量
而Java中通过使用final关键字,其实现细节暂时不清楚,个人认为和C语言的const常量类似。实例如下:
final int z = 100; // 定义一个表示100的常量
2.选择语句
选择语句没什么说的,C语言和Java都是下列格式
if(条件1为真){
...
}
else if(条件2为真){
}
...
else if(条件n为真){
...
}
else{
...
}
这里不做过多解释。
3.循环语句
C语言中的三种循环方法java均可以使用,具体如下:
for(循环初始化; 循环条件1; 循环迭代表达式){
...
}
while(循环条件2){
...
}
do{
...
}while(循环条件3)
上述三种循环方法这里不做过多解释。
另外Java中还提供了加强型for循环(foreach循环),实例如下:
int[] intArray = {...};
for(int i: intArray){
...
}
注:其中数组可以替换为任何实现了iterable接口的类(具体后面再说吧)。
小结
今天写了不少,感觉没太大错误,之后有时间再写,但毕竟本人还是个新手,难免出错,要是有什么错误,希望读者能在评论区不吝赐教。