文章目录
一、初识Java的main方法
1.main方法示例
public class Test {
public static void main(String[] args) {
System.out.println("HelloWorld");
}
}
代码1
代码1展示的就是最简单且最基础的一个Java程序,接下来我们来一起分析一下这段代码,看一看各个部分都代表什么。
由图1我们大致了解了代码的组成,那么一个完整的Java程序的结构又是什么呢?
Java程序的结构由三个部分组成
1.源文件(扩展名为***.java):源文件中带有类的定义。类用来表示程序的一个组件,在程序中或许只会有一个类。类的内容需包含在花括号内。
2.类:在代码1中,Test即为类。在类中可以存在一个或多个方法,方法必须在类的内部声明。
3.方法:在方法的花括号内编写此方法应执行的语句。
我们总结以上三点可以得出:类存在于源文件内,方法存在于类中,语句存在于方法中。
我们使用图画来帮助我们记忆。
在编写Java文件时我们还需要注意:在一个源文件中只能存在一个由public修饰的类,且源文件名必须与public修饰的类名相同。
2.Java的运行
在编写完代码1这样的代码之后我们开始运行它,会在我们IDEA的下方看见如下图所示的运行结果,那么在我们按下运行按钮到我们看见运行结果这段时间计算机做了些什么呢?
Java是一门半编译型、半解释型语言。计算机先通过javac编译程序把源文件进行编译,编译后生成的.class文件是由字节码组成的面向JVM的文件。最后启动java虚拟机来运行.class文件,此时JVM会将字节码转换成平台能够理解的形式来运行。(图2所示)
在上面对Java运行进行解释的时候,我们提到了JVM,而我们在使用IDEA之前,我们也安装了JDK,此时我们再引入一个新的名词"JRE"。他们三者之间存在什么关系呢?
问:JDK、JRE、JVM之间的关系?
答:
- JDK:Java开发工具包,提供给Java程序员使用,包含了JRE,同时还包含了编译器javac与自带的调试工具Jconsole、jstack等。
- JRE:Java运行时环境,包含了JVM,Java基础类库。是使用Java语言编写程序运行的所需环境。
- JVM:Java虚拟机,运行Java代码
依旧使用图片来进行说明。
二、标识符
通过图1我们知道Test称为类名,main称为方法名,我们可以统称其为标识符。由此我们引出标识符的定义,即:在程序中由用户给类名、方法名或变量所取的名字。
在命名标识符时,我们应严格遵守以下规则:
- 标识符中可以包含:大小写字母、数字、下划线和$符号。
- 标识符不能以数字开头,也不可以是关键字,并且严格区分大小写。
三、关键字
在标识符的命名规则中,我们知道标识符不可以是关键字,那什么是关键字呢?
- 关键字是由Java语言提前定义好的,有特殊含义的标识符或者保留字。
像代码1中的static、class以及public都是关键字。
在Java当中存在很多关键字,在这里我们就不进行逐个列举,随着学习的深入,大家也一定会对常用的关键字有所积累。
四、常量
在代码1中,存在 System.out.println("HelloWorld");
这样一条语句,在这条语句中,“Helloworld”就是字面常量。在程序运行期间,固定不变的量我们称之为常量。 在日常生活中,一个礼拜有7天,一年有12个月,这些固定不变的量我们都可以称之为常量。
public static void main(String[] args) {
System.out.println("hello");//字符串常量
System.out.println(100);//整型常量
System.out.println(3.14);//浮点型常量
System.out.println('A');//字符常量
System.out.println(true);//布尔常量
}
代码2
在代码2中我们所打印的数据都可以称为字面常量。
我们将字面常量细分可以分为:
1.字符串常量:由""(双引号)括起来的
2.整型常量:在程序中直接写的数字(整数)
3.浮点型常量:在程序中直接写的小数
4.字符常量:由’'(单引号)括起来的单个字符
5.布尔常量:只有两种(true和false)
注意:字符串、整型、浮点型、字符型以及布尔类型,在Java中都称为数据类型。
五、数据类型
在Java中数据类型主要分为两类:基本数据类型、引用数据类型。
我们对基本数据类型可以划分为四类八种:
1.四类:整型、浮点型、字符型以及布尔类型
2.八种:
此图详细说明了八种数据类型以及其关键字、占用内存和范围。
通常情况下我们默认:整型为int类型,浮点型为double类型。
引用数据类型在我们后续学习过程中在进行详细介绍,字符串其实就属于引用类型。
六、变量
了解完什么是常量,我们再来了解一下变量。
对于经常会发生变化的内容,在Java程序中,称之为变量。而数据类型就是用来定义不同种类的变量的。
语法格式:
数据类型 变量名 = 初始值;
例如:
1.整型变量
public static void main(String[] args) {
int a = 10;//定义一个整型变量a,并将数值10存放在变量a中
a = 100;//我们修改变量a的值
int b = 1, c = 2, d = 3;//在一行中我们也可以定义多个相同类型的变量
}
在我们定义变量的时候,一定要给变量一个初始值,否则会导致编译报错。
同时我们也应该注意:在赋初始值应关注数据变量的取值范围,当我们给的初值超过取值范围时,也会导致编译报错。
2.长整型变量
public static void main(String[] args) {
int a = 10;//定义一个整型变量a,并将数值10存放在变量a中
a = 100;//我们修改变量a的值
//int b = 1, c = 2, d = 3;//在一行中我们也可以定义多个相同类型的变量
long b = 10;
long c = 10L;//为了区分int和long类型,在long类型变量的初值后加L或l
3.短整型变量、字节型变量
short d = 10;
byte e = 10;
在定义变量的时候,我们可以根据变量的大小来选择合适的数据类型,做到对空间的充分利用。
4.浮点型变量
double a = 3.14;//双精度浮点型
float b = 3.14f;//单精度浮点型(3.14F也可以)
在Java中 int除int的值依旧为int,会直接抛弃小数部分,如果我们想得到小数,则需要保证至少有一个浮点类型的变量。
int a = 1;
int b = 2;
System.out.println(a / b);//输出结果为0
double a1 = 1;
double b1 = 2;
System.out.println(a1 / b1);//输出结果为0.5
我们还应注意小数在内存中不是精确保存的,会存在一定误差。
5.字符型变量
char a = 'A';//大写字母
char b = '1';//数字字符
char c = '帅';
在Java中,一个字符占两个字节,可以用来表示中文。
有时在执行javac的时候可能会出现上面图片中报错的情况,我们可以添加下面这一行语句,来解决使用char类型定义汉字时所产生的报错。
javac -encoding UTF-8 Test.java
6.布尔类型变量
boolean a = true;
boolean b = false;
注意:
布尔类型的变量只有两种取值,true表示真,false表示假。
Java中的布尔类型不能和其他类型(如int,double等)进行转换。不存在0表示假,非0表示真这样的用法。
布尔类型默认值为false。
7.类型转换
在Java中,当参与运算的数据类型不一致时,就会进行类型转换。类型转换主要分为自动类型转换(隐式)和强制类型转换(显式)。
7.1 自动类型转换(隐式)
代码无需经过任何处理,在编译时,编译器就会自动处理。数据范围小的转换为数据范围大的时就会自动进行。
int a = 100;
long b = 200L;
b = a;//编译通过,将a的值赋值给b时,编译器会自动将a提升为long类型,再进行赋值
a = b;//编译报错,会存在数据丢失的情况,不安全
byte c = 100;//编译通过,100在byte表示的数据范围内
byte d = 257;//编译报错,257超过了byte的数据范围
7.2 强制类型转换(显式)
代码需要经过一定的处理,才可以完成转换。数据范围大的转换为数据范围小的就需要进行强制类型转换。
强制类型转换可能会导致数据丢失。
int a = 10;
long b = 100L;
double c = 3.14;
a = (int)b;//强制类型转换
a = (int)c;//强转,只保留整数位,结果为3
System.out.println(a);
8.类型提升
不同数据类型之间进行相互运算时,数据类型小的会自动被提升为数据类型大的。
小于int的数据类型会被提升为int再进行计算。
byte a = 10;
byte b = 20;
byte c = a + b;//编译报错,a和b会被提升为int之后再进行计算,int->byte,err
byte d = (byte)(a + b);//编译通过
对于不同类型的数据的混合运算,数据范围小的会被提升为数据范围大的。
七、字符串类型
在Java中使用String来定义字符串类型。
String s1 = "hello";
String s2 = "world";
String s3 = s1 + s2;//这里表示将s1和s2进行拼接
字符串和整型数字之间还可以进行相互转换。
1.int转String
int a = 10;
String s1 = a + "";//方法一
String s2 = String.valueOf(a);//方法二
System.out.println(s1);
System.out.println(s2);
在方法二中我们使用的"String."可以先视为调用String中的方法。
2.String转int
String s3 = "100";
int b = Integer.parseInt(s3);
System.out.println(b);
这里的"Integer"是int的包装类型,基本数据类型都有包装类,关于什么是包装类以及字符串的更多知识,后续会详细介绍,我们在这只需了解如何将int和String相互转换即可。