Java简介2.0
Posted 364.99°
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java简介2.0相关的知识,希望对你有一定的参考价值。
Java的基本程序设计结构
目录
1.Hello World
一个最简单的Java应用程序(只发送一条信息到控制台窗口)
所有的Java应用程序都具有这种结构
public
:访问修饰符(access modifier)
class
:类(构建所有Java应用程序和applet的构建块),Java应用程序的全部内容都必须放置在类中
Simpleset
:类名(自定义,首位字母开头(建议大写),其他部分字母与数字和_的任意组合);当有多个英文单词时,每个单词首部使用大写(骆驼命名法/camel case)
.java
:Java源代码的扩展名
main
:main函数(java1.4后强制必须声明为public,如果且必须是静态的),void表示这个方法没有返回值,如果main正常退出,Java程序的退出码为0
{ }
:一个块儿,表示方法体的开始和结束
.
:用来调用方法、属性、包(类)
注意:即使Java的方法没有参数,也需要使用 ()
public class Simplest {
public static void main(String[] args) {
System.out.println("not 'Hellow World'");
}
}
2.注释
//
:最常用的方式,注释内容从//开始到本行结尾
/* */
:注释定界符,可注释多行,/*
开始,*/
结束
/** * */
:可自动生成文档,/**
开始*/
结束
3.数据类型
Java是一种强类型语言,因此每一个变量都需要声明一种类型,共有八种基本类型(primitive type)
整型(byte,short,int,long):没有小数部分的数值,可以是负数
浮点型(float,double):有效数部分的数值,float类型的数值有一个后缀F或f,没有后缀默认为double(可加后缀D或d)
字符类型(char):用于表示Unicode编码的代码单元
布尔型(Boolean):用于表示真值
类型 | 存储需求 | 取值 |
---|---|---|
byte | 1B | -128~127 |
short | 2B | -32 768~32 767 |
int | 4B | -2 147 483 648~2 147 483 647 |
long | 8B | -9 223 372 036 854 775 808~9 223 372 036 854 775 807 |
float | 4B | ±3.402 823 47E+38F(有效位数6~7位) |
double | 8B | ±1.797 693 134 862 315 70E+308(有效位数15位) |
char | 2B | 一个字符 |
Boolean | 1B或4B | true、false |
注意:
1.浮点型:可以使用十六进制表示(p表示指数,指数的基数是2)
表示溢出和出错情况的三个特殊的浮点数值:Double.POSITIVE_INFINITY(正无穷大),Double.NEGATIVE_INFINITY(负无穷大),Double.NaN(不是一个数字),Float类似。检测特定值是否属于NaN,使用isNaN
方法
浮点数值不适合于无法接受舍入误差的金融计算(如:2.0-1.1会打印出0.899999……)。因为浮点值采用二进制系统表示,而二进制系统中无法精确的表示分数1/10(类似于十进制无法精确表示1/3)
2.布尔型:Java中布尔型不能和整型相互转换
3.字符型:字面值需要用单引号括起来
Unicode转义序列会在解析代码之前得到处理
特殊字符的转义序列,要注意注释中的\\u
转义序列 | 名称 | Unicode值 |
---|---|---|
\\b | 退格 | \\u0008 |
\\t | 制表 | \\u0009 |
\\n | 换行 | \\u000a |
\\r | 回车 | \\u000d |
\\" | 双引号 | \\u0022 |
\\' | 单引号 | \\u0027 |
\\\\ | 反斜杠 | \\u005c |
4.变量与常量
4.1.变量
与所有程序设计语言一样,Java也使用变量来存储值。在Java中每个变量都有一个类型,声明变量时,先指定变量类型,再是变量名
1.变量命名规则:
1.首字符可选用:_ 字母 ( 建 议 不 用 , (建议不用, (建议不用,只用在Java编译器或其他工具生成的名字中)
2.其他部分可选用:_ $ 字母 数字
3.不能使用Java保留字做变量名
2.变量初始化:
1.声明一个变量后,必须用赋值语句对变量进行显示初始化,使用未初始化的变量的值,Java编译器会报错
2.在Java中,变量的声明尽可能靠近变量第一次使用的地方(良好的程序编写风格)
3.从Java10开始,对于局部变量,如果可以从初始值推断出它的类型,就不需要声明类型
//先声明,后赋值
int variable1 ;
variable1 = 1;
//声明的同时赋值
double variable2 = 2.0;
//10以上版本,可直接用var声明变量
var variable3 = 3.0f;
4.2.常量
在Java中,利用关键字
final
指示常量
1.final表示此变量只能被赋值一次
2.常量名使用全大写
3.类常量(class constant):在一个类的多个方法中使用,使用static final
声明,定义在main函数外部
public class Constant {
//声明一个类常量
public static final int CONSTANT2 = 2;
public static void main(String[] args) {
//声明一个常量,并赋值
final int CONSTANT1 = 1;
}
}
4.3.枚举类型
enum
:一个有限的集合,可以将变量的取值限制在这个集合内
Season类型的变量只能存储这个类型声明中给定的某个枚举值,或者特殊值null(表示这个变量没有设置任何值)
public enum Season {//定义一个枚举类
Spring,Summer,Autumn,Winter
}
public class TestSeason {//使用枚举类,因为在一个包下面,就不需要import调用枚举类
Season season = Season.Spring;
}
5.运算符
5.1.算术运算符
+ - * / %(加、减、乘、除、取余):
当参与/运算的两个操作数都是整型,表示整数除法,否则表示浮点除法。
double类型使用64位存储一个数值,而有些处理器使用80位浮点寄存器,这些寄存器增加了中间过程的精度(如:double w = x * y / z; //处理器计算x*y,并将结果储存在80位浮点寄存器中,再除以z并将结果截断为64位,可以得到一个更精确的结果),但这个结果可能与始终使用64位计算的结果不一样。而使用strictfp
关键字标记的方法(如:public static strictfp void main(String[] args)),则必须使用严格的浮点计算来生成可再生的结果。
+= -= = /= %= 赋值中使用二元运算符(如:x += 2;//x = x + 2;)
++ – 自增自减运算符(如:++x //x = x + 1)
注意:前缀形式,变量在本语句就会自增自减1,后缀形式,变量在下一句语句才会自增自减1(;代表一个语句的结束,其本身也是一个语句)
5.2.数学函数与常量
关键字 | 简介 | 案例 |
---|---|---|
Math.sqrt | 平方根 | double a = 9; double y = Math.sqrt(a); |
Math.pow | 幂运算 | double y = Math.pow(x,a);//y=x^n |
Math.floorMod | 求模 | int z = Math.floorMod(11,3);//floorMod(被除数,除数) ,z = 2 |
Math.sin Math.cos Math.tan Marh.atan Math.atan2 | 三角函数 | double d = Math.sin(90*Math.PI/180)//d = sin60° |
Math.exp | 自然数指数 | double d = Math.exp(3);//e^3 |
Math.log Math.log2 | ln log2 | double e = Math.log(5);// e = ln(5) double f = Math.log2(5);//f = log2(5) |
Math.PI Math.E | π e |
注意:
1.当import static java.lang.Math.*;
,引入Math包后,可以不写前缀Math
2.取模floorMod
与取余%
的区别:求余追求的是商的绝对值最小,求模追求的是商的值最小(只有除数与被除数中出现负数时,两者结果才不等)
3.在Math类中,为了达到最高性能,所有的方法都是用计算机浮点单元中的例程;为了得到一个完全可预测的结果比运行速度更重要时,可使用StrictMath类(实现了“可自由分发的数学库”,确保在所有平台上得到相同的结果)
5.3.数值类型之间的转换
1.合法转换图
实线表示精度不会损失,虚线表示精度会损失(精度小的转精度大的,不会丢失精度,精度大的转精度小的,会丢失精度)
2.二元运算符的数值转换
使用一个二元运算符连接两个数时,会将两个数转换为同一类型再进行计算
规则:低精度转高精度,至少得转换为int类型
3.强制类型转换(cast)
转换语法格式:圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名
import static java.lang.Math.*;
public class Cast {
public static void main(String[] args) {
double x = 3.52;
int y = (int)x;
System.out.println("y的值:" + y);
//四舍五入运算
int z = (int)round(x);//round返回值默认是long类型
System.out.println("z的值:" + z);
}
}
5.4.关系和Boolean运算符
1.检测相等:
==
(相等返回true,不等返回false),!=
(不等返回true,相等返回false)
2.比较:<(小于),>(大于),<=(小于等于),>=(大于等于)
3.逻辑运算符:&&
与||
或(这两个都是按照“短路”方式求值的,如果第一个表达式就能确定表达式的值,第二个就不必计算了)!
非
4.三元操作符:condition?exception1:exception2;
,condition为true,则取值exception1,为false,取值exception2
5.5位运算符
&
与|
或(这两个不是“短路方式求值”,两个表达式都要执行)^
异或~
非
<<
位模式左移,>>
有符号位模式右移(使用符号位填充高位),>>>
无符号位模式右移(使用0填充高位)
十进制转换为二进制:Integer.toBinaryString(n)
(字符形式)
移位运算符的右操作数要完成模32的运算(除非做操作数是long型,此时右操作数模为64),如:1 << 35 等于 1 << 3
5.6.括号与运算符级别
运算符优先级 | 结合性 |
---|---|
[ ] . ( ) (方法调用) | 从左向右 |
! ~ ++ - - +(一元运算) -(一元运算) ( ) (强制类型转换) new | 从右向左 |
* / % | 从左向右 |
+ - | 从左向右 |
<< >> >>> | 从左向右 |
< <= > >= instanceof | 从左向右 |
== != | 从左向右 |
& | 从左向右 |
^ | 从左向右 |
| | 从左向右 |
&& | 从左向右 |
|| | 从左向右 |
?: | 从右向左 |
= += -= *= /= %= &= |= ^= <<= >>= >>>= | 从右向左 |
6.字符串
Java字符串就是Unicode字符序列
Java内置没有字符串类型,而是在标准Java类库中提供了一个预定义类,叫做String
每个用双引号括起来的字符串都是String的一个实例
6.1.子串
关键字:
substring
,可以从一个较大的字符串中提取出一个子串,左闭右开
String str1 = str.substring(1);//截取出ello
String str2 = str.substring(2,4);//截取出ll
6.2.拼接
关键字:
+
:1.将字符串与字符串按照给定顺序拼接
2.将字符串与非字符串按照给定顺序拼接为字符串
String.join
:Java8提供,String.join(“分隔符”,“字符串1”,“字符串2”,……);//使用分隔符拼接字符串
repeat
:Java11提供,复制字符串:String str = “Java”.repeat(2);//str = “JavaJavaJava”
6.3.不可变字符串
不能修改Java字符串中的单个字符(因此特性,编译器可以实现字符串共享),不过可以修改字符串变量,让它引用另一个字符串
String str = "Hello";
str = str.substring(0,2)+"y";//改变字符串变量str地内容以达到修改字符串str的目的
6.4.检测字符串内容相等
关键字:
equals
:a.equals(b);//相等返回true,a与b可以是字符串变量,也可以是字符串字面值
注意:不能使用==
检验两个字符是否相等,此运算符只能确定两个字符串是否放在同一个位置上(不是比较内容)
6.5.空串与NULL串
空串"":一个Java对象,长度为0,内容为空的字符串
检测字符串是否为空:str.length() == 0
或str.equals("")
NULL串:没有任何对象与该变量关联
6.6.码点与代码单元
char数据类型是一个采用UTF-16编码表示Unicode码点的代码单元
length()
:返回采用UTF-16编码表示给定字符串所需要的代码单元数量
codePointCount(0,str.length())
:获取实际长度(码点数量)
charAt(n)
:返回位置n的代码单元
offsetByCodePoints(0,n);
codepointAt(index)
返回第n个码点
public class CodePoint {
public static void main(String[] args) {
String str1 = "Hello";
int m = str1.length();//获取字符串长度
int codeCount = str1.codePointCount(0,str1.length()); //获取码点数量
char ch1 = str1.charAt(4);//获取位置4的字符
//获取位置4的码点
int index = str1.offsetByCodePoints(0,4);
int code = str1.codePointAt(index);
}
}
6.7.String API
import java.lang.String
关键字(返回值类型 关键字) | 简介 |
---|---|
char charAt(in index) | 返回指定位置的代码单元 |
int codePointAt(int index) | 返回从给定位置开始的码点 |
int offsetByCodePoints(int startIndex,int cpCount) | 返回从startIndex码点开始,cpCount个码点后的码点索引 |
int compareTo(String other) | 按照字典顺序,如果字符串位于other之前,返回负数,否则返回正数,相等返回0 |
IntStream codePoints() | 将这个字符串的码点作为一个流返回 |
new String (int[] codePoints, int offset, int count) | 用数组中从offset开始的count个码点构成一个字符串 |
boolean empty() boolean blank() | 如果字符串为空或者由空格组成,返回true |
boolean equals(Object other) | 字符串与other相等,返回true |
boolean equalsIgnoreCase(String other) | 字符串与other相等(忽略大小写),返回true |
boolean startsWith(String prefix) boolean endsWith(String suffix) | 字符串以prefix开头或以suffix结尾,返回true |
int indexOf(String str) int indexOf(String str,int fromIndex) int indexOf(int cp) int indexOf(int cp,int fromIndex) | 返回与字符串str或码点cp匹配的第一个字串开始的位置,从0或fromIndex开始匹配,如果不存在,就返回-1 |
int lastIndexOf(String str) int lastIndexOf(String str,int fromIndex) int lastIndexOf (int cp) int lastIndexOf(int cp,int fromIndex) | 返回与字符串str或码点cp匹配的最后一个子串开始的位置 |
int length() | 返回字符串代码单元的个数 |
int codePointCount(int startIndex,int endIndex) | 返回startIndex和endIndex-1之间的码点个数 |
String replace(CharSequence oldString,CharSequence newString) | 返回一个新的字符串,用newString代替原字符串中所有的oldString |
String substring(int beginIndex) String substring(int beginIndex,int endIndex) | 截取从beginIndex到末尾或endIndex-1的所有代码单元 |
String toLowerCase() String toUpperCase() | 改变原始字符串中的大小写 |
String trim() String strip() | 删除原始字符串首部和尾部小于等于U+0020的字符(trim)或空格(strip) |
String join(CharSequence delimiter,CharSequence…elements) | 用给定的定界符连接所有元素 |
String repeat(int count) | 返回一个字符串,将当前字符串重复count次 (Java11) |
6.8.构造字符串
当需要用许多小段的字符串来构造一个字符串,可以使用
StringBuilder
,避免在拼接过程中创建多个新的String对象
import java.lang.StringBuilder;
public class Builder {
public static void main(String[] args) {
//构造一个StringBuilder
StringBuilder builder = new StringBuilder();
//当需要添加一段字符串时,使用append添加
builder.append("Hello");
builder.append("StringBuilder");
}
}
import java.lang.StringBuilder
this代表当前对象
关键字 | 简介 |
---|---|
StringBuilder() | 构造一个空的字符串构造器 |
int length() | 返回构造器或缓冲器中的代码单元数量 |
StringBuilder append(String c) | 追加一个字符串并返回this |
StringBuilder append(char c) | 追加一个代码单元并返回this |
StringBuilder appendCodePoint(int cp) | 追加一个码点,并将其转换为一个或两个代码单元并返回this |
void setCharAt(int i,char c) | 将第i个代码单元设置为c |
StringBuilder insert(int offset,String str) | 在offset位置插入一个字符串并返回this |
StringBuilder delete(int startIndex,int endIndex) | 删除偏移量从startIndex到endIndex-1的代码单元并返回this |
String toString() | 返回一个与构造器或缓冲器内容相同的字符串 |
7.输入与输出
7.1.读取输入
通过控制台进行输入,实例化
Scanner
对象
import java.util.Scanner
import java.util.Scanner;
public class SystemIn {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);//实例化一个Scanner对象
System.out.print("输入字符串:");
String name = in.nextLine();
System.out.print("输入整数:");
int Integer = in.nextInt();
System.out.print("输入浮点数:");
int Integer = in.nextDouble();
}
}
关键字 | 简介 |
---|---|
Scanner(InputStream in) | 用给定的输入流创建一个Scanner对象 |
String nextLine() | 读取输入的下一行内容 |
String next() | 读取输入的下一个单词(空格为分隔符) |
int nextInt() double nextDouble() | 读取并转换下一个表示整数或浮点数的字符序列 |
boolean hasNext() | 检测输入中是否还含有其他单词 |
boolean hasNextInt() boolean hasNextDouble() | 检测是否还有下一个表示整数或浮点数的字符序列 |
7.2.格式化输出
格式:
System.out.printf("Bye,%s.See you %d minutes later",name,number);
以%字符开始的格式说明:用相应的参数替换
format
与printf
效果一样
用于printf(format)的转换符
转换符 | 类型 | 转换符 | 类型 |
---|---|---|---|
d | 十进制整数 | s | 字符串 |
x | 十六进制整数 | c | 字符 |
o | 八进制整数 | b | 布尔值 |
f | 定点浮点数 | h | 散列码 |
e | 指数浮点数 | tx或Tx | 日期时间(已经过时) |
g | 通用浮点数(e与f中较短的一个) | % | 百分号 |
a | 十六进制浮点数 | n | 换行 |
以上是关于Java简介2.0的主要内容,如果未能解决你的问题,请参考以下文章
java 虹软ArcFace 2.0,java SDK使用-进行人脸检测
Android 逆向类加载器 ClassLoader ( 类加载器源码简介 | BaseDexClassLoader | DexClassLoader | PathClassLoader )(代码片段
Linkedin OAuth 2.0 重定向 URL 不能包含片段标识符 (#)