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):用于表示真值

类型存储需求取值
byte1B-128~127
short2B-32 768~32 767
int4B-2 147 483 648~2 147 483 647
long8B-9 223 372 036 854 775 808~9 223 372 036 854 775 807
float4B±3.402 823 47E+38F(有效位数6~7位)
double8B±1.797 693 134 862 315 70E+308(有效位数15位)
char2B一个字符
Boolean1B或4Btrue、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() == 0str.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);
以%字符开始的格式说明:用相应的参数替换
formatprintf效果一样

用于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 不能包含片段标识符 (#)

用于模糊的 OpenGL ES 2.0 片段着色器速度慢且质量低

jsp简介

如何在Android上使用OpenGL ES 2.0绘制点