public class Hello{
	public static void main(String[] args){
		System.out.print("Hello,World!");
	}
}

运行过程及结果:

Java SE 学习笔记-Day02_Java SE

注意事项:

  1. 编译时采用javac [文件名],其中文件名要带有.java扩展名。

  • javac 编译后以.class文件存在。

    Java SE 学习笔记-Day02_Java SE_02

运行程序采用java [类名],不用加扩展名。

一个源文件中的主类名(类里面的public类)要与编译的文件名保持一致。

编译型与解释型语言

编译型语言将程序代码编译完后再执行,如C/C++程序,速度快,效率高,但不灵活,程序有任何改动时,都需要重新编译。

解释型语言边编译边执行,一句一句进行,灵活,效率低。

Java先编译成字节码,再通过JVM解释执行。

用一个灵活的例子来比较两者。一本中文书要给一个不懂中文的外国人看,有两种方案。方案一,将整本书翻译成外国人的母语,这样阅读起来速度快,但这本书有更新时,又需要全部重新翻译一遍;方案二,请一个翻译,一句一句翻译给外国人,这样灵活,但是效率慢。

开发IDE - IDEA

IDEA中输入 psvm 回车就会自动补全public static void main

输入sout回车就会自动补全System.out.println()

注释

除了单行注释、多行注释以外,还有Java Doc,\** 开头敲回车就会出现文档注释。Java Doc中的注释是有功能的。

Javadoc的作用是针对整个方法或者整个类做一个简要的概述的,使得别人不通过看具体方法代码就能知道某个方法或者某个类的作用和功能。写了Javadoc的在别人使用到类时,将鼠标悬停到类上或者方法上,javadoc会以提示信息显示出来。

Java SE 学习笔记-Day02_Java SE_03

可以通过JavaDoc生成类的类似Java API的说明网页。

命令行方式:

javadoc -encoding UTF-8 -charset UTF-8 [filename.java]
# 将会提取这个类的源码中的JavaDoc
# -encoding UTF-8 -charset UTF-8 是为了中文不乱码。

IDEA方式:

Java SE 学习笔记-Day02_Java SE_04

数据类型

boolean 数据类型存储为 8 位(1 个字节)的数值形式,但只能是True 或是 False。

char 数据类型存储为16位,但只能保存一个字符,包括中文。:

  1. 只能使用单引号'',不能使用双引号""当字符串使用。
  2. char可以当作数值运算,数值范围0~65535,可以通过强制类型转换为数值。
  3. Java采用Unicode编码。运算时,char和C++里的一样, 也对应了ASCII。
System.out.println('\u0061'); // \u可代表unicode码对应的字符。

float、double浮点数不能直接比较,因为两者是离散的,不能准确表达任意一个实数,相当于限定了有效数字的科学计数法。所以float精度6~7位,double精度15~16位。

byte数据类型存储为8位,范围为-128 ~ 127。

两个JDK7 新特性

  • swith ( )支持String 类型。

    原因是每一个字符还是数值,每一个对象都有一个hashcode,根据hashcode来查找分支,通过equals来比较。

  • 支持用下划线分割数字

int a = 10_0000_0000;  // a 为10亿

一个值得注意的溢出问题

int a = 10_0000_0000;
int b = 20;
int c = a * b;
System.out.println(c);

运行结果:

Java SE 学习笔记-Day02_Java SE_05

原因:因为a * b 为200亿,超过了int的范围。但此时即使把c改为long类型的,程序也是相同的运行结果。因为在赋值给c前,a * b 的临时变量,已经发生了溢出错误。需要在计算前,显示的将一个变量转换为long类型,使其临时变量也是long类型,如下运行结果为。

int a = 10_0000_0000;
int b = 20;
long c = (long)a * b;
System.out.println(c);

Java SE 学习笔记-Day02_Java SE_06

匿名变量:默认是int类型的。

byte a = 3;
char b = 20;
char c = a + b;  /* 将会报错
因为 a + b 产生的临时变量默认为int,int 向 char的转换需要强制类型 */

程序规范性

  1. 标识某个数值为long类型时,最好使用大写L,不要使用小写l。
  2. 定义变量时,建议不使用int a = 2, b = 3这类风格的,尽管没有错误。

类成员默认初始化

boolean类型默认为 false

常量

关键字 final : 修饰符,不存在使用顺序。包括static、public等修饰符

static final int A 与 final static int A 都可。

命名规范-驼峰原则

类名:首字母大写+驼峰原则。如,HelloWorld。

常量:全部大写,多个单词之间用下划线隔开。如,MAX_VALUE。

局部变量、方法名、类成员变量:首字母小写+驼峰原则。如,getValue、lastName

运算符

instanceof 用来判断一个对象是否为一个类的实例。

boolean result = obj instanceof Class

其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回false。

注意:编译器会检查 obj 是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体看运行时定。

IDEA中快捷键

Ctrl + D : 赋值当前行到下一行。

Ctrl + R :替换。

位运算

^ : 两位相同为0,不同为1。

<<:左移一位,乘以 2。

>>:右移一位,除以2。

位运算效率高。

字符串拼接

int a = 2;
int b = 3;
System.out.println(a+b+"");
System.out.println(""+a+b);

运行结果:
Java SE 学习笔记-Day02_Java SE_07

原因: 字符串放在前面会将后边的变量自动转换成字符串类型,输出。而放在后面,将会先运算。

package 包机制就是文件夹的作用,防止类重名,相当于路径名。

包名以一般以公司域名的倒置命名。

如com.baidu.www。

要使用另外一个包里面的类时,要使用import导入进来。

import java.util.Date; //导入Date类
import java.util.*;  // 导入util下所有的类

输入Scanner

一个快捷的new对象的方式,先输入

new Scanner(System.in);

再在分号后面,按Alt + Enter 这样可以直接格式化,再输入变量名即可。

读取字符串:

  • next( ) : 从第一个非空白字符读取到第一个空白字符(空格、回车、制表符)。
  • nextline( ):遇到回车才不读取。

读取其他类型:

  • next+[类型名]

还可以通过hasNext[类型] 方法判断下一 个值是否是对应的类型值(可以类型转换成对应类型即可),是的话true。

IDEA反编译

将.class文件移到工程项目下。需要通过文件浏览器,不能直接在idea里面移动。双击打开,就可以得到反编译的结果,得到源码。