您的位置:首页 > 编程语言 > Java开发

java学习——java基础(二)之关键字

2017-08-17 22:33 239 查看
写在前面:度日如年,主管又拖到了下周,对未来充满了彷徨与忐忑。我只是一个刚毕业初入社会的小白,只是单纯的希望做自己喜欢的工作,过自己喜欢的生活。只觉得,大人的世界好复杂,还是代码亲切,木有套路。

今天主要回顾下java中常用的关键字。

1.Arrays常用方法

int[] a = new int[]{90, 23, 45, 3, 56}
System.out.println(Arrays.toString( a ));
Arrays.sort(a);
System.out.println(Arrays.binarySearch());


其中Arrays.toString(a)打印是将数组a的元素以字符串的形式返回,数组—>字符串;
Arrays.sort(a)是将数组a按照升序排列

Arrays.binarySearch()在指定数组中查找指定元素,返回元素的索引,如果没有找到返回-1。
注意:使用查找的功能的时候,数组一定要先排序。

2.常用关键字

this关键字:代表所在函数所属对象的引用。
特点:
this只能在非静态中(没有static修饰的)函数使用
构造函数间相互调用必须放在构造函数的第一个语句中,否则编译错误
可以解决构造函数中对象属性和函数形参的同名问题

super关键字:主要存在于子类方法中,用于指向子类对象中父类对象。可以访问父类的属性,函数以及构造函数
特点:
子类的构造函数默认第一行会默认调用父类无参的构造函数,隐式语句
构造函数间的调用只能放在第一行,只能调用一次。

super() 和this()不能同时存在构造函数第一行。

static关键字:为了实现对象之间重复属性的数据共享,主要用于修饰类的成员
特点:
静态成员变量:使用类名直接调用,也可以通过对象访问
静态函数中不能访问非静态成员变量,只能访问静态变量。
静态方法不可以定义this,super关键字
非静态函数中可以访问静态成员变量
static修饰的成员在共享区中。优先于对象存在。
静态代码块随着类的加载而加载。只执行一次,优先于主函数。用于给类进行初始化。

final关键字:主要用于修饰类、类成员、方法、以及方法的形参。
特点:
是一个常量,常量名大写,必须赋初值
该关键字一般和static关键字结合使用
该类是最终类,不能被继承

finally关键字:只有一种情况,但是如果JVM退出了System.exit(0),finally就不执行。

3.异常throw和throws的区别

相同点:都是用于做异常的抛出处理的。
不同点
使用的位置::throws 使用在函数上,throw使用在函数内
后面接受的内容的个数不同:
throws 后跟的是异常类,可以跟多个,用逗号隔开。
throw 后跟异常对象。

总结
(1)try语句不能单独存在,可以和catch、finally组成 try...catch...finally、try...catch、try...finally三种结构。
(2)catch语句可以有一个或多个,finally语句最多一个,try、catch、finally这三个关键字均不能单独使用。
(3)try、catch、finally三个代码块中变量的作用域分别独立而不能相互访问。如果要在三个块中都可以访问,则需要将变量定义到这些块的外面。
(4)多个catch块时候,Java虚拟机会匹配其中一个异常类或其子类,就执行这个catch块,而不会再执行别的catch块。(子类在上,父类在下)。
(5)throw语句后不允许有紧跟其他语句,因为这些没有机会执行
(6)如果一个方法调用了另外一个声明抛出异常的方法,那么这个方法要么处理异常,要么声明抛出。

4.包机制

包的用法:

package pack;
import pack1.Demo1;


生成jar包:jar cvf test.jar cn(cn为class文件)

编译java文件:javac -d xxxxx.java

5.访问修饰符

publicprotecteddefaultprivate
同一类中yesyesyesyes
同一包中yesyesyes
子类yesyes
不同包中yes 
注意:
(1)局部变量前不能放置任何访问修饰符 (private,public和protected)。final可以用来修饰局部变量

6.集合类

collection,iterate和map一级、

collection有List,Set和queue。

其中List分为ArrayList和Vector,它们功能相同,ArrayList采用异步方式,不安全。Vector采用同步,线程安全。

其中Set分为HashSet和TreeSet。HashSet是散列存放,TreeSet是有序存放。

map有HashMap和HashTable。都是无序存放,key不允许重复。

集合类具体关系如下图所示:



集合类具体用法以及源码后面单独进行讲解。

7.final,finally和finalize的区别

final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

finally是异常处理语句结构的一部分,表示总是执行。

finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

finalize()方法:

在JVM垃圾收集器收集一个对象之前 ,一般要求程序调用适当的方法释放资源,但在没有明确释放资源的情况下,Java提供了缺省机制来终止化该对象心释放资源,这个方法就是finalize()。它的原型为: 
protected void finalize() throws Throwable
在finalize()方法返回之后,对象消失,垃圾收集开始执行。

8.包装类和基本数据类型

基本数据类型:byte, short,int,float,double,char,boolean,long
包装类:Byte,Short,Integer,Float,Double,Character,Boolean,Long
区别:包装类是对象,拥有方法和字段,而基本类型不是。另外一个区别是,包装类是引用传递,而基本类型是值传递。

9.String、StringBuffer和StringBuilder的区别

String(字符串常量)
StringBuffer(字符串变量,线程安全)
StringBuilder(字符串变量,线程不安全)
(1)三者在执行速度方面的比较:StringBuilder >  StringBuffer  >  String
(2)使用上(StringBuffer,StringBuilder)优先于String,因为String是不可变对象。

举个例子:
String s = "abcd";
s = s+1;
System.out.print(s);// result : abcd1


JVM解析代码过程:

首先创建对象s,赋予一个abcd,然后再创建一个新的对象s用来执行第二行代码,也就是说之前对象s并没有变化,所以String类型是不可改变的对象,由于这种机制,每当用String操作字符串时,实际上是在不断的创建新的对象,而原来的对象就会变为垃圾被GC回收掉,可想而知这样执行效率会有多底。而StringBuffer与StringBuilder是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,这样就不会像String一样创建一些别的对象进行操作了,当然速度就快了。

StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuffer要更加适合一些。有一个最显著的区别在于,对于StringBuffer对象的每次修改都会改变对象自身,这点是和String类最大的区别。由于StringBuffer是线程安全的,所以在多线程程序中也可以很方便的进行使用,但是程序的执行效率相对来说就要稍微慢一些。

StringBuffer和StringBuilder类似,默认缓冲区的容量是16,具体操作实例:
初始化:
StringBuffer str = new StringBuffer();


带有内容初始化:
StringBuffer str = new StringBuffer(“abc”);


String和StringBuffer相互转化:
String s = “abc”;
StringBuffer sb1 = new StringBuffer(“123”);
StringBuffer sb2 = new StringBuffer(s);   //String转换为StringBuffer
String s1 = sb1.toString();              //StringBuffer转换为String


常用方法:
public StringBuffer append(boolean b)//追加内容到当前StringBuffer对象的末尾
public StringBuffer deleteCharAt(int index)//删除指定位置的字符,然后将剩余的内容形成新的字符串。
public StringBuffer delete(int start,int end)//删除指定区间以内的所有字符,包含start,不包含end索引值的区间。
public StringBuffer insert(int offset, boolean b)//在StringBuffer对象的索引值4的位置中插入内容,然后形成新的字符串。
public StringBuffer reverse()//将StringBuffer对象中的内容反转,然后形成新的字符串。
public void setCharAt(int index, char ch)//修改对象中索引值为index位置的字符为新的字符ch
public void trimToSize()//将StringBuffer对象的中存储空间缩小到和字符串长度一样的长度,减少空间的浪费。
public StringBuffer replace(int start, int end, String str)//指定的字符串中的子字符串替换字符


总结:
(1)如果要操作少量的数据用 = String

(2)单线程操作字符串缓冲区下操作大量数据 = StringBuilder

(3)多线程操作字符串缓冲区下操作大量数据 = StringBuffer

10.Object对象

Object描述的是所有类的通用属性与方法。
toString() 返回对象的描述信息。直接输入一个对象的时候,会调用对象的toString方法。
equals()  返回的是比较的结果  如果相等返回true,否则false,比较的是对象的内存地址值。
hashCode() 返回该对象的哈希码值: 采用操作系统底层实现的哈希算法,同一个对象的哈希码值是唯一的。

11.String类

//获取方法:
int length()  //获取字符串的长度
char charAt(int index) //获取特定位置的字符 (角标越界)
int indexOf(String str) //获取特定字符的位置(overload)
int lastIndexOf(int ch) //获取最后一个字符的位置

//判断方法:
boolean endsWith(String str) //是否以指定字符结束
boolean isEmpty()//是否长度为0 如:“” null V1.6
boolean contains(CharSequences) //是否包含指定序列 应用:搜索
boolean equals(Object anObject) //是否相等
boolean equalsIgnoreCase(String anotherString) //忽略大小写是否相等

//转换方法:
String(char[] value) //将字符数组转换为字符串
String(char[] value, int offset, int count)
Static String valueOf(char[] data)
static String valueOf(char[] data, int offset, int count)
char[] toCharArray()  //将字符串转换为字符数组

//其它方法:
String replace(char oldChar, char newChar) //替换
String[] split(String regex) //切割
String substring(int beginIndex)
String substring(int beginIndex, int endIndex)//截取字串
String toUpperCase() //转大写
String toLowerCase() //转小写
String trim() //去除空格


12.系统调用

System:可以获取系统的属性。

Runtime:主要描述的是应用程序运行的环境。

Date:封装的是系统的当前时间.。但是Date已经过时了,sun推荐使用Calendar类。

Calendar::该类是一个日历的类,封装了年月日时分秒时区。

Math:类封装了很多数学的功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息