当前位置:文档之家› JAVA学习总结

JAVA学习总结

1、Print、Println、Printf的区别Print: 将信息显示在命令窗口中,输出光标定位在最后一个字符之后;Println:将信息显示在命令窗口中,输出光标换行定位在下一行开头;Printf: 将信息进行格式化显示在命令窗口中,输出光标定位在最后一个字符之后,其来自C语言,产生格式化输出的函数(来自stdio.h中);2、异常如果有多个catch 语句,那么捕获父类异常的catch 语句必须放在后面,否则它会捕获它的所有子类异常,而使得子类异常catch 语句永远不会执行。

一般情况下 finally 语句块一般放在最后一个catch 语句块后,不管程序是否抛出异常,它都会执行。

throw与throws的区别区别一:throw 是语句抛出一个异常;throws 是方法抛出一个异常;throw语法:throw <异常对象> 在方法声明中,添加throws子句表示该方法将抛出异常。

throws语法:[<修饰符>]<返回值类型><方法名>([<参数列表>])[throws<异常类>]其中:异常类可以声明多个,用逗号分割。

区别二:throws可以单独使用,但throw不能;区别三:throw要么和try-catch-finally语句配套使用,要么与throws配套使用。

但throws可以单独使用,然后再由处理异常的方法捕获。

可检测异常和非检测异常Java的可检测异常和非检测异常泾渭分明。

可检测异常经编译器验证,对于声明抛出异常的任何方法,编译器将强制执行处理或声明规则。

非检测异常不遵循处理或声明规则。

在产生此类异常时,不一定非要采取任何适当操作,编译器不会检查是否已解决了这样一个异常。

有两个主要类定义非检测异常:RuntimeException和Error。

对于未检查异常,在方法抛出时可以不用throws 来声明,而检查异常则必须在throws声明后才能进行throw 抛出异常。

为什么Error子类属于非检测异常?这是因为无法预知它们的产生时间。

若Java应用程序内存不足,则随时可能出现OutOfMemoryError;起因一般不是应用程序中的特殊调用,而是JVM自身的问题。

另外,Error类一般表示应用程序无法解决的严重问题,故将这些类视为非检测异常。

RuntimeException类也属于非检测异常,一个原因是普通JVM操作引发的运行时异常随时可能发生。

与Error不同,此类异常一般由特定操作引发。

但这些操作在Java应用程序中会频繁出现。

例如,若每次使用对象时,都必须编写异常处理代码来检查null引用,则整个应用程序很快将变成一个庞大的try-catch块。

因此,运行时异常不受编译器检查与处理或声明规则的限制。

将RuntimeException类作为未检测异常还有一个原因:它们表示的问题不一定作为异常处理。

可以在try-catch结构中处理NullPointerException,但若在使用引用前测试空值,则更简单,更经济。

同样,可以在除法运算时检查0值,而不使用ArithmeticException。

3、JAVA中String,StringBuffer,StringBuilder之间的区别∙String:定长的字符串,它的内容是不可以改变的,正因为如此,编译器可以让字符串共享.∙StringBuffer:可变长的字符串缓冲区,多线程操作是安全的,并且在字符串连接操作上提供了性能和效率都优于String类的"+"的append()方法,因此如果需要大量的频繁的进行字符连接操作时,优先采用StringBuffer的append()方法.如果只是简单的字符串连接可以采用String的"+"来提高代码的可读性.∙StringBuilder:是StringBuilder的一个等价类,区别在于StringBuilder是非线程安全的,但正因为如此少了很多同步的操作,在效率上要高于StringBuilder,因此如果不涉及多线程操作,可以优先考虑StringBuilder来提高方法的执行效率.简单点说,区别如下1.String 是不可变的字符串。

2.StringBuffer是可变的字符串,线程安全的。

3.StringBuilder是可变的字符串,非线程安全的。

性能上:StringBuilder > StringBuffer > String线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。

不会出现数据不一致或者数据污染。

线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。

从 JDK 5 开始,为StringBuffer补充了一个单个线程使用的等价类,即 StringBuilder。

与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。

将 StringBuilder 的实例用于多个线程是不安全的。

如果需要这样的同步,则建议使用 StringBuffer。

举例如下:public class Test {public static void stringReplace(String text) {//把textString的地址copy给text,text也指向了textString的"java"//text.replace('j', 'i');的结果是"iava"//text = text.replace('j', 'i');就是重新使text指向"iava"//由于该方法的返回类型是void,所以原来的textString没变text = text.replace('j', 'i');System.out.println (text);}public static void bufferReplace(StringBuffer text) {//textBuffer的地址copy给text//然后沿着text指向的字符串(其实也就是textBuffer指向的对象)操作,添加一个"C"//虽然没有任何返回,但是这个操作影响到了textBuffer所指向的字符串//所以上个方法打印"java",这个方法打印"javaC"text = text.append("C");}public static void main(String args[]) {String textString = new String("java");StringBuffer textBuffer = new StringBuffer("java");stringReplace(textString);bufferReplace(textBuffer);System.out.println(textString + textBuffer);}} 输出:iavajavajavaC采用String对象时,即使运行次数仅是采用其他对象的1/100,其执行时间仍然比其他对象高出25倍以上;而采用StringBuffer对象和采用StringBuilder对象的差别也比较明显,前者是后者的1.5倍左右。

由此可见,如果我们的程序是在单线程下运行,或者是不必考虑到线程同步问题,我们应该优先使用StringBuilder类;当然,如果要保证线程安全,自然非StringBuffer莫属了。

4、面向对象的三个基本特征:封装、继承、多态面向对象三个基本特征.doc5、JAVA垃圾回收机制java垃圾回收机制介绍.doc6、Java中static的作用java中static作用详解.docx有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象。

通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。

在成员的声明前面加上关键字static(静态的)就能创建这样的成员。

如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。

你可以将方法和变量都声明为static。

static 成员的最常见的例子是main( ) 。

因为在程序开始执行时必须调用main() ,所以它被声明为static。

声明为static的变量实质上就是全局变量。

当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。

声明为static的方法有以下几条限制:◆它们仅能调用其他的static 方法。

◆它们只能访问static数据。

◆它们不能以任何方式引用this 或super下面是该程序的输出:从结果可以看出类中static块程序是在类被装载的时候开始执行。

而不是在创建对象的时候执行。

java static 代码段1 在用类名调用静态方法之前就被调用.2 在实例化一个对象的时候也被调用.而且先于构造函数被调用.也就是说,我们创建一个对象,那么首先先调用static代码段,然后再调用构造函数3 无论实例化几次或者调用几次方法,static代码段都执行一次...比如,你创建了类的两个实例,但是只有创建第一个实例的时候static代码段才被执行.创建第二个的时候将不执行...使用类名调用静态方法也同理4 static代码段可以有多个.但是,效果和整合在一起没什么区别类中的static代码段,我们可以认为是当类首次被虚拟机加载时执行的代码,加载完成后执行类的构造函数。

对于继承而言,首先执行基类的构造函数,在执行本身的构造函数。

static的用法,static可以修饰变量、方法,也可以修饰类,但是static类只能是内类。

只有声明成static 的内部类,里面的成员才可以声明成static,否则如果声明成static 的类,不就是全局的了吗?它就相当放在外面了,已经不再是内部类了,并且它的对象中将不包含指向外包类对象的指针,所以不能再引用外包类了静态内部类在概念和实现上都十分简单,基本上来说就是在您的主类中定义一个静态类:public class Foo{// ....public static class Test{public static void main (String[] args){// ....}}}7、java静态变量与全局变量区别及存放位置java静态变量存放区静态的意思:只有一份!不存在拷贝!虚拟机内存分为四个区:stack segment,heap segment,data segment,code segment;stack 区存放函数参数和局部变量;heap 区存放对象;data 区存放static 的变量或者字符串常量;code 区存放类中的方法;所以,静态变量是存放在data区的静态变量属于类的属性。

相关主题