一、认识简单Java程序
首先简单理解Java的简单程序,与常见的Java关键字相识。首先创建HelloWorld.java文件,写如下代码:
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello Java");
System.out.println("You can call me " + args[0]);
}
}
①public关键字:一个Java文件中只能有一个public的类,且这个类的名称与文件名相同。(即HelloWorld)
②class关键字:该关键字表示类名的声明,即此时HelloWorld表示一个类。
③HelloWorld:public类的名称。
④public static:公共的静态的。
⑤void main():void表示返回值类型,此程序的返回值类型为空;main()表示主方法,是java开始执行的一个方法
⑥String[] args:字符串数组。String说明该数组类型为字符串类型;args是数组名称。
⑦System.out.println();是java中的打印的功能,与C语言中的printf()的功能相同,在输出设备(显示屏等)打印内容。
⑧"Hello Java"等内容:使用双引号("")表示为字符串。
⑨args[0]:是数组的第一个数据,此代码执行的时候需要传入参数。
既然程序编写完成,那么怎么执行呢,这里就需要使用Java的命令,首先使用win + R键打开运行输入cmd:
javac HelloWorld.java //这个命令是,java的编译命令,只有经过编译之后的二进制码(即生成HelloWorld.class文件才算成功编译),Java虚拟机才会认识我们的代码需要做什么。
java HelloWorld //该命令是执行二进制码文件的命令,执行之后才会在屏幕看到我们程序输出的结果
如下图所示:
注意事项:第一,java文件中可以存在多个类,但是只能有一个public类。第二,一个类对应一个字节码文件(.class文件)。
二、基本数据类型
基本数据类型划分:
数值型:整型:long、int、short、byte(默认值为0);浮点型:double、float(默认值为0.0)
字符型:char(默认值为’\u0000’)
布尔型:boolean(默认值为false)
1、整型变量
基本语法格式:int 变量名 = 初始值;
说明:int类型的包装类为Integer,在Java中int类型占用4个字节(一个字节为8个二进制比特)。
public class Test {
public static void main(String[] args){
int a = 10; //设置变量a的类型为整型,初始值为10
System.out.println(a);//输出a的内容
System.out.println(Integer.MAX_VALUE);//使用int的包装类可以查看int类型的最大值
System.out.println(Integer.MIN_VALUE);//使用int的包装类可以查看int类型的最小值
}
}
输出结果:
10
2147483647
-2147483648
该类型的范围为-2^31 ~ 2^31-1,在如今大数据时代,超过这样的数字还是比较容易的,因此Java中提供了long类型。
2、长整形变量
基本语法格式:long 变量名 = 初始值;
说明:long类型的包装类为Long,long类型占8个字节,所表示的范围还是很大,已经足够大部分场景使用。
public class Test {
public static void main(String[] args){
long b = 10L; //长整型变量的初始值需要在后面加上L(也可以是小写,但不建议)
System.out.println(b);//输出b的内容
System.out.println(Long.MAX_VALUE);//同样可以使用包装类查看long类型的最大值
System.out.println(Long.MIN_VALUE);//long类型的最小值
}
}
运行结果:
10
9223372036854775807
-9223372036854775808
3、双精度浮点型变量
基本语法格式:double 变量名 = 初始值;
说明:double的包装类为Double,占8个字节。使用int型变量的使用会舍弃小数部分,因此在Java中有doule类型提供,该类型会保存小数部分。
public class Test {
public static void main(String[] args){
double a = 1;//定义双精度浮点型的变量a初始值为1
double b = 2;//定义双精度浮点型的变量b初始值为2
System.out.println(a/b);//直接输出a/b的计算结果
}
}
结果:
0.5
注:如果将变量a和变量b定义为int类型,则计算结果为0,因为int类型会自动舍弃小数部分。
4、单精度浮点型变量
基本语法格式:float 变量名 = 初始值;
说明:float的包装类为Float,占4个字节。Java是强类型语言,因此定义float的时候需要加上f,否则Java会自动认为你定义的是double类型的变量,从而出现编译错误。
public class Test {
public static void main(String[] args){
float f = 1.0f;//定义float类型变量时需要加上f
System.out.println(f);//输出f
}
}
运行结果:
1.0
注意:由于表示数据精度范围较小,一般优先考虑使用double类型,不推荐使用float类型。
5、字符型变量
基本语法格式:char 变量名 = 初始值;
说明:char包装类为Character,占2个字节。在Java中使用的编码为Unicode编码规则,包含ASCII编码,在Unicode编码中还包含有中文。
public class Test {
public static void main(String[] args){
char a = '哈';
System.out.println(a);
}
}
运行结果:
哈
说明:如果使用cmd命令行编译,则需要加上-encoding utf-8,例如:
javac -encoding UTF-8 Test.java
6、字节型变量
基本语法格式:byte 变量名 = 初始值;
说明:byte的包装类为Byte,占1个字节。表示范围较小(-128~127)。
public class Test {
public static void main(String[] args){
byte value = 0;
System.out.println(value);
}
}
运行结果:
0
注意事项:字节型变量与字符型变量没有任何的联系,是两种不同的基本类型。
7、短整型变量
基本语法格式:short 变量名 = 初始值;
说明:short的包装类为Short,占2个字节。范围是-32768~32767,范围比较小一般不建议使用。
public class Test {
public static void main(String[] args){
short value = 0;
System.out.println(value);
}
}
结果:
0
8、布尔类型变量
基本语法格式:boolean 变量名 = 初始值;
说明:boolean的包装类为Boolean。boolean的取值只有两种:true和false。
public class Test {
public static void main(String[] args){
boolean active = false;
System.out.println(active);
}
}
false
注意:第一,占用字节数在有些JVM中是一个字节,有些是一个比特。第二,Java中的布尔类型不会像C语言中的0表示false,非0表示true。
三、变量转换与作用域
1、变量转换
注意事项:变量转换指的是数值型的基本类型之间的转换,非数值型之间或者数值型与非数值型的类型之间是不能相互转换的。
例1.1:数值型变量之间的转换
public class Test {
public static void main(String[] args){
int a = 1;//定义int型变量
long b = 2;//定义long型变量
byte c = 3;//定义byte型变量
short d = 4;//定义short型变量
float e = 5.0f;//定义float型变量
double f = 2.2;//定义double型变量
//数值类型之间的相互转换
int sum1 = (int)(a + b);//()里边加上类型表示强制转换,此时表示强制转换为int类型
double sum2 = c + f;//此时由范围小的类型向范围大的类型转换,因此不需要强制转换
System.out.println(sum1);
System.out.println(sum2);
}
public static void fun(){
System.out.println();//此时该方法中不能使用main()方法中的任何变量
}
}
运行结果:
3
5.2
说明:
在例1.1中的main()方法中定义的数值类型的变量都是可以相互转换的。转换也分为两种情况:
①强制类型转换:范围大的类型往范围小的类型转换。如long类型转换为int类型需要加上(int)才可以转换成功。
②隐式转换:范围小的类型往范围大的类型转换。这个转换是由Java自动转换,如上述sum2是将byte类型自动转换为double类型之后与double类型的变量f相加赋值给sum2变量。
2、作用域
作用域:指的就是一个变量所能作用的范围。
在一个方法中定义的变量是不能被其他方法所使用的称为局部变量。如例1.1中的fun()方法不能使用main()方法中的任何变量。
在例1.1中的main()方法中定义的数值类型的变量都是可以相互转换的。转换也分为两种情况:
①强制类型转换:范围大的类型往范围小的类型转换。如long类型转换为int类型需要加上(int)才可以转换成功。
②隐式转换:范围小的类型往范围大的类型转换。这个转换是由Java自动转换,如上述sum2是将byte类型自动转换为double类型之后与double类型的变量f相加赋值给sum2变量。
2、作用域
作用域:指的就是一个变量所能作用的范围。
在一个方法中定义的变量是不能被其他方法所使用的称为局部变量。如例1.1中的fun()方法不能使用main()方法中的任何变量。
在一个类中定义的变量称为全局变量/属性。