一、基本结构
一个C语言程序:
#include <stdio.h>
int main(){
printf("Hello world\n");
return 0;
}
一个java程序:
public class HelloWorld{
public static void main(String[] args) {
System.out.println("Hello world");
}
}
(一)头文件相关
C通过#include的方式引用头文件,会把所包含的内容在编译时添加到程序文件中。
Java通过使用import导入某些类,例如import java.lang.String; 表示导入了String类,而它是属于java.lang这个包的。
(二)main函数
C语言的int main()函数是无参函数,最后要返回0。
Java由类和方法组成。类中带有一个或多个方法。方法必须在类的内部声明。
二、注释
(一)C语言注释
C语言风格的注释、多行注释:/*注释内容*/(不推荐)
C++风格的注释、单行注释://注释内容(用的最多)
(二)Java注释
Java注释包括了C语言的两种注释风格,还添加了文档注释。
文档注释:/**文档注释*/(常见于方法和类之上描述方法和类的作用),可以被javadoc工具解析,生成一套以网页文件形式体现的程序说明文档。
三、数据类型:
Java相比于C语言增加了字节型变量byte和布尔型变量boolean
(一)字节型变量byte
byte b = 10;
System.out.println(b);
注意事项:
1.byte在任何系统下都占1个字节
2.byte的范围是:-128~127
(二)布尔型变量
boolean b = true;
System.out.println(b);
b = false;
System.out.println(b);
注意事项:
1.boolean类型的变量只有两种取值,true表示真,false表示假.。
2.Java的boolean类型和int不能相互转换,不存在1表示true,0表示false这样的用法。
(三)字符型变量char也有一定的不同
1.Java中使用单引号+单个字母的形式表示字符字面值。
2.计算机中的字符本质上是一个整数。在C语言中使用ASCII表示字符,而Java中使用Unicode表示字符。因此一个字符占用两个字节,表示的字符种类更多,包括中文。
char ch='呵';
System.out.println(ch);
四、类型转换以及类型提升
(一)类型转换
Java相比于C语言对数据类型有着更严格的要求。由大转小是如果没有进行强制类型转换,C语言只会报错,Java却无法编译。
(二)类型提升:byte与byte的运算
byte a = 10;
byte b = 20;
byte c = a + b;
System.out.println(c);
此时编译器会报错:Test.java:5:错误:不兼容的类型:从int转换到byte可能会有损失。
byte和byte都是相同类型,但是出现编译报错。原因是:虽然a和b都是byte,但是计算a+b会先将a和b都提升成int,再进行计算,得到的结果也是int,这是赋给c,就会出现上述错误。
由于计算机的CPU通常是按照4个字节为单位从内存中读写数据。为了硬件上实现方便,诸如byte和short这种低于4个字节的类型,会先提升成int,再参与计算。
五、标识符以及常用关键字
(一)C语言
C语言标识符有如下规则:
1、标识符必须以字母a~z、A~Z或下划线开头,后面可跟任意个(可为0)字符,这些字符可以是字母、下划线和数字,其他字符不允许出现在标识符中,例如空格、标点符号和类型说明符(%、&、!、#、@、$)
2、标识符区分大小写字母
3、标识符的长度,c89规定31个字符以内,c99规定63个字符以内
4、C语言中的关键字,有特殊意义,不能作为标识符
C语言中定义的关键字共32个:auto、double、int、struct、break、else、long、switch、case、enum、register、typedef、char、extern、return、union、const、float、short、unsigned、continue、for、signed、void、default、goto、sizeof、volatile、do、if、while、static。
(二)Java
Java标识符有如下命名规则:
1、标识符由字母、数字、“_”、“$”组成,且首字母不能是数字;
2、不能把Java关键字作为标识符;
3、标识符没有长度限制;
4、标识符对大小写敏感。
5、自定义标识符最好取具有一定意义的字符串,便于记忆和理解。
命名建议:
1.类名:每个单词的首字母大写(大驼峰)
2.方法名与变量名:首字母小写,后面每个单词的首字母大写(小驼峰)
Java语言中定义的关键字共48个:abstract、assert、boolean、break、byte、case、catch、char、class、continue、default、do、double、else、enum、extends、final、finally、float、for、if、implements、import、int、interface、instanceof、long、native、new、package、private、protected、public、return、short、static、strictfp、super、switch、synchronized、this、throw、throws、transient、try、void、volatile、while。
六、字符串类型
在Java中使用String类定义字符串类型,比如:
public static void main(String[] args) {
String s1 = "hello";
String s2 = " world";
System.out.println(s1);
System.out.println(s2);
System.out.println(s1 + s2); // s1+s2表示:将s1和s2进行拼接
}
在有些情况下,需要将字符串和整形数字之间进行转换:
1.int转成String
int num = 10;
//方法1
String str1 = num + "";
//方法2
String str2 = String.valueOf(num);
2.String转成int
String str = "100";
int num = Integer.parseInt(str);
七、运算符
(一)取模运算
Java中%不仅可以对整形取模,也可以对double类型取模。
(二)关系运算符与逻辑运算符
与C语言1表示true,0表示false这样的用法不同,他们的计算结果其计算结果是布尔类型的true或者false。
(三)移位运算
相比于C语言的双目移位运算符:左移<<和右移>>,Java的移位操作符还包括无符号右移>>>。
右移>>的最左侧补符号位(正数补0,负数补1),而无符号右移>>>最左侧补0。
八、分支结构
(一)if语句的代码风格
C语言的常用代码风格
int x = 10;
if(x == 10)
{
//语句1
}
else
{
//语句2
}
Java的常用代码风格
int x = 10;
if(x == 10){
//语句1
} else {
//语句2
}
两种方式都是合法的,但Java中更推荐使用第二种风格,因为{放在if/else同一行,代码更紧凑。
(二)switch语句
C语言switch的括号内只能是整型表达式,而Java的switch的括号内只能是以下类型的表达式:
基本类型:byte、char、short、int,注意不能是long类型;引用类型:String常量串、枚举类型
九、输入输出
(一)输出到控制台
C语言用printf函数输出数据:
printf(format, msg);
Java用输出数据:
System.out.println(msg); // 输出一个字符串, 带换行
System.out.print(msg); // 输出一个字符串, 不带换行
System.out.printf(format, msg); // 格式化输出,与C语言的printf基本一致
(二)从键盘输入
使用Scanner读取字符串、整数、浮点数
import java . util . Scanner ; // 需要导入 util 包Scanner sc = new Scanner ( System . in );String name = sc . nextLine (); // 读取字符串int age = sc . nextInt (); // 读取整型flfloat salary = sc . nextFloat (); // 读取浮点型sc . close (); // 注意 , 要记得调用关闭方法
(三)循环输入:
循环读取N个数字,并求取其平均值
C语言方式
int sum = 0;
int num = 0;
int tmp;
while (scanf("%d", &tmp) != EOF) {
sum += tmp;
num++;
}
printf("sum=%d", sum);
Java方式
import java.util.Scanner;//需要导入util包
Scanner scanner = new Scanner(System.in);
int sum=0;
int num=0;
while(scanner.hasNextInt()){
int tmp=scanner.nextInt();
sum+=tmp;
num++;
}
System.out.println("sum="+sum);
scanner.close();