java核心技术学习第一课

基础知识

数据类型

java是一种强类型语言,这就意味着为每一个变量生命一种类型,在java中一共有八种基本数据类型。其中四种整型,两种浮点型,一种用于表示Unicode编码的字符类型和一种用于表示真假的Boolean类型
八种具体数据类型
在java中整型的类型与运行java代码的机器无关,这就解决了软件从一个平台移植带另一个平台,或者在同一平台的不同系统之间移植给程序员带来的诸多问题。因为java程序必须保证在所有机器上能够得到相同的运行结果,所以每一种数据类型取值固定。(C和C++就不同,它们的基本数据类型可能因为机器的不同而采用的字节长度也不一样)

长整型数值有一个后缀L(如4000000000L)。十六进制有一个前缀0x,八进制有个一0,(比如010对应八进制中的8)。很显然八进制的表示容易混淆,所以建议最好不要使用八进制常熟。

浮点类型

double这种数据类型的精度是float精度的两倍。绝大多数应用程序都用double数据类型。
float数值带有后缀F,没有的默认表示double类型。
double后缀可以没有后缀,也可以带有一个D的后缀

表示溢出和出错的三种特殊的浮点数值:
正无穷,负无穷,NaN(不是一个数字)
例如,一个正整数除以0结果为正无穷大。 计算0/0或者负数的平方根,结果为NaN。
浮点数值不适用于禁止出现的舍入误差的金融计算中如:System.out.println(2.0-1.1)将打印出0.8999999999999999,而不是人们想象的0.9。主要原因是浮点数值,采用二进制表示,而在二进制系统中无法精确的表示分数1/10,这就好像十进制无法精确表示1/3一样,如果需要在计算中不含有任何误差,就应该使用BigDecimal类。

char类型用UTF-16编码描述一个代码单元。Unicode是为了统一各个国家的通用编码,就是国际编码。
强烈建议不要在程序中使用char类型,除非确实需要对UTF-16代码单元进行操作,最好将需要处理的字符串用抽象数据表示

变量

可以在一行声明多个变量 int a,b;不过不提倡这种方式,逐一生成变量会提高程序的可读性
变量名大小写敏感
声明一个变量以后必须用赋值语句对变量进行初始化可以将变量的声明和初始化放在一起,也可以分开。没有被初始化的变量不能使用。

常量

final 关键字声明常量,final关键字表示这个变量只能被赋值一次,一旦赋值之后就不能更改了,习惯上,常量名字使用大写。
在java中,经常希望某个常量可以在一个类中多个方法使用,通常将这些常量生命为类常量,可以使用关键字static final设置一个类常量(类常量声明为全局变量)如果一个类常量被声明为public,那么其他类的方法也可以使用这个常量

运算符

15/2=7 15%2=1 15.0/2=7.5
整数被0除将会产生一个异常,而浮点型数被0除将会得到一个无穷大或者NaN的结果
三元运算符,如x<y?x:y 返回x和y中较小的那个值
java中求一个数的平方根用sqrt,如:double x=Math.sqrt(y);
java中的幂运算用pow,如x的a次幂—double b=Math.pow(x,a);
在Math类中,为了达到最快的性能,所有的方法都使用计算机浮点单元中的例程,如果得到一个完全可以预测的结果比运行速度重要的话,那么就应该使用StrictMath类

强制类型转换,double x=9.78; int y=(int)x; 这样y的值就变成9.强制类型转换通过截断小数部分将浮点值转换为整型。如果想对浮点型进行舍入计算,以便得到最接近的整数,需要使用Math.round方法。如:
int y=(int)Math.round(x)现在y的值变为10
需要注意的是上面使用round进行舍入运算时依然进行了int的强制转换,是因为round方法返回的是long类型,你用int去接返回值,所以依然需要进行强制转换。

运算符优先级
优先级

字符串

java字符串就是Unicode字符序列
子串:String a="Hello"; String b=a.substring(0,3); b的结果是Hel 截取长度为下标0到2
字符串拼接
将一个字符串和一个非字符串拼接,非字符串会自动转化为字符串。
不可变字符串
如同上面的字符串a一样,永远都是H e l l o这个单元序列,如果真要修改字符串。也可以用一种方式,就是首先提取需要的字符,之后拼接上。
如:把Hello修改成Help:String a=a.substring(0,3)+“p”; 这种方式也是修改了指向,而没有真正的修改了Hello这个字符串,内存空间还是存在这个字符串的。
由于不能修改java字符串中的字符,所以在java文档中将String类的对象称为不可变字符串。就如同数字三永远是数字三一样。但是可以修改字符串变量的指向,可以指向一个新的字符串。
java编译器的神奇地方就是让字符串共享,就好像创建一个公共的空间,让变量指向存储池中相应字符串的位置。共享的效率远远高于提取和拼接字符串的效率
equals
equals是检测两个字符串内容是否相等,检查指向地址是否相等用==
相等返回true,不相等返回false。
使用 equalseIgnoreCase方法忽略字符串大小写。
equals比较时,可以使用字符串比较也可以使用变量比较,也可以字符串和变量混用。如:a.equalse(“Hello”)

一定不能使用==检测两个字符串是否相等,==这个运算符只能确定两个字符串是否在同一位置上,	当然如果字符串放在同一位置上,它们必然相等,但是完全有可能将内容相同的多个字符串的拷贝放在不同的位置上。

字符串API(常用)

cahr charAt(index)
返回给定位置的代码单元,除非对底层感兴趣,否则不用调用这个代码。
int compareTo(String other)
按照字典顺序,如果字符串位于other之前,返回一个负数,如果字符串位于other之后,返回一个正数,如果两个字符串相等返回0
boolean endsWith(String suffix)
如果字符串以suffix结尾,返回true
boolean equals(Object other)
如果字符串与other相等返回true
boolean equalsIgnoreCase(Object other)
如果字符串与other相等返回ture(忽略字符串大小写来进行比较)
int indexOf(String str)
int indexOf(String str,int fromIndex)
int indexOf(int cp)
int indexOf(int cp,int fromIndex)
返回字符串str或者代码点匹配的第一个子串开始的位置。这个位置从索引0或者fromIndex开始计算,如果在原始串中不存在str,返回-1。
int lastIndexOf(String str)
int lastIndexOf(String str,int fromIndex)
int lastIndexOf(int cp)
int lastIndexOf(int cp,int fromIndex)
返回与字符串str或代码点cp匹配的最后一个字符串开始的位置,这个位置从原始串尾端或从fromIndex开始计算。
int length()
返回字符串长度
String replace(CharSequence oldString,CharSquence newString)
返回一个新字符串,这个字符串用newString代替原始字符串中所有的oldString。可以用String或者StringBuilder对象作为CharSquence参数。
String toLowerCase()
返回一个新字符串,这个字符串将原始的字符串中的所有大写字母改成小写字母。
String toUpperCase()
返回一个新字符串,这个字符串将原始的字符串所有的小写字母改成大写字母。
String trim()
返回一个新的字符串,这个字符串删除原始字符串头部和尾部的空格。

构建字符串
有时候需要构建字符串,采用字符串连接的方式达到此目的效率较低。每次连接字符串,都会构建一个新的String对象,既耗时又浪费空间。使用StringBuilder类就可以避免这个问题的发生。
如果需要用许多的小段的字符串构建一个字符串,那么应该按照下列的步骤进行。首先构造一个空的字符串构造器。
StringBuilder builder=new StringBuilder();
当每次添加一部分内容的时候就用append方法:
builder.append(“cui”);
builder.append(“cg”);

在需要构建字符串时就调用toString方法。
String result=builder.toString();
StringBuffer是StringBuilder的前身,StringBuffer支持多线程,但是效率低。
StringBuilder不支持多线程,但是效率高。这也是为什么后来引入StringBuilder的原因(提高效率)

**StringBuilder API**
int length()
返回构建器或者缓冲器中的代码单元数量。
StringBuilder append(Stringc)
追加一个代码单元并返回this
StringBuilder append(char c)
追加一个代码单元并返回this
void setCharAt(int i,char c)
将第i个代码单元设置为c
StringBuilder insert(int offset,String str)
在offset处插一个字符串并返回this。
StringBuilder insert(int offset	,Char C)
在offset处插一个代码单元并返回this。
StringBuilder delete(int startIndex,int endIndex)
删除偏移量从startIndex到endIndex-1的代码单元并返回this
String toString()
返回一个与构建器或缓冲器内容相同的字符串。

猜你喜欢

转载自blog.csdn.net/cui929434/article/details/94718690