当前位置: 首页 > ops >正文

JavaSE基础

目录

1.数据类型与变量

1.1 字面常量

1.2 数据类型

1.3 变量

1.3.1 变量的概念

1.3.2 语法格式

1.3.3 变量类型

1.4 类型转换

1.4.1 自动类型转换(隐式)

1.4.2 强制类型转化(显式)

1.5 类型提升

1.5.1 int与long之间

1.5.2 byte与byte类型

1.6 字符串类型

1.6.1 +的作用

1.6.2 int 转 String

1.6.3 String 转 int

2. 运算符

2.1 算数运算符

2.2 增量运算符

2.3 自增或自减运算符

2.4 关系运算符 

2.5 逻辑运算符 

2.6 位运算符

2.7 移位运算符 

2.8 条件运算符(也叫三目运算符)

2.9 运算符优先级

3. 程序逻辑控制

 3.1 顺序结构

3.2 选择结构

3.2.1 if语句

3.2.2 switch语句

3.3 循环结构

3.3.1 while循环

3.3.2 for循环

3.3.3 do-while循环

3.4 break和continue


1.数据类型与变量

1.1 字面常量

代码 System.out.println("Hello,World"); 中的 Hello,World 就是一个字面常量。

常量就是程序运行期间,固定不变的量。比如说:一年有12个月,12就是常量。

字面常量的分类:

  1. 字符串常量:由" "括起来的,例如:"Hello,World","haha"。
  2. 整型常量:程序中编写的整数。例如:10,30。
  3. 浮点数常量:程序中编写的小数。例如:3.14。
  4. 字符常量:由' '括起来的,例如:‘a','c'。
  5. 布尔常量:true或false。
  6. 空常量:null

注意:字符串、整型、浮点型、字符型以及布尔型,在Java中都称为数据类型。

1.2 数据类型

在Java中数据类型分为两类:基本数据类型 引用数据类型

基本数据类型有四类八种:

整型:byte  short   int    long

浮点型:fioat   double

字符型:char

布尔型:boolean

下面是不同类型占用的字节数和范围:

注意:

不论是在16位系统还是32位系统,int都占用4个字节,long都占8个字节

整形和浮点型都是带有符号的

整型默认为int型,浮点型默认为double型

字符串(string) 属于引用类型。

1.3 变量

1.3.1 变量的概念

对于一些经常改变的内容,在Java程序中,称为变量。而数据类型就是用来定义不同种类变量的。

1.3.2 语法格式

定义一个变量的格式是:

数据类型   变量名 = 初始值;

例如: 

byte a = 1;
short b = 2;
int c = 3;
long d = 4;
float e = 5.5;
double f = 6.6;
char g = 's';
boolean = true;

当然定义同一类型多个变量时候可以在同一行定义,例如:

int a = 1,b = 2,c = 3;

1.3.3 变量类型

整型变量

类型范围:-2^31 ---- 2^31-1

int a = 10;
//求int类型的范围:
System.out.println(Integer.MIN_VALUE);
System.out.println(Integer.MAX_VALUE);

注意事项:

  • int类型不论在任何系统上都是4个字节。
  • 推荐在定义的同时直接初始化。
  • 在定义int类型时的值,不能超过int类型的范围,否则会溢出,导致编译错误。
  • 定义变量后一定要赋初值,负责会编译错误。
  • int类型的包装类是:Integer。

长整型类型

类型范围:-2^63 ----- 2^63-1

long a = 10L;//求long类型的范围:
System.out.println(Long.MIN_VALUE);
System.out.println(Long.MAX_VALUE);

注意事项:

  • long类型不论在任何系统上都是8个字节。
  • 长整型变量的初始值后加L或者l,推荐加L。
  • long的包装类是:Long。

短整型类型

类型范围:-2^15 ---- 2^15-1

short a = 10;//求long类型的范围:
System.out.println(Short.MIN_VALUE);
System.out.println(Short.MAX_VALUE);

注意事项:

  • short类型不论在任何系统上都是2个字节。
  • short的包装类是:Short。

字节型类型

类型范围:-128 ----- 127

byte a = 10;

注意事项:

  • 1. byte在任何系统下都占1个字节。
  • 2. 字节的包装类是:Byte。

双精度浮点型

浮点数用二进制数并不能明确表示,而是无限趋近于这个数,所以在计算1.2 * 1.2结果并不等于1.44,而是无限接近于这个数。

double a = 3.14;

注意事项:

  • 浮点数的默认数据类型是double类型。
  • double类型在任何系统下都占8个字节。
  • double 类型的内存布局遵守 IEEE 754 标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数, 势必会存在一定的精度误差,因此浮点数是个近似值,并不是精确值。
  • double类型的包装类是:Double。

单精度浮点型

因为浮点数是一个近似值,且默认类型是double类型,所以在定义一个float类型的变量时,需要在小数后面加上字母f或者F,来表示float类型。

float a = 3.14F;

注意事项:

  • float类型在任何系统下都占8个字节。
  • float类型的包装类是:Float。

字符型

char a = 'h';

注意事项:

  • Java 中使用 单引号 + 单个字母 的形式表示字符字面值。
  • char类型在任何系统下都占2个字节。
  • 在Java中使用Unicode编码方式,再加上大小是2个字节,可以表示的字符范围更多,汉字也可以表示,一个汉字占2个字节。
  • char类型的包装类是:Character。

布尔型

boolean a = true;

注意事项:

  • 布尔类型只有两种取值:true和false,true表示真,false表示假。
  • Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法。
  • Java虚拟机规范中,并没有明确规定boolean占几个字节,也没有专门用来处理boolean的字节码指令,在 Oracle公司的虚拟机实现中,boolean占1个字节。
  • boolean类型的包装类是:Boolean。

1.4 类型转换

Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有教严格的校验。

Java中类型分为两种自动类型转换(隐式)强制类型转换(显式)

1.4.1 自动类型转换(隐式)

        自动类型转换即:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。

特点:数据范围小的转为数据范围大的时会自动进行。

int a = 10;
long b = 20L;//可以转换,编译器会自动将int类型提升到long类型。
b = a;//不可以转换,因为长整型是8个字节,整型是4个字节,会超过存储范围,导致数据丢失。
a = b; //没有超过byte的范围,编译器自动将int类型转换为byte类型。
byte c = 20;//超过了byte的范围,编译器会报错。
byte c = 128;

1.4.2 强制类型转化(显式)

        强制类型转换:当进行操作时,代码需要经过一定的格式处理,不能自动完成。

特点:数据范围大的到数据范围小的。

int a = 10;
long b = 20L;
double c = 3.14;
byte d = 30;
int e = 128;//需要强制类型转换,否则编译报错。
a = (int)b;//需要强制类型转换,小数点后面的全部删去。
a = (int)c;//e的值超过byte类型的范围,但编译的时候不会报错,因为编译器是在运行时才知道变量的值的,可以通过显 //示转化。
d = (byte)e;

注意事项:

1. 不同数据类型的变量之间转换, 表示范围更小的类型能隐式转换成范围较大的类型。

2. 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失。

3. 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查。

4. 强制类型转换不一定能成功,不相干的类型不能互相转换。

5. 建议在安全的情况下进行强制类型转换。

1.5 类型提升

不同类型的数据之间相互运算时,数据类型小的会被提升到数据类型大的。

1.5.1 int与long之间

int 类型会被提升到 long类型。

int a = 10;
long b = 20L;//报错,因为int类型+long类型,会把int类型转换为long类型,最后算出的结果是long类型。
int c = a + b;//正确
long d = a + b;

1.5.2 byte与byte类型

byte a = 10;
byte b = 20;//报错
byte c = a + b;//正确
int d = a + b;
long e = a + b;

        上面代码a和b会先提升到整型,再运算,结果是整型。

        由于算术运算是在CPU里面进行的,而CPU里面按照4个字节从内存里面读取数据,为了在硬件上实现方便,低于四个字节的数据类型(byte和short)类型都会先提升到4字节再进行运算。

总结:

1. 对于不同类型间的混合运算,范围小的会先提升到范围高的再参与运算。

2. 对于小于4个字节的类型,会先提升到4个字节,再参与运算。

1.6 字符串类型

1.6.1 +的作用

String a = "hello";
String b = "world";//字符串类型可以拼接
System.out.println(a+b);
//打印出来是helloworld

当+运算符的两个运算数中有一个或者两个是字符串时,+作用是拼接,当两个运算数是整型时,就是加法运算:

int a = 10;
int b = 20;
//拼接
System.out.println("c = "+ a + b);
//运行结果是:c = 1020
//第一个+是拼接作用,第二个+也是拼接作用//加法System.out.println(a + b +"= c");
//运行结果是:30 = c
//第一个+是加法运算,第二个+是拼接作用

1.6.2 int 转 String

//int 转 String//方法1
int a = 123;
String b = a + " ";
System.out.println(b);
//运行结果:123 (字符串)//方法2
System.out.println(String.valueOf(a));
//运行结果:123 (字符串)

1.6.3 String 转 int

Sting a = "123";
int b = Integer.valueOf(a);
System.out.println(b+1);
//运行结果:124

2. 运算符

2.1 算数运算符

+和-运算符

进行数学加法运算和减法运算

除法运算符 /

int a = 3;
int b = 2;System.out.println(a/b);
//运行结果为:1
//Java中除法运算向下取整。//如果要保留小数位置,则至少一个操作数是浮点型。
a * 1.0 / b;
(a * 1.0) / (b * 1.0);

取模操作符 %

在Java中不仅可以对整数取模,还可以对浮点数取模。

注意:当两侧操作数类型不一致时,向类型范围大的类型转换再运算。

除法和取模运算右操作数不能为0;

2.2 增量运算符

包含 += ,-=,*=,/=,%=

 a += 2;                  
// 相当于 a = a + 2a -= 1;                  
// 相当于 a = a - 1a *= 3;                  
// 相当于 a = a * 3a /= 3;                  
// 相当于 a = a / 3a %= 3;                 
// 相当于 a = a % 2

2.3 自增或自减运算符

自增运算符++和自减运算符--,它们都分为前置和后置。

int a = 10;
int b = a++;System.out.println(a);//后置++运行结果是:11
System.out.println(b);//后置++运行结果是:10int c = 20;
int d = ++c;
System.out.println(c);//前置++运行结果是:21
System.out.println(d);//前置++运行结果是:21

自减同理。

注意:

如果单独使用,【前置++】和【后置++】没有任何区别。

如果混合使用,【前置++】先+1,然后使用变量+1之后的值,【后置++】先使用变量原来的值,表达式 结束时给变量+1。

只有变量才能使用自增/自减运算符,常量不能使用,因为常量不允许被修改。

2.4 关系运算符 

关系运算符有 > , < , != , == , >= , <= ,其计算结果只有两种true或者false。

注意:

当需要多次判断时,不能连着写,比如:3 < a < 5,Java程序与数学中是有区别的。

2.5 逻辑运算符 

逻辑运算符有 && , || , ! , 运算结果都是boolean类型。它们的操作数都必须是布尔表达式,布尔表达式就是返回值是布尔类型的表达式。

表达式1 && 表达式2  逻辑与 (&&) 运算规则:

表达式1 || 表达式2  逻辑或(||) 运算规则:

!表达式  逻辑非(!)运算规则:

短路求值 :

&& 和 || 遵守短路求值的规则。

逻辑&&,当第一个表达式返回值为false时,第二个表达式就不用再运算了。最后结果为false。

逻辑||,当第一个表达式返回值为true时,第二个表达式就不用再运算了。最后结果为true。

如果&,|,运算结果也为boolean类型,也属于逻辑运算,但不符合短路求值规则。 

2.6 位运算符

位运算符有 按位与(&),按位或(|),按位异或(^),按位取反(~),它们的操作对象都是内存中补码的二进制位数。下面为了方便,就用8位来表示补码。

2.6.1 按位与(&)

运算规则:两个操作数对应的补码的二进制位数,有0则为0,例如:

11的二进制补码为:                        0000 1011

13的二进制补码为:                        0000 1101

11 & 13 的结果二进制补码是:          0000 1001 = 9

2.6.2 按位或(|)

运算规则: 两个操作数对应的补码的二进制位数,有1则为1,例如:

11的二进制补码为:                        0000 1011

13的二进制补码为:                        0000 1101

11 | 13 的结果二进制补码是:            0000 1111 = 15

2.6.3 按位异或(^)

运算规则:两个操作数对应的补码的二进制位数,相同为0,不同为1,例如:

11的二进制补码为:                         0000 1011

13的二进制补码为:                         0000 1101

11 ^ 13 的结果二进制补码是:            0000 0110 = 6

运算拓展: a ^ 0 = a   ,   a ^ a = 0   ,   a ^ b ^ c = a ^ c ^ b

2.6.4 按位取反(~)

运算规则:一个操作数对应的补码的二进制位数,取相反的值,例如:

13的二进制补码为:                        0000 1101

~ 13 的结果二进制补码是:               1111  0010  = -14

2.7 移位运算符 

移位运算符包括 左移操作符(<<), 右移操作符(>>) ,无符号右移操作符(>>>),它们的操作数是内存中的补码二进制数。

2.7.1 左移操作符(<<)

运算规则:向左移动一位,末尾补0 。 例如:

13的二进制补码为:                        0000 1101

<<13 的结果二进制补码是:            0001 1010   

2.7.2 右移操作符(>>)

运算规则:向右移动一位,开头补符号位。例如:

13的二进制补码为:                        0000 1101

>>13 的结果二进制补码是:            0000 0110

-13的二进制补码为:                        1000 1101

>>-13 的结果二进制补码是:            1100 0110

2.7.3 无符号右移操作符(>>>)

运算规则:向右移动一位,开头补0。例如:

-13的二进制补码为:                        1000 1101

>>-13 的结果二进制补码是:            0100 0110

2.8 条件运算符(也叫三目运算符)

条件运算符格式:表达式1 ?表达式2 :表达式3 

运算规则:

当 表达式1 结果为true,执行 表达式2。

当 表达式1 结果为false,执行 表达式3。

表达式2和表达式3必须是同类型,除非两者能发生隐式类型转化。

2.9 运算符优先级

运算符之间存在优先级,我们不用刻意去记,只用在编写代码的时候用括号来区分那个先运行,那个后运行就行,这样既方便阅读,也有助于记忆。

3. 程序逻辑控制

 3.1 顺序结构

顺序结构就是按照顺序依次去执行每条语句。例如:

public class test1 {public static void main(String[] args) {System.out.println("aaa");System.out.println("bbb");System.out.println("ccc");}
}

上面按顺序输出语句。

3.2 选择结构

选择结构就是根据条件去选择执行的语句,在Java中提供了两个语句来实现。

3.2.1 if语句

下面是if语句的三种形式:

if(布尔表达式){语句;
}
if(布尔表达式){语句1;}else{语句2;}
if(布尔表达式1) {语句1;}else if(布尔表达式2){语句2;}else{语句3;}

注意:

if后面的判断条件必须是布尔表达式。

会选择其中一个语句执行。

3.2.2 switch语句

下面是switch语句的基本形式:

switch(表达式){case 常量1:{break;}case 常量2:{break;}default:{break;}}

上面表达式不能是 long类型,boolean类型,float类型,double类型四种类型。

default 是不满足上面的条件执行的语句。

3.3 循环结构

循环结构有三种:while();循环,for();循环,do-while();循环。

3.3.1 while循环

基本形式:

while(循环条件){语句;}

while后面的循环条件必须是布尔表达式。

3.3.2 for循环

for(语句1;语句2;语句3){执行语句;}

语句1是循环条件的初始值, 语句2必须是布尔表达式,是循环的判断条件, 语句3是循环值的变化条件。如果语句2返回true,则执行语句。

3.3.3 do-while循环

do{执行语句;}while(循环条件);

do-while循环是先执行一次语句,再进行判断。

3.4 break和continue

break和continue都是用在循环里面的,作用是跳出循环。

break是直接跳出循环,后续循环语句也不再执行,

下面代码在i等于3时,直接跳出循环,后续不再打印。

public static void main(String[] args) {int i = 1;for(i = 1;i <= 5;i++){if(i == 3){break;}System.out.println(i);}
}

continue是跳过本次循环,后续循环语句继续执行。

下面代码在i 等于3时,跳过打印3,继续打印后面数字。

public static void main(String[] args) {int i = 1;for(i = 1;i <= 5;i++){if(i == 3){continue;}System.out.println(i);}
}

http://www.xdnf.cn/news/5433.html

相关文章:

  • python: 为项目创建单独的虚拟环境步骤
  • QSS样式表的选择器
  • 蓝牙RFCOMM协议概述
  • 第二十一节:图像金字塔-高斯金字塔
  • TTS-Web-Vue系列:移动端侧边栏与响应式布局深度优化
  • OSCP备战-kioptrixvm3详细解法
  • [Java实战]Spring Boot 中Starter机制与自定义Starter实战(九)
  • Linux为啥会重新设置中断请求号与中断向量号之间的关系?
  • vector--OJ1
  • 【外网下载Jar包】
  • AI技术驱动SEO关键词智能布局
  • go程序编译成动态库,使用c进行调用
  • linux--------------Ext系列⽂件系统(下)
  • QOwnNotes:功能强大的跨平台笔记应用程序
  • FreeRTOS静态任务的创建、删除和软件定时器的开启(尚硅谷学习笔记)
  • 监控易一体化运维:任务计划管理的关键作用
  • 王道计算机网络知识点总结
  • 动态路由实现原理及前端控制与后端控制的核心差异
  • Linux:43线程封装与互斥lesson31
  • 前端Web开发HTML5+CSS3+移动web(基础-flex)
  • 基于Python的网络电子书阅读系统
  • 在Python中计算函数耗时并超时自动退出
  • 英语听力口语词汇--2.宣传类
  • 【时时三省】(C语言基础)字符数组
  • 关于TIAV20 PLCSIM仿真错误的原因
  • java中的io流
  • 专题一:汉诺塔问题:递归算法的精妙解析
  • PyGame游戏开发(含源码+演示视频+开结题报告+设计文档)
  • 【LwIP源码学习6】UDP部分源码分析
  • [思维模式-28]:《本质思考力》-8- 两种相反的构建与解构系统的思维模式:①自顶向下的分解、牵引;②自底向上的堆叠、聚合