Java基础
Java的特性
#简单性
#面向对象
#可移植性
#高性能
#分布式
#动态性
#多线程
#安全性
#健壮性
Java三大版本
#JAVA SE:标准版
桌面程序,控制台开发……
#JAVA ME:嵌入式开发
手机,小家电……
#JAVA EE:企业级开发
Web服务端,服务器开发……
Java注释
#单行注释
//haha
#多行注释
/*
haha*/
#文档注释
/**
*/
标识符
1.所有的标识符都应该以字母(A-Z or a-z)、美元符($)、或者下划线(_)开始
2.首字母之后可以是字母(A-Z or a-z)、美元符($)、下划线(_)或者数字的任何字符组合
3.不能使用关键字作为变量名或方法名
4.标识符是大小写敏感的
数据类型
#强类型语言
要求变量的使用要严格符合规定,所有的变量都必须先定义后才能使用
#弱类型语言
#Java的数据类型分为两大类
#基本数据类型比较值 引用类型比较地址
1)基本类型
数值类型
整数类型
byte(占1个字节) -128 - 127
short(占2个字节) -32768 - 32767
int(占4个字节)
long(占8个字节) long类型要在数字后面加一个L long number=10L
浮点类型
float(占4个字节) float类型要在数字后面加一个F float number=10.1L
double(占8个字节) 小数默认为double类型
boolean类型(占1位) true or false
2)引用类型
类
接口
数组
#字符串
String不是关键字,是类
//整数拓展
//进制 二进制0b 八进制0 十进制 十六进制0x
public class Demo01 {
public static void main(String[] args) {
int i1 = 0b110;
int i2 = 0110;
int i3 = 110;
int i4 = 0x110;
System.out.println("i1="+i1);//i1=6
System.out.println("i2="+i2);//i2=72
System.out.println("i3="+i3);//i3=110
System.out.println("i4="+i4);//i4=272
}
}
//浮点数拓展
public class Demo01 {
public static void main(String[] args) {
//浮点数拓展 银行业务怎么表示
//BigDecimal 数学工具类
//float 有限(有些东西除出来是无限的) 离散 舍入误差 接近但不等于
float f = 0.1f;//0.1
double d = 1.0/10;//0.1
System.out.println(f==d);//false
System.out.println(f);//0.1
System.out.println(d);//0.1
//d1数字太大不能精确比较 数据比较大的时候+1没有区别
//最好完全使用浮点数进行比较
float d1 = 2222222222222222222f;
float d2 = d1 + 1;
System.out.println(d1==d2);//true
}
}
//BigDecimal 数学工具类
//Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算
//因为不论是float 还是double都是浮点数,而计算机是二进制的,浮点数会失去一定的精确度。
//根本原因是:十进制值通常没有完全相同的二进制表示形式;十进制数的二进制表示形式可能不精确。只能无限接近于那个值
1、简介
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。
双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。
float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。
2、构造器描述
BigDecimal(int) 创建一个具有参数所指定整数值的对象。
BigDecimal(double) 创建一个具有参数所指定双精度值的对象。 //不推荐使用
BigDecimal(long) 创建一个具有参数所指定长整数值的对象。
BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象。//推荐使用
3、方法描述
add(BigDecimal) BigDecimal对象中的值相加,然后返回这个对象。
subtract(BigDecimal) BigDecimal对象中的值相减,然后返回这个对象。
multiply(BigDecimal) BigDecimal对象中的值相乘,然后返回这个对象。
divide(BigDecimal) BigDecimal对象中的值相除,然后返回这个对象。
toString() 将BigDecimal对象的数值转换成字符串。
doubleValue() 将BigDecimal对象中的值以双精度数返回。
floatValue() 将BigDecimal对象中的值以单精度数返回。
longValue() 将BigDecimal对象中的值以长整数返回。
intValue() 将BigDecimal对象中的值以整数返回。
//当double必须用作BigDecimal的源时
//1.Double.toString(double)转成String,然后使用String构造方法
//2.使用BigDecimal的静态方法valueOf
public class test {
public static void main(String[] args) {
BigDecimal b = new BigDecimal(2.333);//2.3330000000000001847411112976260483264923095703125
BigDecimal b1 = BigDecimal.valueOf(2.333);//2.333
BigDecimal b2 = new BigDecimal(Double.toString(2.333));//2.333
System.out.println(b);
System.out.println(b1);
System.out.println(b2);
BigDecimal a1 = new BigDecimal("8");
BigDecimal a2 = new BigDecimal("2");
System.out.println("a1+a2="+a1.add(a2));//a1+a2=10
System.out.println("a1-a2="+a1.subtract(a2));//a1-a2=6
System.out.println("a1*a2="+a1.multiply(a2));//a1*a2=16
System.out.println("a1/a2="+a1.divide(a2));//a1/a2=4
float f = 0.4f;
double d = 0.2;
BigDecimal f1 = new BigDecimal(Float.valueOf(f));
BigDecimal d1 = new BigDecimal(Double.valueOf(d));
System.out.println("f1*d1="+f1.multiply(d1));
// divide(BigDecimal,保留小数点后几位小数,舍入模式)
System.out.println("f1/d1="+f1.divide(d1,2,BigDecimal.ROUND_HALF_UP));
}
}
//舍入模式
ROUND_CEILING //向正无穷方向舍入
ROUND_DOWN //向零方向舍入
ROUND_FLOOR //向负无穷方向舍入
ROUND_HALF_DOWN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5
ROUND_HALF_EVEN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN
ROUND_HALF_UP //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6,也就是我们常说的“四舍五入”
ROUND_UNNECESSARY //计算结果是精确的,不需要舍入模式
ROUND_UP //向远离0的方向舍入
//字符拓展
public class Demo01 {
public static void main(String[] args) {
char c1 = 'a';
char c2 = '中';
System.out.println(c1);//a
System.out.println((int)c1);//97
System.out.println(c2);//中
System.out.println((int)c2);//20013
//所有的字符本质上还是数字
//编码 Unicode 2字节 0-65536
//转移字符
// \t 制表符
// \n 换行
System.out.println("Hello\tWorld!");
System.out.println("Hello\nWorld!");
//基本数据类型比较值 引用类型比较地址
String sa = new String("Hello World");
String sb = new String("Hello World");
System.out.println(sa==sb);//false
System.out.println(sa.equals(sb));//true
String sc = "Hello World";
String sd = "Hello World";
System.out.println(sc==sd);//true
}
}
类型转换
Java是强类型语言,所以要进行有些运算时,需要用到类型转换
小数优先级大于整数
byte,short,char -> int -> long -> float -> double
运算中,不同类型的数据先转化为同一类型,然后进行运算
强制类型
自动类型转换
public class Demo2 {
public static void main(String[] args) {
int i = 128;
//强制转换 (类型)变量名 高---低
byte b = (byte) i;//内存溢出
//自动转换 低---高
double d = i;
System.out.println(i);//128
System.out.println(b);//-128
/**
* 注意点:
* 1.不能对布尔类型进行转换 布尔按位的
* 2.不能把对象类型转换为不相干的类型
* 3.在把高容量
*/
}
}