基础知识
基本概括
本篇主要介绍:
- 编译基础准备阶段
- 关键字了解
- 数据(整数、浮点数)
- 数据类型的比较与转换
- 变量:类变量、实例变量、局部变量
- 常量
编译基础准备阶段
编译型:
Java文件——>class文件的过程;主要是文件全部翻译为计算机可以读的文件;
解释型:
class文件在解释器中运行读写的过程,按步骤进行;
IDEA
下载IDEA IDEA官网
可以自行百度:IDEA优化,工欲善其事,必先利其器!
关键字
Key | Words | |||
---|---|---|---|---|
abstract | assert | boolean | break | byte |
catch | char | class | const | continue |
do | double | else | enum | extends |
finally | float | for | goto | if |
import | instanceof | int | interface | long |
new | package | private | protected | public |
return | strictfp | short | static | super |
switch | synchronized | this | throw | throws |
teansient | try | void | volatile | while |
标识符注意点
●所有的标识符都应该以字母(Az或者a-z),美元符、或者下划线开始
首字符之后可以是字母(Az或者a-z),美元符、下划线或数字的任何字符组合
●不能使用关键字作为变量名或方法名。
●标识符是大小写敏感的
合法标识符举例:age、$ salary、_vaue、_1_value
●非法标识符举例:123abc、- salary、#abcpublic static void main(String[] args){ String 王者荣耀 = "最强王者"; System.out.println(王者荣耀) }
●可以使用中文命名,但是一般不建议这样去使用,也不建议使用拼音,很Low
数据
整数
整数进制主要有:二进制0b、八进制0、十进制、十六进制0x,用byte,short,int,long声明
拓展知识
- byte是有符号的8位类型,范围从**-128到127**
- short是一个有符号的16位类型。短类型变量的范围为**-32,768到32,767**
- int是有符号的32位类型,范围为**-2,147,483,648到 2,147,483,647** 。当在表达式中使用字节和短型值时,在求值表达式时将它们提升为int。
- long是一个有符号的64位类型。长型的范围是**-9,223,372,036,854,775,808至9,223,372,036,854,775,807**。表示一个大数时,在数字或文本后面附加一个大写或小写的L
代码展示
public class Demo01 {
public static void main(String[] args) {
//整数拓展: 二进制0b,八进制0,十进制,十六进制0x
int i = 10;
int i2 = 010; //八进制
int i3 = 0b10; //二进制
int i4 = 0x10; //十六进制
System.out.println(i); //10
System.out.println(i2); //8
System.out.println(i3); //2
System.out.println(i4); //16
}
}
浮点数
float:有限,离散,舍入误差,大约,接近单不等于
double:比较过程需要注意
数据比较【>、<正常,==需要关注】
代码展示
public class Demo01 {
public static void main(String[] args) {
//浮点数拓展:银行业务怎么表示?钱
//BigDecimal 数学工具类
//BigDecimal num = new BigDecimal("340000000");
//=========================================
//float 有限 离散 舍入误差 大约 接近但不等于
/* double
最好完全使用浮点数进行比较【重点】
*/
float f = 0.1f; //0,1
double d = 1.0/10.0;
System.out.println("f==d:"+(f==d));//false
float d1 = 12123312321f;
float d2 = d1 + 1;
System.out.println("d1==d2:"+(d1==d2));//true ***
System.out.println("=============================");
//=========================================
if (Double.compare(d,f)==0){
System.out.println("这里相等");
}else {
System.out.println("这里不相等");//执行这个
}
}
}
浮点类型比较:在 ***处执行明显是存在+1但是却显示相等,这里出现的相等,是因为由于精度问题,double/float比较相等也不能直接使用==,但是比较大小可以用<、>号。
double d1 = 0.1, d2 = 0.1;
if (d1 == d2) {}// 坏代码
if (Double.compare(d1, d2) == 0) {}// 好代码
if (Double.doubleToLongBits(d1) == Double.doubleToLongBits(d2)) {}// 好代码
if (Double.valueOf(d1).equals(d2)) {}// 好代码,1.5以上
变量作用域
类变量
实例变量
局部变量 static
public class Variable{
static int allClicks = 0; //类变量
String str = "helo world"; //实例变量
public void method(){
int i = 0; //局部变量
}
}
代码举例
public class Demo04 {
//属性:变量
//类变量 static
static double salary = 2500;
//实例变量:方法外面,类里面【从属于对象】
// 如果不进行初始化,输出为这个类型的默认值
// 数值:0 0.0; 布尔值:false 除了基本类型,其余:null
String name;
int age;
//main方法
public static void main(String[] args) {
//局部变量:存活于方法,终止于方法,不可移植
// 必须声明和初始化值
int i = 10;
System.out.println(i);
//变量类型 变量名字 = new demo04();
Demo04 demo04 = new Demo04();
System.out.println(demo04.age);
System.out.println(demo04.name);
//类变量 static
System.out.println(salary);
}
}
数据类型的转换
数据类型转换规则:高->低(强制转换);低->高(自动转换)
低------------------------------------高
byte,short,char -> int -> long -> float ->double
代码展示
public class Demo02 {
public static void main(String[] args) {
//类型转换
//低------------------------------------------高
//byte,short,char -> int -> long -> float ->double
//=====================================================
int i = 128;
byte c = (byte)i; //数据溢出
double b = i;
//强制转换 (类型)变量名 高——>低
//自动转换 低——>高
System.out.println(i);//128
System.out.println(c);//-128 数据溢出
System.out.println(b);//128.0
System.out.println("=========================");
System.out.println((int)23.7);//23
System.out.println((int)-232.7f);//-232
System.out.println("=========================");
char e = 'a';
int d = e+1;
System.out.println(d); //98
System.out.println((char) d); //b
System.out.println("=========================");
//操作比较大的时候注意移除问题
//JDK7的新特性,数字之间可以用下划线分割
int money = 20_0000_0000;
int year = 20;
int total = money*year;
long total2 = money*year;
long total3 = money*((long)year);//此处需要强制转换,否则会溢出
System.out.println(total); //溢出
System.out.println(total2); //溢出
System.out.println(total3); //正确
}
}
注意点:
1、不能对布尔值进行转换;
2、不能把对象类型转换为不相干的类型;
3、在把高容量转化为低容量需要【强制转换】
4、转换的时候可能存在内存一处,或者精度问题!
常量
final代码展示
public class Demo05 {
//常量:大写字母表示
//修饰符,不存在先后顺序【变量类型前面都为修饰符】
static final double PI = 3.14;
final static double LEN = 3.14;
public static void main(String[] args) {
System.out.println(PI);
System.out.println(LEN);
}
}
相关知识点都在代码注释中。