文章目录
一、初识Java的main方法
1. 写出第一个Java程序
- 首先创建一个.java文件
- 然后用sublime打开
如图
书写程序:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("hello");
}
分析:
public
: 访问修饰限定符。除此之外还有private
和protected
class
: 类名,定义一个类
HelloWorld
: 类的名称,例如int a=10;
其中a是整型的名称
void
:表示无返回值
static
:静态的
String[] args
: 形参为一个叫args的数组,数组的写法与C语言不同,int arr[] -> int[] arr
println
: 打印并且换行,相当于C语言中的printf
, 上面是打印字符串"hello"
args
是什么?
args是运行时的命令行参数,作为一个字符串传入main
如图我们执行java命令的时候后面输入一句话,这句话就作为参数传入main方法
它实际上是这样的:
整个public叫做类体,类体由字段和方法组成
注意:
- Java中main方法的固定写法
public static void main(String[] args) {
/********程序**********/
}
- 一个Java文件中,只能由一个
public
类,并且这个public
类的类名一定要和文件名相同。可以有多个其他类 - 类名需要和文件名相同
- 编程规范:左括号紧跟当前行
- 类名采用大驼峰形式命名
HelloWorld
2. 运行一个Java程序
一个Java 程序的运行:
- 首先.java程序经过编译生成.class(字节码) 文件
- 然后.class文件被加载到JVM(Java虚拟机)中运行
画图分析:
那么此时可能会问,JVM在哪 ,我什么时候安装的?
这就涉及到一个小面试题了
面试题:JDK,JVM,JRE三者关系
JDK
:Java开发者工具(Java Development Kit)
JRE
:Java运行环境(Java Runtime Environment)
JVM
:Java虚拟机 (Java Virtual Machine)
所以说,Java有着 “一次编译,到处运行” 的口号
这也是Java的跨平台性
运行实例:
首先打开cmd,进入存放Java文件的文件夹:
温馨提示:使用记事本写代码的时候,记得随时保存,然后需要重新编译才能运行当前结果
注意:
-
不是一个java文件对应一个.class文件,而是每一个类对应一个.class文件
好处:用到哪一个类就去加载哪一个类,而不是统一放在一个字节码文件中有多个类的字节码
一般一个java文件只写一个类(习惯)如图:每一个类都会生成自己的字节码文件
总结:
- 编译:javac命令:
javac 文件名.java
- 运行:java命令:
java 文件名
关于Java文件魔数(Magic Word)
我们用记事本打开上面生成的 HelloWorld.class文件
发现:
每一个.class文件都有一个 cafe babe(咖啡宝贝)
作用:
确定这个文件是否为一个能被虚拟机接受 的 Class 文件
也就是起到标识的作用
而之所以用cafe babe
估计也是高斯林老爷子爱喝咖啡的缘故吧,毕竟Java图标就是一个咖啡😂
3. Java注释
- 行注释
//
- 块注释
/* .... */
- 文档注释
/** .... */
一般放在文档开头注明作者等信息
注释的常见问题
如图所示,我们把代码中加入注释
会出现如上错误!
原因如下:
如果注释中有中文,Java的GBK格式无法编码
因为java默认以GBK格式编码,而代码默认以utf-8的格式编码!
解决:javac -encoding utf-8 HelloWorld.java
成功!
4. Java中的三种打印方式
System.out.print("打印但不换行");
System.out.println("打印换行");--最多使用
System.out.printf("%d\n",10);//格式化打印
二、数据类型
- Java中没有所谓的无符号,默认就是有符号!
- Java中没有计算数据类型所占字节数的功能(如C中sizeof)
1. int(整型)
-
Java中的整型
int
与C语言中不同,C语言中的int
在不同位的机器大小是不一样的
但是由于Java比较安全,Java中的int
始终为4字节,与操作系统无关
因此Java具有可移植性
查看整型的最大值和最小值
最大值:Integer.MAX_VALUE
–-2^31
最小值:Integer.MIN_VALUE
–2^31 -1
Java是面向对象的,int为简单类型,简单类型是不能面向对象的,所以把他包装成一个类
这里,Integer 为包装类
-
如果整型不进行初始化
C语言中局部变量不初始化那么其值就是随机值
而在Java中 不初始化就会报错(Java的安全性比较高)
Java中没有全局变量这一概念 -
Java中变量的命名
数字
,字母
,下划线
,$
,小驼峰写法
不可以数字开头! -
中文可以作为变量名,因为Java用Unicode编码字符集
因为Unicode中包含中文、拉登文等多种文字
如图:
2. long(长整型)
long的大小:8字节
long的范围:-2^63 ~ 2^63-1
long的定义:
1. long num=10;
2. long num=10L;
定义long类型,最好写成:long b=10L
;(L尽量大写,否则容易看成101)
加L表示为long类型,也可以不加,因为int类型4字节 可以放在8字节的变量b中
注意:java中没有long long类型
3. double && float(双精度浮点型)
double大小:8字节
Java中double和C语言差不多
普通小数默认为double类型
小数除法,必须有一个为小数才可以,否则进行整数除法
float大小:4字节
定义:
float a = 1.1f;
必须加f后缀
因为如果不加 :像这样float a=1.5
,编译器就会报错
因为相当于把一个8字节的数据放到4字节的float里面
C语言处理这种情况的时候会警告,但是Java安全性更高,不允许这种情况出现,所以Java中不会出现截断警告(8字节放入4字节),只要不匹配直接报错!
注意:
- 浮点数精确问题
小数本身就是一个一个没有精确的数字,只能精确到某几位
Java的double内存遵循IEEE-754标准
,尝试使用有限的内存空间表示可能无限的小数,势必会存在一定的精度误差
例子:
可以看到输出的是一个极不精确的数字!
- 数据范围
Java 中的 double 虽然也是 8 个字节, 但是浮点数的内存布局和整数差别很大, 不能单纯的用 2 ^ n 的形式表示数据范围.
4. 字符类型
char类型
-
ava中char为两个字节 一个汉字两个字节
所以可以利用char接受汉字
因为C语言中使用ASCII码表示字符,而Java中使用Unicode表示字符,因此一个字符占用两个字节,表示的字符种类更多,包括中文
-
char类型赋值97,输出为a
因为它会把Unicode码解析出来
byte(字节类型)
Java中存在一个变量只有一个字节—byte
byte b = 10;
byte就相当于C语言中的char
范围:-2^7~2^7-1
5. short(短整型)
大小:两字节
范围:-2^15~2^15-1
这个表示范围比较小, 一般不推荐使用