第一章:1.面向对象、跨平台性、健壮性、安全性、可移植性、多线程性、动态性等。
2.JRE(Java Runtime Environment,Java运行时环境),它相当于操作系统部分,提供了Java程序运行时所需要的基本条件和许多Java基础类,例如,IO类、GUI控件类、网络类等。
JRE是提供给普通用户使用的,如果你只想运行别人开发好的Java 程序,那么,你的计算机上必须且只需安装JRE。
JDK(JavaDevelopment Kit,Java开发工具包),它包含编译工具、解释工具、文档制作工具、打包工具多种与开发相关的工具,是提供给Java开发人员使用的。
初学者学习和使用Java语言时,首先必须下载和安装JDK。
JDK中已经包含了JRE部分,初学者安装JDK后不必再去下载和安装JRE了。
3.path:path环境变量是系统环境变量中的一种,它用于保存一系列可执行文件的路径,每个路径之间以分号分隔。
当在命令行窗口运行一个可执行文件时,操作系统首先会在当前目录下查找是否存在该文件,如果不存在会继续在path环境变量中定义的路径下去寻找这个文件,如果仍未找到,系统会报错。
classpath:classpath环境变量也是系统环境变量中的一种,它用于保存一系列类(.class)文件的路径。
当Java虚拟机需要运行一个类时,会先在classpath环境变量中所定义的路径下去寻找所需的class文件。
如果classpath的路径最后有分号,则在classpath中找不到时,再到当前路径查找;如果最后无分号,则只在classpath设置的路径中查找。
4.JVM是JavaVirtual Machine的缩写,全称是Java虚拟机。
Java语言的一个非常重要的特性就是跨平台性,而Java虚拟机是实现这一特性的关键。
不同的操作系统需要使用不同版本的虚拟机,这种方式使得Java语言能够“一次编写,到处运行”。
Java 语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。
第二章:1.Java语言的八种基本数据类型有:byte字节型,占一个字节。
short短整型,占两个字节。
int整型,占4个字节。
long长整型,占8个字节。
float单精度浮点型,占4个字节。
double双精度浮点型,占8个字节。
char字符型,占两个字节。
boolean 型,表示逻辑值,有true和false两个值,分别占一个字节。
2.如果使用“&”在表达式之间进行连接,那么无论任何情况,“&”两边都会参与计算。
如果使用“&&”进行连接,当“&&”左边的表达式为false时,就不会执行其右边的表达式。
例如:定义int x = 2,y=0;执行输出表达式 boolean b = x<y&x/y>0;的值时,会发生被0除的异常,因为“&”右边的表达式x/y>0的表达式执行了;而boolean b = x<y&&x/y>0;是不会出现这种异常的,因为“&&”左边的表达式x<y为false,右边的表达式x/y>0就不会被执行。
3.方法重载指的是在一个类中可以声明多个同名的方法,而方法中参数的个数或者数据类型不一致。
调用这些同名的方法时,JVM 会根据实际参数的不同绑定到不同的方法。
4.char型变量是用来存储Unicode编码的字符的,Unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦。
不过,如果某个特殊的汉字没有被包含在Unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。
补充说明:Unicode编码占用两个字节,所以char类型的变量也是占用两个字节。
5.break语句:在switch条件语句和循环语句中都可以使用break语句。
当它出现在switch条件语句中时,作用是终止某个case 并跳出switch结构。
当它出现在循环语句中,作用是跳出循环语句,执行后面的代码。
continue语句:continue语句用在循环语句中,它的作用是终止本次循环,执行下一次循环。
return语句:return语句可以用于从当前的方法中退出,返回到该调用的方法的语句处,继续执行。
return 返回一个值给调用该方法的语句,返回值的数据类型必须与方法的声明中的返回值的类型一致。
第三章:1.构造方法是类的一个特殊成员,它会在类实例化对象时被自动调用。
而普通方法只有在使用的时候才会被调用。
在定义构造方法时要求方法名与类名相同、在方法名的前面没有返回值类型的声明、在方法中不能使用return语句返回一个值。
2.单例模式可以保证在整个程序运行期间针对该类只存在一个实例对象。
3.Java语言中一个显著的特点就是引入了垃圾回收机制,使得Java程序员在编写程序的时候不再需要考虑内存管理。
垃圾回收可以有效的防止内存泄露,有效地利用可以使用的内存。
垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。
4.在Java中共有四种代码块,它们分别是静态代码块、构造代码块、普通代码块和同步代码块。
静态代码块:在Java类中,使用一对大括号包围起来的若干行代码被称为一个代码块,用static关键字修饰的代码块称为静态代码块。
当类被加载时,静态代码块会执行,由于类只加载一次,因此静态代码块只执行一次。
在程序中,通常会使用静态代码块来对类的成员变量进行初始化。
构造代码块:直接在类中定义的没有加static关键字的代码块称为构造代码块。
构造代码块在每次创建对象时都会执行。
普通代码块:在方法或语句中出现的代码块就称为普通代码块。
普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定,即“先出现先执行”。
同步代码块:Java对于多线程的安全问题提供了专业的解决方式,就是同步代码块。
synchronized(对象)//这个对象可以为任意对象{需要被同步的代码}对象如同锁,持有锁的线程可以在同步中执行,没持有锁的线程即使获取CPU的执行权,也进不去。
第四章:1.在继承关系中,子类的方法与父类的某一方法具有相同的方法名、返回类型和参数列表,则称子类的该方法重写(覆盖)父类的方法。
2.多态意味着一个对象有着多种形态,可以在特定的情况下,表现不同的状态,从而对应着不同的属性和方法。
简单的说,多态就是使用父类类型的变量引用子类对象,根据被引用子类对象的特性,程序会得到不同的运行效果。
3.在Java中,使用abstract关键字修饰的类称之为抽象类。
抽象类是不能被实例化的,通常需要写一个子类来继承抽象类,同时实例化子类来获得该类的对象。
抽象类通常用于表示一种抽象的概念。
接口可以说是一种特殊的抽象类,接口中只能定义常量和抽象方法。
由于接口的特殊性,在定义时需要使用interface关键字。
4.方法重写(Overriding)和方法重载(Overloading)是Java多态性的不同表现。
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。
子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。
如果在同一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。
5.Error表示恢复不是不可能但很困难的情况下的一种严重问题,比如说内存溢出,仅靠修改程序本身是不能处理这样的情况的。
Exception表示程序本身可以处理的错误,在开发Java程序中进行的异常处理,都是针对Exception类及其子类。
在Exception 类的众多子类中有一个特殊的RuntimeException类,该类及其子类用于表示运行时异常,除了此类,Exception类下所有其他的子类都用于表示编译时异常。
第五章:1.一种是继承ng包下的Thread类,覆写Thread类的run()方法,在run()方法中实现运行在线程上的代码。
new Thread() {public void run(){}}.start();另一种就是实现ng.Runnable接口,同样是在run()方法中实现运行在线程上的代码。
new Thread(new Runnable(){public void run(){}}).start()2.调用sleep()方法,正在执行的线程主动让出CPU去执行其他线程,在sleep()方法指定的时间过后,CPU才会回到这个线程上继续往下执行,如果当前线程进入了同步锁,sleep()方法并不会释放锁,即使当前线程使用sleep()方法让出了CPU,但其他被同步锁挡住了的线程也无法得到执行。
wait()在一个已经进入了同步锁的线程内进行调用,让当前线程暂时让出同步锁,以便其他正在等待此锁的线程可以得到同步锁并运行。
当其他线程调用了notify()方法后,调用wait()方法的线程就会解除wait状态,当再次获得同步锁后,程序可以继续向下执行。
3.相同点:Lock能完成synchronized所实现的所有功能。
不同点:总的来说,Lock更加灵活。
Lock有比synchronized更精确的线程予以和更好的性能。
synchronized会自动释放锁,但是Lock一定要求程序员手工释放,并且必须在finally从句中释放。
synchronized 修饰方法时表示同一个对象在不同的线程中表现为同步队列,如果实例化不同的对象,那么synchronized就不会出现同步效果了。
4.在一个操作系统中,每个独立执行的程序都可以称为一个进程,也就是“正在运行的程序”。
而在进程中还可以有多个执行单元同时执行,这些执行单元可以看作程序执行的一条条线索,被称为线程。
Java运行环境是一个包含了不同的类和程序的单一进程。
线程可以被称为轻量级进程。
线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源。
第六章:1.String类是不可变类,即字符串值一旦初始化后就不可能改变。
StringBuffer是可变字符串类,类似String的缓冲区,可以修改字符串的值。
2.Date类用来表示某个特定的瞬间,能够精确到毫秒。
而在实际应用中,往往需要把一个日期中的年、月、日等信息单独返回进行显示或处理,这个类中的大部分方法都已被标记过时。