Java笔记01:从Hello World开始

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)为基本单位,publicstatic被称为修饰符,每个.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语言中定义像intfloat这样的变量根本用不着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布尔类型,就两种值,falsetrue

需要注意的是,在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这个引用存在栈内存中,而字符串对象helloworld则存在堆内存中,引用类型就有点像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.*;导入这个包才能使用输入。

扫码关注公众号:
图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章