Java基础知识详细介绍01
mhr18 2025-01-05 18:58 17 浏览 0 评论
0、Java工具包术语
术语名称 | 缩写 | 解释 |
Java Development Kit | JDK | 编写 Java 程序的程序员使用的软件 |
Java Runtime Environment | JRE | 运行 Java 程序的用户使用的软件 |
Server JRE | 在服务器上运行 Java 程序的软件 | |
Standard Edition | SE | 用于桌面或简单服务器应用的 Java 平台 |
Enterprise Edition | EE | 用于复杂服务器应用的 Java 平台 |
Micro Edition | ME | 用于手机和其他小型设备的 Java 平台 |
Java FX | 用于图形化用户界面的一个替代工具包,在 Oracle 的 Java SE 发布版本中提供 | |
OpenJDK | Java SE的一个免费幵源实现,不包含浏览器集成或 Java FX | |
Java 2 | J2 | 一个过时的术语,用于描述1998年?2006年之间的 Java 版本 |
Software Development Kit | SDK | 一个过时的术语,用于描述1998年~2006年之间的 JDK |
Update | u | Oracle的术语,表示 bug 修正版本 |
NetBeans | Oracle 的集成开发环境 | |
1、Java程序简单规范
1)Java 区分大小写,即对大小写敏感;
2)类名只能是下划线和字母开头,其后可以是下划线、字母和数字;
3)类名命名规范需符合驼峰标识法;
2、三种注释方式
1)// ,行注释;
2)/* */,多行注释;
3)/** */,多行注释,会生成 javadoc 文档;
3、基础数据类型
1)java 中整型范围与平台机器无关;
2)c++ 中整型与机器有关,16位和32位整型范围是不一样的;
3.1、整型(有4种)
类型 | 存储 | 取值范围 |
byte | 1个字节(8位) | |
short | 2个字节(16位) | |
int | 4个字节(32位) | |
long | 8个字节(64位) |
1)long 类型需加后缀 L 或 l,小于 int 类型最大值时可以不使用后缀,超过 int 类型最大值时必须加上后缀 L 或 l;
int 类型最大值:2147483647;
2)十六进制需加前缀 0x 或 0X;
3)八进制需加前缀 0;
3)二进制需加前缀 0b 或 0B;
4)数字之间可以加下划线,让人易懂,编译器编译的时候会自动去掉下划线;
下划线不能加在数字最前或最后;
3.2、浮点型(有2种)
类型 | 存储 | 取值范围 |
float | 4个字节 | (小数点有效位数是6~7位) |
double | 8个字节 | (小数点有效位数是15位) |
1)float 类型数值需加后缀 F 或 f,该类型很少使用,不加后缀默认是 double 类型;
2)double 类型数值可以加后缀 D 或 d;
3)数字之间可以加下划线,让人易懂,编译器编译的时候会自动去掉下划线;
下划线不能加在数字最前或最后;
4)可以十六进制表示浮点型,0x1.0p-3,p表示指数 2,3 表示次方;
0x1.0p-3 表示0x1 * 2的负3次方
0x1.0p3 表示0x1 * 2的3次方
0xap-3 表示0xa * 2的3次方
5)三个常量
正无穷大,Double.POSITIVE_INFINITY / Float.POSITIVE_INFINITY
负无穷大,Double.NEGATIVE_INFINITY / Float.NEGATIVE_INFINITY
不是数字 NaN(Not-a-Number),Double.NaN / Float.NaN
isInfinite(a) / isFinite(a) / Double.isNaN(0.0/0)
3.3、char类型(最好不要使用)
1)用单引号括起来;
2)可以使用十六进制表示
3)\u 是转义字符;
3.4、boolean类型
1)两种可选值true / false;
4、变量
4.1、变量命名规范
1)由字母和数字组成,字母包括一些26个字母之外的字符;
2)如何判断 Unicode 字符是 java 中的字母,使用如下方法:
Character.isJavaIdentifierStart('@')
Character.isJavaIdentifierPart('@')
3)不要在代码中使用 $ 符号来声明变量名称,尽管是可以的;
4)变量名称大小写敏感;
4.2、变量初始化
1)变量需要初始化才能使用;
4.3、常量
1)使用 final 关键字修饰常量,final 表示变量只能赋值一次,赋值后不能再被修改了,也就是常量了;
2)常量名称一般大写;
3)类常量,使用 static final 关键字修饰;
类常量需定义在类中,不能定义在方法内;
5、运算符
1)算术运算符:加(+) 、减(-)、乘(*)、除(/)、求余(% 也叫取模);
2)进行除(/)运算时:
两个操作数都是整型则是整数除法;
两个操作数有一个是浮点型时,表示浮点除法;
3)strictfp 关键字,表示采用最严格的计算;
strictfp 关键字修饰在方法上时,表示方法内的计算都是采用最严格的计算;
strictfp 关键字修饰在类上时,表示该类中的方法都是采用最严格的计算;
5.1、数学函数与常量
1)java.lang.Math 类
2)java.lang.StrictMath 类
5.2、数值类型之间的转换
1)实心箭头表示无信息丢失的转换;
2)虚线箭头表示可能会有精度损失的转换;
3)两个数值进行二元操作,会先自动转换为同一类型再计算;
5.3、强制类型转换
1)强制类型转换,会将小数部分截断将浮点值转换为整型;
2)对浮点数进行四舍五入,得到最接近的整型;
3)对浮点型数据进行加减乘除计算,小数点前面的 0 可以不写;
5.4、结合赋值和运算
5.5、自增、自减
1)前缀形式:++n / --n,先计算再使用;
2)后缀形式:n++ / n--,先使用再计算;
3)不建议在运算中使用自增、自减运算,容易混淆;
5.6、关系和 boolean 运算符
== / != / > / >= / < / <= / &&(短路与) / ||(短路或)
三目运算符;
5.7、位运算符
1)可以把整型用二进制来表示,能够很清楚的看懂位运算;
2)& 运算符:两个整数进行 &(与)运算,需对应的二进制位都是 1 计算的位值才为 1,其他情况都是 0;
也可用作与运算,类似 &&(短路与),只不过 & 运算符两边都会计算;
3)| 运算符:两个整数进行 |(或)运算,需对应的二进制位有一个是 1 计算的位值才为 1,都是 0 位值才是 0;
也可用作或运算,类似 ||(短路或),只不过 | 运算符两边都会计算;
4)^ 运算符:异或运算,对应的二进制位值相同则为 0,不同则为 1;
5)整型转二进制的方法,Integer.toBinaryString(13)
6)介绍 ~ 非运算之前,先了解原码、反码、补码;
int 类型是32位,表示二进制时有32位;
long 类型是 64 位,表示二进制时有 64 位;
> 二进制前面的 0 不显示,左边第一位是符号位,1表示负数,0表示正数;
> 正数 5 对应的:
原码:00000000 00000000 00000000 00000101
反码:00000000 00000000 00000000 00000101(和原码一样)
补码:00000000 00000000 00000000 00000101(和原码一样)
> 负数 -5 对应的:
原码:10000000 00000000 00000000 00000101
反码:11111111 11111111 11111111 11111010(除符号位外各位在原码基础上取反)
补码:11111111 11111111 11111111 11111011(反码+1)
> 计算机内部是使用补码来存储和表示值的;
> 计算机硬件只有加数器,正数和负数、负数和负数相加时使用补码二进制实现加减计算;
7)~ 运算符,非运算,原位取反;
非运算计算过程:
1)正数 3 的补码:00000000 00000000 00000000 00000011
2)非运算原位取反:11111111 11111111 11111111 11111100(补码)
3)补码对应多少整型数值呢?自解析:
补码转反码:11111111 11111111 11111111 11111011(补码-1)
反码转原码:10000000 00000000 00000000 00000100(符号位不变)
我们发现原码对应的是整型数值 -4;
8)<< 运算符,位左移,右边补0
> 正数左移,2 << 3 = 16(相当于在2的基础上扩大了2的3次方倍,即2*8=16)
正数左移,2 << 3 = 16(相当于在2的基础上扩大了2的3次方倍,即2*8=16):
2 的补码:00000000 00000000 00000000 00000010(与原码一致)
左移 3 位:00000000 00000000 00000000 00010000
> 负数左移,-2 << 3 = -16(相当于在-2的基础上扩大了2的3次方倍,即-2*8=16)
负数左移,-2 << 3 = -16:
-2的原码:10000000 00000000 00000000 00000010
-2的反码:11111111 11111111 11111111 11111101
-2的补码:11111111 11111111 11111111 11111110
左移 3 位的补码:11111111 11111111 11111111 11110000
对应反码:11111111 11111111 11111111 11101111
对应原码:10000000 00000000 00000000 00010000
> 移动位数需要先进行 32 位取模,即求余(long 类型需要 64 位取模);
9)>> 运算符,位右移;
> 正数右移,125 >> 3 = 15,左边补 0;
> 负数右移,-125 >> 3 = -16,左边补 1;
10)>>> 运算符,无符号位右移,正负数都是左边补 0;
? 正数右移,125 >> 3 = 15,左边补 0
? 负数右移,-125 >> 3 = -16,左边补 0
5.8、括号与运算符优先级
1)不使用括号时,是按照优先级来计算的;
2)同一级别的运算符是按出现的顺序从左至右进行计算的,右结合运算符除外;
3)右结合运算符是先计算右边的;
6、Math 类和 StrictMath 类
6.1、random() 方法
1)随机返回 [0, 1) 之间的 double 类型的值;
6.2、floor() 方法
1)Math.floor(1.2) 向下舍取整,保留一位小数;
6.3、floorDiv() 方法
1)求商,Math.floorDiv(13, 3) 求商,返回 int 或 long 型,下舍取整;
6.4、floorMod() 方法
1)求余,Math.floorMod(17, 6),求余;
6.5、其他方法
public static void main(String[] args) {
int abs = Math.abs(-10);
System.out.println("Math.abs(-10) 绝对值=" + abs);
int addExact = Math.addExact(20, -3);
System.out.println("Math.addExact(20, -3) 两数相加=" + addExact);
double ceil1 = Math.ceil(-1.4);
double ceil2 = Math.ceil(-1.5);
double ceil3 = Math.ceil(1.5);
double ceil4 = Math.ceil(1.4);
System.out.println("Math.ceil(-1.4) 返回大于或等于指定浮点数中,最小的整数对应的浮点数=" + ceil1);
System.out.println("Math.ceil(-1.5) 返回大于或等于指定浮点数中,最小的整数对应的浮点数=" + ceil2);
System.out.println("Math.ceil(1.5) 返回大于或等于指定浮点数中,最小的整数对应的浮点数=" + ceil3);
System.out.println("Math.ceil(1.4) 返回大于或等于指定浮点数中,最小的整数对应的浮点数=" + ceil4);
double floor1 = Math.floor(-1.4);
double floor2 = Math.floor(-1.5);
double floor3 = Math.floor(1.5);
double floor4 = Math.floor(1.4);
System.out.println("Math.floor(-1.4) 返回小于或等于指定浮点数中,最大的整数对应的浮点数=" + floor1);
System.out.println("Math.floor(-1.5) 返回小于或等于指定浮点数中,最大的整数对应的浮点数=" + floor2);
System.out.println("Math.floor(1.5) 返回小于或等于指定浮点数中,最大的整数对应的浮点数=" + floor3);
System.out.println("Math.floor(1.4) 返回小于或等于指定浮点数中,最大的整数对应的浮点数=" + floor4);
int floorDiv1 = Math.floorDiv(17, 5);
int floorDiv2 = Math.floorDiv(-17, 5);
System.out.println("Math.floorDiv(17, 5) 返回小于或等于代数商中,最大的整数=" + floorDiv1);
System.out.println("Math.floorDiv(-17, 5) 返回小于或等于代数商中,最大的整数=" + floorDiv2);
int floorMod1 = Math.floorMod(17, 5);
int floorMod2 = Math.floorMod(-17, 5);
System.out.println("Math.floorMod(17, 5) 取模公式[x - (floorDiv(x, y) * y)],结果=" + floorMod1);
System.out.println("Math.floorMod(-17, 5) 取模公式[x - (floorDiv(x, y) * y)],结果=" + floorMod2);
int incrementExact1 = Math.incrementExact(17);
int incrementExact2 = Math.incrementExact(-17);
System.out.println("Math.incrementExact(17) 返回指定参数加+1=" + incrementExact1);
System.out.println("Math.incrementExact(-17) 返回指定参数加+1=" + incrementExact2);
int max1 = Math.max(18, 17);
int max2 = Math.max(-18, 17);
int max3 = Math.max(-18, -17);
System.out.println("Math.max(18, 17) 取最大值=" + max1);
System.out.println("Math.max(-18, 17) 取最大值=" + max2);
System.out.println("Math.max(-18, -17) 取最大值=" + max3);
int multiplyExact1 = Math.multiplyExact(3, 5);
int multiplyExact2 = Math.multiplyExact(3, -5);
int multiplyExact3 = Math.multiplyExact(-3, -5);
System.out.println("Math.multiplyExact(3, 5) 两个指定参数相乘=" + multiplyExact1);
System.out.println("Math.multiplyExact(3, -5) 两个指定参数相乘=" + multiplyExact2);
System.out.println("Math.multiplyExact(-3, -5) 两个指定参数相乘=" + multiplyExact3);
double pow1 = Math.pow(3, 2);
double pow2 = Math.pow(-3, 2);
System.out.println("Math.pow(3, 2) a的b次方=" + pow1);
System.out.println("Math.pow(-3, 2) a的b次方=" + pow2);
double random1 = Math.random();
System.out.println("Math.random() 返回[0, 1)之间的随机数=" + random1);
long round1 = Math.round(1.4);
long round2 = Math.round(1.5);
long round3 = Math.round(-1.4);
long round4 = Math.round(-1.5);
long round5 = Math.round(-1.6);
System.out.println("Math.round(1.4) 返回最接近指定参数的整数=" + round1);
System.out.println("Math.round(1.5) 返回最接近指定参数的整数=" + round2);
System.out.println("Math.round(-1.4) 返回最接近指定参数的整数=" + round3);
System.out.println("Math.round(-1.5) 返回最接近指定参数的整数(负数时注意小数点后的5)=" + round4);
System.out.println("Math.round(-1.6) 返回最接近指定参数的整数=" + round5);
}
7、控制流程
7.1、块作用域
7.2、循环
7.3、多重选择 swithc/case
1)case 标签可以是如下:
char / byte / int / short 常量表达式;
枚举常量;
字符串字面量;
7.4、中断流程,跳出循环
1)带标签 break;
2)这种标签可以放置在任何地方,可以被任何流程控制块使用;
8、数组
8.1、声明数组
8.2、数组拷贝
1)Arrays.copyOf 方法是拷贝数组元素到新的数组中;
8.3、数组排序
1)Arrays.sort() 排序方法采用的是快速排序算法,该方法适用于数值类型的数组;
8.4、java.util.Arrays 类
1)Arrays.toString(arr) 数组转字符串;
2)Arrays.copyOf 数组拷贝;
3)Arrays.sort() 数组排序;
4)Arrays.binarySearch(a, 12),使用二分查找算法,在数组中查找指定元素,查到则返回下标,没查到则返回负值;
5)Arrays.fill(a, 2) 填充数组中所有元素为指定值;
8.5、多维数组
8.6、不规则数组
- 上一篇:oracle的系统自动维护任务
- 下一篇:KVM、QEMU、LIBVIRT 是什么
相关推荐
- 一文读懂Prometheus架构监控(prometheus监控哪些指标)
-
介绍Prometheus是一个系统监控和警报工具包。它是用Go编写的,由Soundcloud构建,并于2016年作为继Kubernetes之后的第二个托管项目加入云原生计算基金会(C...
- Spring Boot 3.x 新特性详解:从基础到高级实战
-
1.SpringBoot3.x简介与核心特性1.1SpringBoot3.x新特性概览SpringBoot3.x是建立在SpringFramework6.0基础上的重大版...
- 「技术分享」猪八戒基于Quartz分布式调度平台实践
-
点击原文:【技术分享】猪八戒基于Quartz分布式调度平台实践点击关注“八戒技术团队”,阅读更多技术干货1.背景介绍1.1业务场景调度任务是我们日常开发中非常经典的一个场景,我们时常会需要用到一些不...
- 14. 常用框架与工具(使用的框架)
-
本章深入解析Go生态中的核心开发框架与工具链,结合性能调优与工程化实践,提供高效开发方案。14.1Web框架(Gin,Echo)14.1.1Gin高性能实践//中间件链优化router:=...
- SpringBoot整合MyBatis-Plus:从入门到精通
-
一、MyBatis-Plus基础介绍1.1MyBatis-Plus核心概念MyBatis-Plus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提...
- Seata源码—5.全局事务的创建与返回处理
-
大纲1.Seata开启分布式事务的流程总结2.Seata生成全局事务ID的雪花算法源码3.生成xid以及对全局事务会话进行持久化的源码4.全局事务会话数据持久化的实现源码5.SeataServer创...
- Java开发200+个学习知识路线-史上最全(框架篇)
-
1.Spring框架深入SpringIOC容器:BeanFactory与ApplicationContextBean生命周期:实例化、属性填充、初始化、销毁依赖注入方式:构造器注入、Setter注...
- OpenResty 入门指南:从基础到动态路由实战
-
一、引言1.1OpenResty简介OpenResty是一款基于Nginx的高性能Web平台,通过集成Lua脚本和丰富的模块,将Nginx从静态反向代理转变为可动态编程的应用平台...
- 你还在为 Spring Boot3 分布式锁实现发愁?一文教你轻松搞定!
-
作为互联网大厂后端开发人员,在项目开发过程中,你有没有遇到过这样的问题:多个服务实例同时访问共享资源,导致数据不一致、业务逻辑混乱?没错,这就是分布式环境下常见的并发问题,而分布式锁就是解决这类问题的...
- 近2万字详解JAVA NIO2文件操作,过瘾
-
原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。从classpath中读取过文件的人,都知道需要写一些读取流的方法,很是繁琐。最近使用IDEA在打出.这个符号的时候,一行代...
- 学习MVC之租房网站(十二)-缓存和静态页面
-
在上一篇<学习MVC之租房网站(十一)-定时任务和云存储>学习了Quartz的使用、发邮件,并将通过UEditor上传的图片保存到云存储。在项目的最后,再学习优化网站性能的一些技术:缓存和...
- Linux系统下运行c++程序(linux怎么运行c++文件)
-
引言为什么要在Linux下写程序?需要更多关于Linux下c++开发的资料请后台私信【架构】获取分享资料包括:C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,fastdf...
- 2022正确的java学习顺序(文末送java福利)
-
对于刚学习java的人来说,可能最大的问题是不知道学习方向,每天学了什么第二天就忘了,而课堂的讲解也是很片面的。今天我结合我的学习路线为大家讲解下最基础的学习路线,真心希望能帮到迷茫的小伙伴。(有很多...
- 一个 3 年 Java 程序员 5 家大厂的面试总结(已拿Offer)
-
前言15年毕业到现在也近三年了,最近面试了阿里集团(菜鸟网络,蚂蚁金服),网易,滴滴,点我达,最终收到点我达,网易offer,蚂蚁金服二面挂掉,菜鸟网络一个月了还在流程中...最终有幸去了网易。但是要...
- 多商户商城系统开发全流程解析(多商户商城源码免费下载)
-
在数字化商业浪潮中,多商户商城系统成为众多企业拓展电商业务的关键选择。这类系统允许众多商家在同一平台销售商品,不仅丰富了商品种类,还为消费者带来更多样的购物体验。不过,开发一个多商户商城系统是个复杂的...
你 发表评论:
欢迎- 一周热门
-
-
Redis客户端 Jedis 与 Lettuce
-
高并发架构系列:Redis并发竞争key的解决方案详解
-
redis如何防止并发(redis如何防止高并发)
-
开源推荐:如何实现的一个高性能 Redis 服务器
-
redis安装与调优部署文档(WinServer)
-
Redis 入门 - 安装最全讲解(Windows、Linux、Docker)
-
一文带你了解 Redis 的发布与订阅的底层原理
-
Redis如何应对并发访问(redis控制并发量)
-
oracle数据库查询Sql语句是否使用索引及常见的索引失效的情况
-
Java SE Development Kit 8u441下载地址【windows版本】
-
- 最近发表
- 标签列表
-
- oracle位图索引 (63)
- oracle批量插入数据 (62)
- oracle事务隔离级别 (53)
- oracle 空为0 (50)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)