【01.22】大数据 -- JAVA基础 P7-P16

复习:

  1. JAVA的跨平台:JVM是跨平台的前提,针对不同操作系统,有不同的JVM,JAVA语言是跨平台的但是JVM不是
  2. JAVA的技术结构:JAVASE,JAVAEE,JAVAME
  3. 入门程序:JAVA程序必须放在JAVA文件(后缀名是.java);一个JAVA文件中可以存放多个JAVA类,但只能有一个是公共类,用public修饰,要求java文件名和类名一致,每个java类在编译完成之后都会产生一个class文件
  4. 编译:javac -d 存放位置 要编译的java文件
  5. java命令,用于运行:java 包名.类名
  6. 关键字:java中有特殊含义的单词,一共有53个关键字(2个保留字,goto,const),所有的关键字都是小写的。
  7. 标识符:在java中自定义的名称----字母数字下划线 , 数 字 不 能 开 头 , 字 母 常 见 语 言 基 本 字 符 , 尽 量 避 免 使 用 ,数字不能开头,字母常见语言基本字符,尽量避免使用 使,大小写敏感,见名知意

注释

代码中用于解释说明的文字:注释
注释格式:

  1. 单行注释: //注释文字
  2. 多行注释:/*
    注释文字,多行注释
    */
  3. 文档注释:/*文档中的注释文字/ ------- 可以提取出来形成文档
    可以提取出来形成文档:javadoc HelloWorld.java
    在这里插入图片描述
    字面量:
    整数常量:所有整数
    小数常量:所有小数(带小数点就算)
    字符常量:一个字母,数字,符号用单引号标识起来,‘a’,‘9’,’ ',只有一对单引号不可以
    字符串常量:将一个或者多个字符用""标识起来,字符串常量,允许只有一对双引号
    布尔常量:true和false,判断条件成立/不成立,表示逻辑值
    空常量:null

进制
二进制:0b(0B)作为开头,0b1010,0B1010
八进制:要求以
0
作为开头,05表示八进制5,
十进制:没有指明默认十进制
十六进制:0-9,a,b,c,d,e,f(大小写不区分),要求以**0x(0X)**作为开头

小数:3.28
分成两部分:
整数部分单算:3–0b11
小数部分:0.28–0.282 = 0.56
0.56
2 = 1.12
0.122 = 0.24
0.24
2 = 0.48
0.482 = 0.96
0.96
2 = 1.92
0.92*2 = 1.84
3 = 0b11.0100011……
绝大部分小数不能精确表示

用于记录数据的容器:变量
需要规定数据的存储类型
定义变量:变量名,类型,数据(3要素)
变量定义:数据类型 变量名 = 数据;
int i = 5;
数据类型:整数,i变量名,5整数
JAVA中也允许先声明之后再赋值
eg: 定义三个整数:

int a;
int b;
int c;
int a,b,c;
double d;

无论是,还是;都是英文格式状态下的
变量必须先定义后使用
变量必须先有值后使用
变量在哪定义就在哪儿使用,以{}为准!

以二进制形式来存储数据,每一位二进制在内存中称为一位(bit)
简写为b,一字节=8位,1Byte = 8 bit 1B=8b
KB,MB,GB,TB
1024B = 1KB -> MB ->GB -> TB
100M: 100Mb = 12.5MB
3GB流量:3GB = 3000MB(通讯行业中认为1GB = 1000MB)通用惯例

基本数据类型&引用数据类型
java中提供的8种基本数据类型:
数值型:
1. 整数型:
byte – 字节型 – 一个字节 – -128~127
byte b1 = 25; (√)
byte b2 = 128; (×)
short – 短整型 – 2个字节 – -32768~32767
int – 整型 – 4个字节 – -231~231-1 默认为int类
long – 长整型 – 8个字节 – -263~263-1 – 需要在结尾添加一个l/L,long l = 2L, (建议用大写L)

public class TypeDemo{
	public static void main(String[] args){
		int i = 1_245_317_645 // 可以用_进行分位
		System.out.println(i);
	}
}

2.浮点型:
float – 单精度浮点 – 4个字节 – -1038~1038 – 需要在结尾添加f/F作为表示
double – 双精度浮点 – 8个字节 – -10308~10308 – java中默认为双精度double 类型

float f1 = 1.2f;
float f2 = 1.2F;
double d1 = 1.2;
//有时候会出现这种情况:
double d2 = 1.2d;
double d3 = 1.2D;
double d = 4e4;//若为16进制需要0x4e4,这里4e4表示4*10^4,表示科学计数法,也有大写写法4E4
double d = 0x5p3; //p表示十六进制的科学记数法  xpy表示x*2^y

char – 字符型 – 2个字节来存储 – 0~65535,共65536个字符

char c1 = 'a';
char c2 = '4';
char c3 = '\u20ac'; // 以utf-16格式存储。

字符在存储过程中需要按某种规则转化为数字,这种转化规则称之为编码,记录编码行程的表格形式称之为码表。
eg:
ACSII (0-127)
ISO-8859-1 ---- 西欧码表 ---- 1个字节存储1个字符 ‘a’
规定所有码表必须兼容西欧码表:无论那张码表,前256个字符是一样的而且钱256个字符永远只占1B;
gb2312 ---- 国标码 ---- gbk(兼容gb2312) ---- 2个字节1个字符 65536种字符,只能表示绝大部分的常见的简体汉字,以及部分繁体汉字。
unicode编码体系:
万国码体系 ---- 收录了常见语言的常见字符。
utf-8 ---- 3个字节1个字符 ---- 常见
utf-16 ---- 规定用2个字节存储1个字符 ---- JAVA中 char 字符默认编码为utf-16
eg:‘a’: 西欧码表:1B ---- GBK:1B ---- utf-8:1B ---- utf-16:1B
转义字符:
制表符:’\t’
换行符:’\r’(回车键光标挪到起点) ‘\n’(换行光标挪到下一行)
反斜杠:’\’ 表示一个
单引号:’’’,单引号里面’
双引号:’"’,单引号里面"
回车换行区别:当代没有区别,打字机中有区别。
布尔型
boolean ---- 布尔型 ---- true/false ---- 内存大小与JDK有关
java中的引用数据类型:数组[],类class,接口interface

数据类型的转换:

1. 自动类型转换/隐式转换
规律一:小的类型可以自动转化为大的类型
byte < short < int < long
float < double

byte b = 3;
int i = b;
/*
byte:占1个字节
int:占4个字节
转化一定没有问题
*/
int i = 7; long l = i;
float f = 3.57f; double d = f;
//byte 1B, short 2B, int 4B, long 8B, float 4B, double 8B, char 2B, bool;

long l = 10; // java 中整数默认为int,10为int类型,int一定可以自动转化为long类型
//一个整数在int的范围内,赋值给long类型可以不加l
long l = 23456782; //正确
long l = 3348723982; //错误,超过了int 范围
long l = 3348723982L; //正确

规律二:整数可以自动转化为小数(但可能产生精度损失)

int i = 123456789;
float f = i;
// 正确,但是会输出精度损失,例如:1.23456792E8
float f = 500; //正确,500是整数,默认为int,可以直接赋值给浮点类型f
float f = 400L; //正确

规律三:字符类型可以自动转化为整数

char c = 'd';
int i = c;
//没有问题
short s = 'a';
System.out.println(s);
char c = 97;
System.out.println(c);
//没有问题
short s = 'a';//a是一个字面量,确定的量,代码在编译的时候可以确定'a'的值是否在short的取值范围内,所以允许转化
char c = 97;//97是一个字面量,代码在编译的时候可以确定97的值是否在char的取值范围内,所以允许转化
char c = 'a';
short s = c;//c不是一个字面量,并不是一个确定的量,是一个变量,可能允许的范围在s允许的范围以外。在编译期间只能确定c是一个char类型的值,而不能确定具体指,在编译期间比对两个类型能否完全转化,发现char与short取值范围不完全重合,所以认为c会有超过short类型值得风险,因此不允许转化。
System.out.println(s);
//有问题!同理,char c = s;也会报错。

short 类型 2B char 类型 2B
short:-32768~32767
char:0~65535
并不是包含关系或完全重合。

无精度损失:
char -> int
byte -> short -> int -> long
float -> double
有精度损失:
long ->float
在这里插入图片描述

2. 强制类型转换/显示转换

int i = 5;
byte b = (byte)i; //表示将变量i强制转换为byte类型之后再赋值给变量b
System.out.println(b);
//正确,输出5

int i = 300;
byte b = (byte)i;
System.out.println(b);
/*编译通过,输出44
300 = 0b 00000000 00000000 00000001 00101100
0b00101100 = 4 + 8 + 32 = 44*/

大类型可以强制转化为小类型,但是转化时由于字节的损失所以数据可能不准确。

JAVA在CMD下中文报错信息出现乱码解决方案:

https://blog.csdn.net/qq_43710979/article/details/100784050
开始-> 右键计算机 ->属性 -> 高级系统设置 ->环境变量 -> 系统变量的部分点击新建
输入变量名:“JAVA_TOOL_OPTIONS”
输出变量值:"-Dfile.encoding=UTF-8"

public class OperatorDemo{
	public static void main(String[] args){
		//这片代码没问题,输出7
		int i = 3;
		int j = 4;
		int k = i + j;
		System.out.println(k);
		//这段代码有问题,提示如下:
		byte i = 3;
		byte j = 4;
		byte k = i + j; 
		System.out.println(k);
	}
}

从int转换到byte可能会有损失
在这里插入图片描述

1. byte short char 在参与运算时会自动提升为int

//正确代码:
public class OperatorDemo{
	public static void main(String[] args){
		/*想要byte i + byte j = byte k;
		自动提升为int i + int j = byte k;
		因此报错,所以需要强制类型转换*/
		byte i = 3;
		byte j = 4;
		byte k = (byte)(i + j); 
		System.out.println(k);
	}
}

同理,以下代码也需要强制转换

public class OperatorDemo{
	public static void main(String[] args){
		byte i = 3;
		i = i + 4
		System.out.println(i);
		//编译报错
	}
}
public class OperatorDemo{
	public static void main(String[] args){
		int i = 3 + 5;
		System.out.println(i);
		//打印输出8,并不报错
	}
}
public class OperatorDemo{
	public static void main(String[] args){
		byte i = 3 + 5;
		System.out.println(i);
		//打印输出8,也不报错,因为3和5是两个字面量
		//两个字面量参与运算的时候,JAVA为了提高效率在编译的时候会进行自动的计算过程。
		//编译完成后是 byte i = 3 + 5 ====== byte i = 8;
	}
}

2. java 是一门强类型语言,同一类型运算完成后结果是同一类型
小类型与大类型同时运算的时候,结果一定是大类型!
int / double = double

public class OperatorDemo{
	public static void main(String[] args){
		int i = 4500;
		i = i / 1000 * 1000;
		System.out.println(i);
		//输出4000
	}
}
public class OperatorDemo{
	public static void main(String[] args){
		int i = 4500;
		i = i / 1000.0 * 1000;
		System.out.println(i);
		//输出4500
	}
}

3. JAVA中小数是浮点数,并不能精确存储

public class OperatorDemo{
	public static void main(String[] args){
		double d1 = 3.29;
		double d2 = 2.98;
		double d = d1 - d2;
		System.out.println(d);
	}
}

在这里插入图片描述
编译的时候检查的是语法,例如下面的代码:

public class OperatorDemo{
	public static void main(String[] args){
		System.out.println(3/0);
	}
}

编译通过,但是运行会报错:
ArithmeticException
在这里插入图片描述

public class OperatorDemo{
	public static void main(String[] args){
		System.out.println(3.0/0);
	}
}

非零小数除以整数零:得到infinity或 -infinity
3.0/0 3/0.0
0/0.0 0.0/0 0.0/0.0 --NaN在这里插入图片描述
%取模运算(取余运算)
89 % 7 = 5
5 % 7 = 5
但是:
-89 % 7 = -5
-5 % 7 = -5
89 % -7 = 5
5 % -7 = 5
-89 % -7 = -5
-5 % -7 = -5
结果的符号和%左边数字有关:%左边为正,则结果为正
JAVA中还可以小数取余
3.2 % 2 = 1.2
5 % 1.4 = 0.8
5.2 % 1.7 = 0.1

自增++ / 自减–

public class OperatorDemo{
	public static void main(String[] args){
		int i = 5;
		++i;//i++
		System.out.println(i);//输出6
		--i;//i--
		System.out.println(i);//输出5
	}
}

++在前:先自增再参与后续运算
++灾后:先取值再自增

int i = 5int j = ++i;//i先自增为6,再赋值给J
int i = 5;
int j = i++;//现将i的值(5)取值,i自增为6,然后将5赋值给j
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值