【Java基础系列】- Java入门
一、运行一个Java程序
HelloWorld程序:HelloWorld.java文件名和带mian方法的类名保持一致
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
其中public class HelloWorld
是一个类,public static void main
是这个类中的main方法,方法main后面{}
中的内容是main方法的方法方法体
运行方式:
$ javac HelloWorld.java
$ java HelloWorld
Hello World
javac将.java文件编译为.class文件
1. 代码详细解释
public static void main(String[] args)
这是 Java 程序的入口地址,Java 虚拟机运行程序的时候首先找的就是 main 方法。只有有 main() 方法的 Java 程序才能够被 Java 虚拟机运行,可理解为规定的格式。
对于里面的参数及修饰符:
- public:表示的这个程序的访问权限,表示的是任何的场合可以被引用,这样 Java 虚拟机就可以找到 main() 方法,从而来运行 javac 程序
- static: 表明方法是静态的,不依赖类的对象的,是属于类的,在类加载的时候 main() 方法也随着加载到内存中去,代码只在方法区存一份
- void:方法是不需要返回值的
- main:约定俗成,规定的
- String[] args:从控制台接收参数,字符串数组,可以输入多个字符串作为参数,空格隔开,如
$ java Test aaa bbb ccc
,可通过“ ”输入空格参数$ java Test aaa "b bb" ccc
2. 程序执行过程
- 程序从硬盘加载到内存,由操作系统负责找到main方法并开始执行,执行过程中维护进程内存空间占用,包括堆、栈、代码段、数据段
更细划分如下:
3. 标识符
-
Java对各类、方法、变量、常量等所起的名,该字符序列称为标识符
-
标识符只能以字母、_、$开头,后面才可有数字,中间不能有空格
-
标识符大小写敏感
二、Java变量
Java变量本质上是内存的一小块区域,通过变量名来访问这块区域,故每个变量使用前必须申请/声明,并赋值之后才可使用
1.分类:
按照被声明位置划分:
- 局部变量:定义在 方法内部,或方法的参数
- 成员变量:定义在 类内部,方法外部
- !!变量必须在类里面
按照所属的数据类型划分:
- 基本数据类:
- 数值型:整型(byte,short,int,long),浮点型(float,double)
- 字符型 char
- 布尔型 boolean
- 引用数据类型:类 class,接口 interface,数组
2. 字节数和大小
Java字符采用Unicode编码,每个字符两字节(16位)
Java中允许使用转义字符‘\’来转变所接字符含义,如‘\n’代表换行符
3. 类型转换
boolean不能转换为其他数据类型
实数常量(如1.2)默认为double,整数常量(如12)默认为int
float赋值需要:float f1=1.2f; long l1=123L;
容量(覆盖数据范围)大小:byte<short<char<int<long<float<double
不同类型数据一起计算时,容量小的自动转为大的
!!注意类型转换可以将占小空间的转换为大的(除了整型转浮点型会失精度外不会出问题),反过来需要进行强制类型转换,会溢出或降低精度(因为会把多出的字节直接舍了)
!!!对于char、byte、short在自己与自己或互相之间计算时会先转成int再计算
例子:char c1=‘a’,c2=125都没问题,但char c3=888888888有问题,超了
-
long l1=88888888;有问题,因为该数字默认看成int,但数字大小超过了int最大范围
-
int i=1; i=i/10;没问题,都会看成int来计算后赋给i,但i=i*0.1有问题
-
float f1 = f2 + f3 *0.1有问题,因为0.1默认看成double
-
byte b = b1 - b2;有问题,byte类型变量b1、b2计算时会转换成int,之后结果int赋给byte出错
三、运算符
-
int i=1;int i=(i++);是先赋值再++,int i=(++i);是先++再赋值,同理–
-
!a取非,a&b与,a|b或,a^b异或(同0异1),a&&b短路与,a||b短路或(短路&&与||根据前面的判断条件可知结果一定时便会直接短路,不会算后面)如(i<5)&&(j>0)&&(k>8)
-
对于字符串,+可用于字符串的连接,+只要一侧是字符串,算时会把另一侧也转换为字符串
-
运算优先级:()> ++ - - > / % > ± > <= > == != > & > ^ > |
-
三目表达式: x?y:z 若x为true则整个表达式为y的值,否则为z的值
四、语句
分支:if语句:if () {} else if () {} else () {}, switch(i){case 0: 语句break;case 4:语句break; }
循环:for语句,while,do{语句} while(逻辑表达式):先do后判断
break退出当前循环,continue跳过这轮循环继续循环