Java学习_Java快速入门
- Java简介
安装完JDK后,需要设置一个
JAVA_HOME
的环境变量,它指向JDK的安装目录。在Windows下,它是安装目录,类似:C:\Program Files\Java\jdk-15
把
JAVA_HOME
的bin
目录附加到系统环境变量PATH
上。在Windows下:Path=%JAVA_HOME%\bin;<现有的其他路径>
把
JAVA_HOME
的bin
目录添加到PATH
中是为了在任意文件夹下都可以运行java
。- 可执行文件
javac
是编译器,而可执行文件java
就是虚拟机,给虚拟机传递的参数是我们定义的类名,虚拟机自动查找对应的class文件并执行。 - 安装插件除了问题
- Java程序基础
- 引用类型的变量类似于C语言的指针,它内部存储一个“地址”,指向某个对象在内存的位置。
- 定义变量的时候,如果加上
final
修饰符,这个变量就变成了常量:final double PI = 3.14; // PI是一个常量
常量在定义时进行初始化后就不可再次赋值,再次赋值会导致编译错误。根据习惯,常量名通常全部大写。
var sb = new StringBuilder();
编译器会根据赋值语句自动推断出变量
sb
的类型是StringBuilder
。对编译器来说,该语句实际上会自动变成:StringBuilder sb = new StringBuilder();
- 整数的数值表示不但是精确的,而且整数运算永远是精确的,即使是除法也是精确的,因为两个整数相除只能得到结果的整数部分。
System.out.println(7/2); //结果为2
- 整数的除法对于除数为0时运行时将报错,但编译不会报错。
- 整数由于存在范围限制,如果计算结果超出了范围,就会产生溢出,而溢出不会出错
0111 1111 1111 1111 1111 1111 1111 1000
+ 0000 0000 0000 0000 0000 0000 0000 1111
-----------------------------------------
1000 0000 0000 0000 0000 0000 0000 0111 - 正数的原码、反码、补码都一样,负数的反码是按位取反(符号位不变),补码是取反后+1。
- 移位运算:逻辑左移右补0,逻辑右移左边补符号位;无符号右移(左移)左(右)补0,不区分正负。
- 在运算过程中,如果参与运算的两个数类型不一致,那么计算结果为较大类型的整型。例如,
short
和int
计算,结果总是int
,原因是short
首先自动被转型为int。
- 强制转型,即将大范围的整数转型为小范围的整数。会截取低位内容,扔掉高位。
- 在一个复杂的四则运算中,两个整数的运算不会出现自动提升的情况
float f = 4.5f + 12 / 5;
System.out.println(f);
//结果为6.5 整数运算在除数为
0
时会报错,而浮点数运算在除数为0
时,不会报错,但会返回几个特殊值:double d1 = 0.0 / 0; // NaN
double d2 = 1.0 / 0; // Infinity
double d3 = -1.0 / 0; // -InfinityNaN
表示Not a NumberInfinity
表示无穷大-Infinity
表示负无穷大
- && 与 || 有短路运算
- 一个
char
保存一个Unicode字符。 - Java在内存中总是使用Unicode表示字符,一个英文字符和一个中文字符都用一个
char
类型表示,它们都占用两个字节。要显示一个字符的Unicode编码,只需将char
类型直接赋值给int
类型即可。 还可以直接用转义字符
\u
+Unicode编码来表示一个字符。// 注意是四位十六进制:
char c3 = '\u0041'; // 'A',因为十六进制0041 = 十进制65
char c4 = '\u4e2d'; // '中',因为十六进制4e2d = 十进制20013- Java 13开始,字符串可以用
"""..."""
表示多行字符串(Text Blocks)。public class Main {
public static void main(String[] args) {
String s = """
SELECT * FROM
users
WHERE id > 100
ORDER BY name DESC
""";
System.out.println(s);
}
}
/*
输出:SELECT * FROM
users
WHERE id > 100
ORDER BY name DESC*/
- 请将一组int值视为字符的Unicode编码,然后将它们拼成一个字符串。
public class JavaTest { public static void main(String[] args) {
int a = 72;
int b = 105;
int c = 65281;
// FIXME:
String s = "" + (char)a + (char)b + (char)c;
System.out.println(s);
} }
- 流程控制
- 如果要把数据显示成我们期望的格式,就需要使用格式化输出的功能。格式化输出使用
System.out.printf()
,通过使用占位符%?
,printf()
可以把后面的参数格式化成指定格式。由于%表示占位符,因此,连续两个%%表示一个%字符本身。 - 数字运算时的自动类型转换要看右边计算的数字的类型,而不是看左边最终结果的类型。
- 浮点数在计算机中常常无法精确表示,并且计算可能出现误差,因此,判断浮点数相等用
==
判断不靠谱。public class Main {
public static void main(String[] args) {
double x = 1 - 9.0 / 10;
System.out.println(9.0 / 10);
if (x == 0.1) {
System.out.println("x is 0.1");
} else {
System.out.println("x is NOT 0.1");
}
}
} 0.9
x is NOT 0.1正确的方法是利用差值小于某个临界值来判断:
public class Main {
public static void main(String[] args) {
double x = 1 - 9.0 / 10;
if (Math.abs(x - 0.1) < 0.00001) {
System.out.println("x is 0.1");
} else {
System.out.println("x is NOT 0.1");
}
}
} - 使用
switch
时,如果遗漏了break
,就会造成严重的逻辑错误,而且不易在源代码中发现错误。从Java 12开始,switch
语句升级为更简洁的表达式语法,使用类似模式匹配(Pattern Matching)的方法,保证只有一种路径会被执行,并且不需要break
语句.case "apple" -> System.out.println("Selected apple");
注意新语法使用
->
,如果有多条语句,需要用{}
括起来。不要写break
语句,因为新语法只会执行匹配的语句,没有穿透效应。使用新的switch
语法,不但不需要break
,还可以直接返回值。把上面的代码改写如下:public class Main {
public static void main(String[] args) {
String fruit = "apple";
int opt = switch (fruit) {
case "apple" -> 1;
case "pear", "mango" -> 2;
default -> 0;
}; // 注意赋值语句要以;结束
System.out.println("opt = " + opt);
}
} - 使用
for each
循环打印也很麻烦。幸好Java标准库提供了Arrays.toString()
,可以快速打印数组内容。import java.util.Arrays; public class Main {
public static void main(String[] args) {
int[] ns = { 1, 1, 2, 3, 5, 8 };
System.out.println(Arrays.toString(ns));
}
}
Java学习_Java快速入门的更多相关文章
- 前端学习 node 快速入门 系列 —— 初步认识 node
其他章节请看: 前端学习 node 快速入门 系列 初步认识 node node 是什么 node(或者称node.js)是 javaScript(以下简称js) 运行时的一个环境.不是一门语言. 以 ...
- MongoDB学习笔记:快速入门
MongoDB学习笔记:快速入门 一.MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.M ...
- Java程序员快速入门Go语言
这篇文章帮助Java程序员快速入门Go语言. 转载至 开源中国社区. http://www.oschina.net 本文将以一个有代表性的例子为开始,以此让Java程序员对Go语言有个初步认识,随后将 ...
- Java学习笔记之---入门
Java学习笔记之---入门 一. 为什么要在众多的编程语言中选择Java? java是一种纯面向对象的编程语言 java学习起来比较简单,适合初学者使用 java可以跨平台,即在Windows操作系 ...
- 前端学习 node 快速入门 系列 —— npm
其他章节请看: 前端学习 node 快速入门 系列 npm npm 是什么 npm 是 node 的包管理器,绝大多数 javascript 相关的包都放在 npm 上. 所谓包,就是别人提供出来供他 ...
- 前端学习 node 快速入门 系列 —— 模块(module)
其他章节请看: 前端学习 node 快速入门 系列 模块(module) 模块的导入 核心模块 在 初步认识 node 这篇文章中,我们在读文件的例子中用到了 require('fs'),在写最简单的 ...
- 前端学习 node 快速入门 系列 —— 简易版 Apache
其他章节请看: 前端学习 node 快速入门 系列 简易版 Apache 我们用 node 来实现一个简易版的 Apache:提供静态资源访问的能力. 实现 直接上代码. - demo - stati ...
- 前端学习 node 快速入门 系列 —— 服务端渲染
其他章节请看: 前端学习 node 快速入门 系列 服务端渲染 在简易版 Apache一文中,我们用 node 做了一个简单的服务器,能提供静态资源访问的能力. 对于真正的网站,页面中的数据应该来自服 ...
- 前端学习 node 快速入门 系列 —— 报名系统 - [express]
其他章节请看: 前端学习 node 快速入门 系列 报名系统 - [express] 最简单的报名系统: 只有两个页面 人员信息列表页:展示已报名的人员信息列表.里面有一个报名按钮,点击按钮则会跳转到 ...
随机推荐
- 编程C语言进阶篇——自定义数据类型:结构体
一.结构体 定义方法: 结构名 变量名 特点: 两个同类型的结构变量可以相互赋值,但是结构变量之间不能使用"<","=="等运算符,如果使用则需要对运算符 ...
- 【mq读书笔记】消息拉取
疑问:PullRequest何时添加? PullMessageService提供延迟添加与立即添加2种方式 疑问:PullRequest是在什么时候创建的呢? 1.上上图中 PullRequest p ...
- Oracle11gR2 RAC voting disk error
故障现象:2+3节点配置,alert日志中提示vote盘错误,集群无法拉起来. 分析过程:Oracle 11g RAC依据OLR,OCR,VOTE磁盘进行节点信息注册,维护集群状态以及完成选举投票.其 ...
- docker镜像无法删除 Error:No such image:xxxxxx
前言 docker镜像无法删除,通过 docker images 查看镜像明明存在就是删除不了. 删除提示:Error:No such image:xxxxxxx 具体截图内容如下: 解决方法 进入目 ...
- Zuul 超时设置
问题描述 使用 Zuul 作为网关,偶发超时问题及第一次调用触发熔断问题 解决方案 超时问题 ribbon: ReadTimeout: 10000 SocketTimeout: 60000 第一次调用 ...
- MySQL错误日志(Error Log)
错误日志是一个文本文件,记录了 MySQL Server 每次启动和关闭的详细信息以及运行过程中所有较为严重的警告和错误信息.在遇到问题时,应该首先查看这个文件. 如何开启 使用命令 SHOW VAR ...
- (七)if/else就是goto
一.CPU如何执行指令 CPU上有数以亿计的晶体管组层的复杂电路,我们先不用管具体电路如何实现:逻辑上我们可以认为CPU由许多寄存器组成,而这些寄存器又由许多锁存器和触发器组成,N个锁存器或触发器就可 ...
- springboot多模块项目搭建遇到的问题记录
废话不多说,直接上问题报错与解决方法. 问题报错一:(报错信息看下方代码) 问题原因:'com.company.logistics.service.company.CompanyService' 未找 ...
- 老猿学5G:融合计费场景的离线计费会话的Nchf_OfflineOnlyCharging_Update 更新操作过程
☞ ░ 前往老猿Python博文目录 ░ 一.Nchf_OfflineOnlyCharging_Update消息交互过程 Nchf_OfflineOnlyCharging_Update消息是是5G融合 ...
- DVWA SQL Injection High
High 虽然是high等级,但是通过源码审计发现与low等级一样,没有对传入的值做任何过滤,唯一不同的就是点击连接后打开了另外一个对话框,用户在新打开的页面输入 其余的步骤与low级别的一样:htt ...