Java教程

Java核心技术——第一章:基本程序设计结构

本文主要是介绍Java核心技术——第一章:基本程序设计结构,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

学习的过程中遇到了以前遇到但记得不清楚的知识点,所以从头整理一下知识点啦,从java基础开始~是看书过程中整理到的一些知识点,有问题可以互相交流。

数据类型

1、整型

Java是一种强类型语言,这意味着必须为每一个变量声明一种类型,一共有8种基本类型,其中4种整型、2种浮点型、1种用于表示Unicode编码的字符单元的字符类型char、一种用于表示真值的boolean类型。

类型存储需求取值范围
int4字节-2147483648~2147483647(正好超过20亿)
short2字节-32768~32767
long8字节-9223372036854775808~7223372036854807
byte1字节-128~127

通常情况int类型最常用,如果要表示这个星球上居住的人数,要用long类型,byte和short在特定场合下使用,如:底层的文件处理或者需要控制占用存储空间量的大数组。

2、浮点类型

浮点类型用于表示有小数部分的数值

类型存储需求取值范围
float4字节大约±3.40282347E +38F(有效位数6~7位)
double8字节大约±1.79769313486231570E +308(有效位15位)

double表示这种类型的数值精度是float的两倍(称为双精度),绝大部分应用程序都采用double类型,float精度难以满足需求,只在特定情况下使用,如:需要单精度数据的库,或者需要存储大量数据。

float类型的数据有一个后缀F或f(3.14F或3.14f)没有后缀f的浮点数(3.14)默认为double类型,
也可以在浮点数后添加d或D(3.14D)

3、char类型

char类型原本用于表达单个字符,现在有些unicode字符可以用一个char值描述,有一些则需要两个char值。
char类型的值要用单引号括起来 'A’是编码值为65对应的字符常量。

转义字符名称Unicode值
\b退格\u008
\t制表\u009
\n换行\u000a
\r回车\u000d
"双引号\u0022
单引号\u0027
\反斜杠\u005c

Unicode转义字符会在解析代码之前得到处理,例如:"\u0022+\u0022"并不是一个由引号包围加号的字符串,\u0022会在解析之前就变成“。会得到""+"",也就个空串。

4、boolean类型

boolean类型有两个值:true、false判定逻辑条件,整型和boolean类型之间不能相互转换。

变量

java中每个变量都有类型type,声明变量时,变量类型在变量名之前,
double salary;
int days;

变量初始化

声明一个变量后,必须用赋值语句对变量进行显式初始化,不要用未初始化的变量,会报ERROR–variable not initialized
int days;
days = 10;
也可以
int days = 10;

常量

java中,利用final表示常量。关键字final表示这个变量只能被赋值一次,一旦被赋值后,就不能再更改了,常量名使用全大写。经常希望某个常量可以在一个类中的多个方法使用,将这些常量称为”类常量“,可以使用关键字static final设置一个类常量。注意:类常量的定义位于main方法外部,因此,在同一个类的其他方法中也可以使用这个常量,而且,如果一个常量被声明为public,那么其他类也可以使用这个常量。

运算符

+、-、*、/表示加减乘除,当/参与运算的两个操作数都是整数时,表示整数除法,否则表示浮点数除法。求余操作用%表示。15/2等于7,15%2等于1,15.0/2等于7.5。
注意:整数被0除会产生一个异常,而浮点数被0除将会得到无穷大或者NaN结果

数学函数

  • 计算一个数值的平方根:可以使用sprt方法
double x = 4
double y = Math.sprt(x)
System.out.println(y) //2.0
  • 幂运算,java中没有幂运算,需要借助Math类的pow方法
    double y = Math.pow(x,a)
    将y的值设置为x的a次幂。pow方法有两个double类型的参数,返回结果也都是double类型。
    不必在数学方法名和常量名前添加Math,只需要源文件的顶部添加import static java.long.Math.*;

数值类型的转换

经常需要将数值类型转换成另一种类型,

无精度损失有精度损失
byte→shortint→float
short→intlong→float
int→longlong→double
int→double
char→int
float→double
  • 如果两个操作数中一个是double,另一个就会转换成double类型
  • 否则,如果两个操作数中一个是float,另一个就会转换成float类型
  • 否则, 如果两个操作数中一个是long,另一个就会转换成long类型
  • 否则,两个操作数都会被转换成int类型。

强制类型转换

在必要时int会转换成double,但有时也需要将double转换成int,但在转换过程中会丢失一些信息,需要通过强制类型转换实现。
double x = 9.821;
int nx = (int) x;
变量nx会变成9,如果想对浮点数进行舍入运算,以便得到最接近的整数,就需要使用Math.round方法。
double x = 9.821;
int nx = (int) Math.round(x);
变量nx的值就会变成10,当调用round时,仍然需要使用强制类型转换(int)原因是round方法返回long类型的结果,由于存在信息丢失的可能,所以只有使用显式的强制类型转换才能将long类型转换成int类型。
注意:如果试图将一个数值从一种类型强制转换成另一种类型,而又超出了目标类型的表示范围,结果就会截断成一个完全不同的值.

结合赋值和运算符

可以在赋值中使用二元运算符,例如:
x +=4;
等价于
x = x + 4;

关系和boolean运算符

要检测相等性,可以使用==,3==7的值是false。
使用!=检测不相等,3!=7的值是true。
还有<小于、>大于、<=小于等于、>=大于等于
&&表示逻辑”与“;||表示逻辑“或”,&&和||运算符是按照“短路”方式来求值的。如果第一个操作已经能确定表达式的值,第二个操作就不必计算了。
java支持三元操作符?: condition ? exp1 : exp2
如果条件为true,就执行exp1,如果为flase就执行exp2.

位运算符

处理整型类型时,可以直接对组成整数类型的各个位完成操作,意味着可以用掩码技术得到整数中的各个位。位运算包括:
&(“and”)
|(“or”)
^(“xor”)
~(“not”)
另外,>>和<<运算符将位模式右移或左移,需要建立位模式来完成位掩码时,两个运算符会很方便 。例如
int fourthBitFromRight = (n & (1 << 3)) >> 3;
最后,>>>运算符会用0填充高位,这与>>不同,他会用符号位填充高位,不存在<<运算符。

括号与运算符级别

如果不适用括号,就按照给出的优先级次序进行计算。同一级别的运算按照从左到右进行计算,&&的优先级比||高
a && b || c
等同于
(a && b) || c
因为+=是右结合运算,
a +=b +=c
等同于
a += (b+=c)
也就是将b+=c的结果加到a上。

字符串

字符串就是unicode字符序列,串“Java\u2122”由5个unicode字符J a v a 和™ 组成。每个用双引号括起来的字符串都是String类的一个实例
String e = "";空字符串
String a= "hello"

字串

String类的substring方法可以从一个较大的字符串中提取一个子串
String a = "hello"
String s = a.substring(0,3)
创建了一个由hel组成的字符串。从0开始到3为止,不包括3.

拼接

使用+拼接两个字符串

String a = "aaa";
String b = "bbb";
String c = a+b;

将aaabbb赋值给c。
当将一个字符串和一个非字符串的值进行拼接时,后者被转换成字符串。

不可变字符串

java中,String类对象称为不可变字符串,“hello”永远包含h e l l o ,不能修改其中任何一个字符,但是可以修改字符串变量a,让它引用另外一个字符串。
可以想象将各种字符串存在公共存储池中,字符串变量指向存储池中相应的位置。如果赋值一个字符串变量,原始字符串与复制的字符串共享相同的字符。

检测字符串是否相等

使用equals方法检测字符串是否相等。对于表达式s.equals(a),如果s和a相等则返回true,否则返回false。
要想检测两个字符串是否相等而不区分大小写,可以使用equalsIgnoreCase方法
"hello.equalsIgnoreCse("Hello")"

注意:一定不要使用==运算符来检测两个字符串是否相等,这个运算符只能确定两个字符串是否放置在同一个位置上,如果字符串放在同一位置,那么他们必然相等,但是完全有可能将内容相同的字符串拷贝在不同地方。

空串和Null串

空串是长度位0的字符串,可以用if(str.length == 0)或者if (str.equals(""))检测字符串是否是空。
空串是一个java对象,有自己的长度(0)和内容(空),但null表示目前没有任何变量与该变量关联。要检查一个字符串是否是null,使用if (str == null),有时要检查字符串既不是null也不是空串,需要使用if (str !=null && str.length() !=0)

StringAPI(重要)

java中string类包含50多个方法
java.lang.string 1.0

码点:就是某个任意字符在 Unicode 编码表中对应的代码值。
代码单元:是在计算机中用来表示码点的,大部分码点只需要一个代码单元表示,但是有一些是需要两个代码单元表示的。

1)char charAt (int index)
返回给定位置的代码单元。除非对底层的代码单元感兴趣,否则不需要调用这个方法。
2)int codePointAt(int index) 5.0
返回从给定位置开始的码点。
3)int offsetByCodePoints(int startIndex,int cpCount) 5.0
返回从 startIndex 代码点开始,位移 cpCount 后的码点索引。
4)int compareTo(String other)
按照字典顺序,如果字符串位于 other 之前,返回一个负数;如果字符串位于 other 之后,返回一个正数;如果两个字符串相等,返回 0。
5)IntStream codePoints() 8
将这个字符串的码点作为一个流返回。调用 toArray 将它们放在一个数组中。
6) new String(int[] codePoints, int offset, int count) 5.0
用数组中从 offset 开始的 count 个码点构造一个字符串。
7)boolean equals(Object other)
如果字符串与 other 相等,返回 true。
8)boolean equalsIgnoreCase(String other)
如果字符串与 other 相等(忽略大小写)返回 true。
9)boolean startsWith(String prefix)
10)boolean endsWith(String suffix)
如果字符串以 suffix 开头或结尾,则返回 true。
11)int indexOf(String str)
12)int indexOf(String str, int fromIndex)
13)int indexOf(int cp)
14)int indexOf(int cp, int fromIndex)
返回与字符串 str 或代码点 cp 匹配的第一个子串的开始位置。这个位置从索引 0 或 fromIndex 开始计算。如果在原始串中不存在 str,返回 -1。
15)int lastIndexOf(String str)
16)int lastIndexOf(String str, int fromIndex)
17)int lastIndexOf(int cp)
18)int lastIndexOf(int cp, int fromIndex)
返回与字符串 str 或代码点 cp 匹配的最后一个子串的开始位置。这个位置从原始串尾端或 fromIndex 开始计算。
19)int length()
返回字符串的长度。
20)int codePointCount(int startIndex, int endIndex) 5.0
返回 startIndex 和 endIndex-1 之间的代码点数量。没有配成对的代用字符将计入代码点。
21)String replace(CharSequence oldString, CharSequence newString)
返回一个新字符串。这个字符串用 newString 代替原始字符串中所有的 oldString。可以用 String 或 StringBuilder 对象作为 CharSequence 参数。
22)String ​substring(int beginIndex)
23)String substring(int beginIndex, int endIndex)
返回一个新字符串。这个字符串包含原始字符串中从 beginlndex 到串尾或 endlndex-1 的所有代码单元。
24)String toLowerCase()
25)String toUpperCase()
返回一个新字符串。这个字符串将原始字符串中的大写字母改为小写,或者将原始字符串中的所有小写字母改成了大写字母。
26)String trim()
返回一个新字符串。这个字符串将删除了原始字符串头部和尾部的空格。
27)String join(CharSequence delimiter, CharSequence… elements) 8
返回一个新字符串,用给定的定界符连接所有元素。

构建字符串

如果需要许多小段的字符串构建一个字符串,先创建一个空的字符串构造器:
StringBuilder builder = new StringBuilder();
每当需要添加一部分代码时,就调用append方法。
builder.apend(cd);
builder.apend(abb);
在需要构建字符串时就调用ToString方法,可以得到一个String对象,其中包含了构造器中的字符串
String z = builder.ToString();
####StringBuilderAPI(重要)

  • StringBuilder() 构造一个空的字符串构造器
  • int length() 返回构造器中代码单元量
  • StringBuilder append(String str) 追加一个字符串返回this
  • StringBuilder appeng(char c) 追加一个字符串返回this
  • StringBuilder appendCodePoint(int cp) 追加一个代码点,并将其转换为一个或两个代码单元并返回this
  • void setCharAt( int i, char c) 将第i个代码单元设置为c
  • StringBuilder insert(int offset, String str) 在offset位置上插入一个代码单元
  • StringBuilder insert(itn offset, char c) 在offset位置上插入一个代码单元
  • StringBuilder delete(int start startIndex, int endIndex) 从startIndex到endIndex-1删除并返回this
  • String toString() 返回一个构造器缓冲器内容相同的字符串。

数组

int[] a = new int[100]创建了一个可以存100个整数的数组,数组长度不要求是常量,
new int[n]会创建一个长度是n的数组。
创建一个数组时,所有元素都初始化为0;
boolen数组初始化位false;
对象数组的元素初始化为一个特殊值null。

数组初始化、匿名数组

int[] a = {2, 33, 4, 5};
使用这种语句时不需要调用new
new int[] {17,15,12,1}
使用这种方法将创建一个新数组并利用括号中提供的值进行初始化,数组的大小就是初始化个数,这种形式可以在不创建新变量的情况下重新初始化一个数组,
small = new int[] {17,15,12,1}
简写形式:

int[] ann = {1,2,3,4,5,6}
b = a;

数组拷贝

如果将一个数组变量拷贝给另一个数组变量,那这两个变量将引用同一个数组。

int[] c = b; // 将数组b拷贝给数组c
c[5] = 12 // 将数组c种第五个值变成12,此时数组b中第五个值也变成12

如果将一个数组的值全部拷贝到新数组中,就要使用Arrays类的copyOf方法
aint[] copiNumbers = Arrays.copyOf(c, c.length)第二个参数是新数组的长度,这个方法可以用来增加数组的大小,

数组排序

int[] a = new int[1000]
Arrays.sort(a)
可以对a快速排序

java.utils.Arrays:

  • static String toString(type[] a) 返回包含a中数据元素的字符串,这些数据元素放在括号内,并用逗号分隔
  • static type copyOf(type[] a, int length) 返回与a类型相同的数组,其长度为length
  • static void sort(type[] a) 采用优化算法对数组进行排序
  • static int binarySearch(type[] a , type v) 采用二分搜索算法查找v,如果找到返回下标值,否则返回一个负值,
  • static void fill(type[] a , type v) 将数组所有元素设置为v
  • static boolean equals(type[] a, type[] b) 如果两个数组大小相同、下标相同的元素都对应相等,返回true
这篇关于Java核心技术——第一章:基本程序设计结构的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!