Hello World
来看看第一个程序吧:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("wmq天下第一可爱");
System.out.println("就不用HelloWorld,嘻嘻");
}
}
这个程序可以说简单了,但是有几点需要注意的地方Java遵循万物皆对象的思想,程序必须放在类中。和C语言一样,必须有main()
函数来作为程序入口,但在面向对象的术语中,这里的main()
要称为方法(method)。
Java程序以类(class)为基本单位,public
和static
被称为修饰符,每个.java文件中只能有一个public类,并且这个类名要与文件名同名。Java规定main()必须像上面这样写,具体原因后续解释。
类的命名:Java规范推荐类名要用大驼峰法,即首字母要大写,如果包含多个英语单词,每个单词首字母大写。
MyName
MyAge
HelloWorld
而方法名推荐小驼峰,区别只是第一个首字母不用大写:
myName
myAge
helloWorld
创建对象
使用new
关键字创建对象:
new String("疏影横斜水清浅,暗香浮动月黄昏。");
我们从String
类创建了一个实例对象,还需要有一个引用来使用它。
String s = new String("abc");
就像在C语言中定义一个普通变量一样简单,这样的类型在Java中称为引用类型。由于字符串的使用实在是频繁,所以这个还有简洁写法:
String s = "abc";
基本类型
还记得在C语言中定义像int
、float
这样的变量根本用不着new
,当然C里面也没有,为了简化程序,在Java中也有一些基础类型是不用new
的。
通常new
出来的对象都是保存在堆内存中的,以此方式创建小而简单的变量往往是不划算的。所以对于这些基本类型的创建方法,Java
使用了和C/C++
一样的策略。也就是说,不是使用new
创建变量,而是使用一个“自动”变量。 这个变量直接存储"值",并置于栈内存中,因此更加高效。
基本类型 | 大小 | 最小值 | 最大值 | 包装类型 |
---|---|---|---|---|
boolean | — | — | — | Boolean |
char | 16 bits | Unicode 0 | Unicode 216-1 | Character |
byte | 8 bits | -128 | +127 | Byte |
short | 16 bits | -215 | +215-1 | Short |
int | 32 bits | -231 | +231-1 | Integer |
long | 64 bits | -263 | +263-1 | Long |
float | 32 bits | IEEE754 | IEEE754 | Float |
double | 64 bits | IEEE754 | IEEE754 | Double |
void | — | — | — | Void |
与C语言不同,Java没有无符号数,并且所有相同类型在不同系统所占空间大小是一致的。
这些类型可以很方便的使用,和在C语言中基本没差别:
char x = 'a';
int money = 123;
float pi = 3.14;
如果要把这些值保存在堆内存上,可以使用它们的包装类型像前面创建字符串对象那样使用。
定义常量要用final
而不是const
:
final int age = 18;
对常量重新赋值会引起报错。
var
对于一些比较长的类型名:
var e = new VeryVeryLong(); // 和下面的等同
VeryVeryLong e = new VeryVeryLong();
var
相当于可以帮助你少打几个字。
注释
Java注释也和C中差不多:
// 这是单行注释
/*
这是多行注释
*/
/**
*这个有点特殊
*比一般的多行注释
*多了个星号,每行开头还有星号
*可以用来自动创建文档的注释
*/
char类型
Java中的char
类型用两个字节表示,可以表示一个Unicode字符,也就是说可以表示部分中文,还有一些特殊的符号之类的。还可以用转移序列\u
来表示一个Unicode字符。比如'\u03C0'
表示希腊字母π。
和在C语言中一样,单引号表示字符char类型,"A"这样双引号括起来的是字符串。习惯了Python的人要注意这一点。
boolean类型
boolean
布尔类型,就两种值,false
和true
。
需要注意的是,在Java中布尔值不能和整型值相互转换。而在C中可以用0代替false,用非0值代替true。事实上在C语言中布尔量也就是无符号整数类型。
短路运算
对于一个布尔运算的表达式,如果可以提前确定结果,就不再计算后续内容。
举个栗子:
boolean flag = (3 > 5) && (2 / 0 == 1);
这里编译器不会报后面2除以0的错误,因为&&
与运算是全为真才为真,这里第一个3 > 5
已经为假,后面的计算就不会再做了。类似的,对于||
或运算,如果前面已经确定为真,后面的内容也不会计算。
Java也有三元运算符? :
,用法和C语言一样。
字符串
字符串不属于基本类型而是引用类型。
String s1 = ""; //字符串可以为空,长度为0
String s2 = "hello";
String s3 = "world";
与C语言不同,Java字符串并没有以
\0
做结尾哦。
字符串是不可变的。
public class Main {
public static void main(String[] args) {
String s = "hello";
System.out.println(s); // 显示 hello
s = "world";
System.out.println(s); // 显示 world
}
}
可以看到打印的s的值变了,但是实质上引用类型是将s
这个引用存在栈内存中,而字符串对象hello
和world
则存在堆内存中,引用类型就有点像C语言中的指针,s一开始指向了hello,后来我们又创建了一个内容为world
的字符串对象并让s指向了它。
字符串可以用+
来拼接,并且可以和其它类型拼接,在这之前其它类型会被自动转成字符串。
public class Main {
public static void main(String[] args) {
String s1 = "I love ";
String s2 = "you ";
int a = 3000;
String s = s1 + s2 + a;
System.out.println(s);
}
}
和Python一样,Java现在可以用三对双引号表示多行字符串,但是这是Java13才有的新特性。
输入
在命令行中输出只需要使用System.out.println()
就行,但是输入就比较麻烦了。
首先需要构造一个Scanner
对象:
Scanner in = new Scanner(System.in);
获取字符串输入:
String s = in.nextLine();
获取整数:
int i = in.nextInt();
别急着运行你的程序,现在还要在最开始添加一行import java.util.*;
导入这个包才能使用输入。
扫码关注公众号: