Java基础语法
编译与运行
在终端运行
编译java java文件,会生成一个class文件
运行class文件,java class文件
public class Hello { //类(public class)+名称(Hello)
public static void main(String[] args) { //修饰符/关键字(public static void)+方法(main)+参数
System.out.print("Hello, World!");
}
}
文件名和类名必须保持一致,并且首字母大写
Java程序运行机制
编译型(compile)
相当于整体翻译
操作系统 C/C++
解释型
相当于一段一段的翻译
网页,对速度要求不高 python/js
ps:java既有编译型特征又有解释型特征
程序运行机制
IDEA使用
psvm:直接生成一个main方法
sout:直接生成一个输出语句
基础语法
注释
单行注释
多行注释
文档注释
public class HelloWorld {
public static void main(String[] args) {
//单行注释
//输出一个Hello, World!
System.out.println("Hello, World!");
//多行注释 /* 注释 */
/*
*/
//JavaDoc:文档注释 /** */
/**
* @Description HelloWorld
* @Author 白木有鹿
*/
}
}
标识符
关键字
Java所有的组成部分都需要名字。类名、变量名以及方法名都被成为标识符
数据类型
强类型语言
要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用
弱类型语言
不用严格符合固定
Java数据两大类型
ps:定义long时一般会在后面加个L/l
定义float时一般会在后面加个F/f
long num = 30L;
float num2 = 50.1F;
String不是关键字,是类
数据类型扩展
整数扩展
二进制0b
八进制0
十六进制0x
浮点数扩展
浮点数:有限、离散、舍入误差、大约、接近但不等于
最好避免使用浮点数进行比较
字符扩展
所有字符本质还是数字(可以强制转换)
编码 Unicode
char c3 = '\u0061';
输出c3的话,结果输出a(“/”代表转义)
转义字符
\t 制表符
\n 换行
布尔值扩展
if (flag == true){}
if (flag){}
两个if含义相等
类型转换
运算中,不同类型的数据先转化为同一类型,然后进行运算
低----->高
byte,short,char--->int --->long ---> float ---> double
尽量避免内存溢出
强制准换
(类型)变量名
高--低
自动转换
低--高
不需要任何操作
注意点
- 不能对布尔值进行转换
- 不能把对象类型转换为不相干的类型
- 在把高容量转换到低容量的时候,强制转换
- 转换的时候可能存在内存溢出,或精度问题
- 操作比较大的数,注意溢出问题(先转换,再计算<转换一个数就行>)
ps:JDK7:数字之间可以用下划线分割
变量
可以变换的量
必须声明其类型
最基本的存储单元,其要素包括变量名,变量类型和作用域
type varName [=value] [{, varName[= value]}];
//数据类型 变量名 = 值;可以用逗号隔开来声明多个同类型变量
每个变量都有类型,类型可以是基本类型,也可以是引用类型
变量作用域
类变量
static
实例变量
从属于对象;如果不自行初始化,这个类型的默认值(0 0.0 布尔值默认false,除了基本类型,其余都是NULL)
局部变量
必须声明和初始化值
常量
初始化后不能改变
常量名一般使用大写字符
final 常量名 = 值;
final double PI = 3.14;
final与static是修饰符,不存在先后顺序
命名规范
运算符
没有long时,整数类型默认为int
关系运算符返回为布尔值:true/false
++/--
自增/自减 一元运算符
第一个a++先给b赋值,b就是3,但这行的a++仍然要求自增,结束后a为4
++a就是先a自增为5,再赋值给c,c就是5
幂运算
3^2如下
double a = Math.pow(3, 2);
逻辑运算
+用来连接
位运算
&:与运算,全1为1,否则为0
|:或运算,全0为0,否则为1
^:异或运算,相同为0,否则为1
~:取反运算,完全不同
<<:左移运算,*2
右移运算:>>,/2
a += b; //a = a + b
a -= b; //a = a - b