计算机二级Java笔记/重难点易错点总结(按章节归纳整理)

一、java的体系结构:

1、Java程序首先由编译器转换为标准字节代码,然后由虚拟机来解释执行

     Applet是java的一类特殊应用程序,它潜入HTML中,可以实现多媒体的用户界面或复杂的计算,可以在浏览器上运行;

2、JDK的bin目录下由编译器、解释器等工具;lib目录下是库文件;jre目录是java程序运行环境的代码库;

3、java类库的核心是java包,javax扩展包,Org包

     Java包包括:

     (1)java.lang包,封装编程要用的基本类,包括Object、Class、System、Interger、Thread,是java程序默认引用的包

     (2)java.awt包,封装抽象窗口工具包,提供构建和管理用户图形界面的功能

     (3)java.applet包,为Applet提供执行所需要的所有类,主要是访问Applet内容的通信类

     (4)java.io包,向程序提供文件输入输出操作的类

     (5)java.util包,提供实用程序类和集合类,如日期方法、Arrays等;

 

    Javax扩展包包括:

         javax.swing包,提供构建和管理应用程序的图形界面的轻量级构件

 

4、package语句在java程序中最多有一个,且位于最首位,用于使文件存入指定包;

      import语句在java程序中可以有任意个,必须在类定义之前;

      源文件中最多只能有一个public类(公共类),且与源文件名相同;

 

5、JDK中的主要工具:

     (1)javac.exe:java编译器,以.class为扩展名讲源代码译为字节码,并存入工作目录中,javac 文件名.java,其中,-d<目录>可以指定保存目录;

     (2)java.exe:java解释器,执行字节码,java 类名 [程序参数]

     (3)javadoc.exe:java文档生成器,对java源文件和包以MML格式产生AP文档,javadoc 包名 javadoc 文件名

     (4)javap.exe:java类分解器,对.class文件提供字节代码的反汇编并打印,javap 类名

二、Java简单数据类型概论:

1、java变量、常量、对象和类的命名规则要求只能以字母、下划线、美元符作为首字母,不能用数字或其他字符为首字母;

2、java命名出了第一条的要求,还有一些命名约定:

      (1)在声明类时,类名的首字母要求大写,并且类名要显示类的功能;构造函数与类名相同,所以构造函数的首字母要大写

      (2)接口名第一个字母要大写,同(1);

        (3)组成变量名各个单次的首字母要大写,但第一个单词的首字母要小写;

      (4)常量名要完全大写;

      (5)关键字均为小写;

 

3、java中所有数据类型的长度都是固定的,因此没有sizeof的保留字

4、对于浮点型数据,如果数字后没有“f”的符号,则默认为double型数据;

5、各个数据类型的数据范围

      (1)byte:8字节,-2^8~2^8-1,-128~127;

      (2)short:16字节,-2^16~2^16-1,-32768~32767;

      (3)int:32字节,-2^32~2^32-1;

      (4)long:64字节,-2^64~2^64-1;

      (5)float:32字节,

      (6)double:64字节,

      (7)char:16字节,0~65535(注意这个)

6、不能将boolean型数据转化为其他基本数据类型

7、自动转换方向:位数少的数据类型向位数多的数据类型转换;

     同时需要注意,字符型数据类型能向int数据类型自动转换,而字符串不可以

三、算术运算符

1、对于“+”号运算符,应当掌握:

     (1)两个操作数全为整数时,只要有一个数是long型,结果就是long型;

             两个数全是byte型或short型,表达式结果就是int型;

             两个数是浮点型,只要有一个术士double型,结果就是double型,否则为float型

     (2)“+”号在表示字符串连接的时,有两种情况:

              “abc”+3输出结果为abc3

               1+2+3+“abc”输出结果为6abc

2、移位运算符中:

    (1)算术右移>>:低位舍弃,高位补入原来高位的数值

    (2)算术左移<<:高位舍弃,低位补0

    (3)逻辑右移>>>:低位舍弃,高位补0

3、运算符的优先级:算术运算符,位移运算符,关系运算符,位逻辑运算符,布尔逻辑运算符,条件运算符,赋值运算符

四、流程控制

1、switch(expression)中,expression只能是int、short、byte、char,注意不能是浮点型数据及字符串类型

五、类、数组和字符串操作

1、类是java中的基本结构单元,所有方法均在类中定义

2、包含main方法的主类必须是公共类

3、抽象类中必须至少包含一个抽象方法,有抽象方法的类必须声明为抽象类,如错题集的第6题

4、在方法内部,super代表对父类对象的引用,this代表对当前对象的引用,注意关键字都是小写,不能首字母大写

5、构造方法中只能使用成员变量,当参数与成员变量同名时,用关键字this指定当前对象

6、构造方法没有返回值(但不需要用void声明),不能认为调用,只能用new自动调用

7、接口是一种只含抽象方法或常量的一种特殊的抽象类,它不包含成员变量和方法实现,只包含常量和方法的定义;

     注意:接口包含四类,第一类内部定义了抽象方法,第二类内部定义了常量,第三类内部定义了抽象方法和常量,第四类内部什么也没有,就是一个标志作用,例如Serializable接口时实现对象串行化的工具,是一个空接口。

 

8、类变量又称静态变量,用static修饰;在一个static方法内部,随时可以访问类中的static成员变量,但是要访问非static成员变量则必须寿险创建一个对象,然后通过对象访问实例变量,如错题集第7题;

9、java的内部类可以使用其所在类的静态成员变量和实例成员变量,也可以使用其所在类的方法中的局部变量

10、当基本数据类型的成员没有被初始化时,会获得一个默认初始值,如下表

 

11、java.util.ArrayList类是动态数组,是Array的复杂版本,在运行时能够动态地自动调整数组的大小,因此定义数组时不必限定数组的大小,在列表初始化时可以用add()方法对数组元素赋值;

 

12、java.lang.String用于处理长度不变的字符串;java.lang.StringBuffer用来处理长度变化的字符串;

六、异常处理

1、Throwable类是所有异常类的父类,分为Error和Exception两个子类;

2、throws关键字通常被应用在声明方法时,指定方法可能抛出的异常,多个异常用逗号隔开;

     throw关键字通常用于方法体中,并明确抛出一个异常对象(见《从入门到精通》P224例12.8)

 

七、输入输出及文件操作

1、File类提供的方法:

     (1)对文件名操作提供的方法:

             ①public String getName(),得到一个不包含路径的文件名;

             ②public String getParent(),得到文件的上一层目录;

             ③public String getPath(),得到文件路径名字符串,即路径文件名;

             ④public String[] list(),返回一个字符串数组,是此文件所在目录下的所有文件名列表;

             ⑤public String renameTo(File newName),返回重命名后的文件名;

             ⑥public String getAbsolutePath(),返回一个文件的绝对路径名;

             ⑦public File getParentFile(),得到文件对象的父路径名;

     (2)测试文件属性操作所提供的方法:

             ①public Boolean isAbsolute(),测定是否是绝对路径,返回布尔值;

             ②public Boolean isDirectory(),测定是否是目录;

             ③public Boolean exists(),测定文件是否存在;

             ④public Boolean canRead(),测定是否是可读文件;

             ⑤public Boolean canWrite(),测定是否是可写文件;

     (3)为文件信息操作和工具所提供的方法:

             ①public long length(),返回文件的字节长度;

             ②public long lastModified(),返回文件最后修改时间;

     (4)为目录操作所提供的方法:

             ①public Boolean mkdir(),创建目录;

             ②public Boolean mkdirs(),创建包含父目录的目录;

             ③public String[] list(),返回当前目录下的文件

 

2、随机文件流RandomAccessFile类,直接继承Object类,兼有输入和输出功能,即同时实现了DataInput和DataOutput接口。

     由于它是随机访问,因此文件读写一个记录的位置是任意的;

 

3、二进制文件可以作为FileOutputStream的构造方法的参数,而FileOutputStream对象作为DataOutputStream的构造方法的参数实现DataOutputStream类,如下例:

同理对input;

 

4、ByteArrayInputStream、ByteArrayOutputStream、StringBufferInputStream类是可以直接访问内存的;

5、Reader类和Writer类是抽象类,不能用来产生实例对象;

 

6、FilterInputStream和FilterOutputStream抽象类保证某时刻只有一个线程访问一个I/O流;

     Java对I/O访问所提供的同步处理机制是过滤流,字节流、字符流、文件流均不能提供同步;

 

7、关于对java的I/O部分的理解,见博客:

     http://blog.csdn.net/htq__/article/details/50993262?ticket=ST-26715-qyQeAEye3eKez9R5kPp5-passport.csdn.net

八、线程与对象串行化

1、线程和进程的区别:

      (1)多个进程的内部数据和状态都是完全独立的,而多线程是共享一块内存空间和一组系统资源,有可能互相影响;

      (2)进程是内核级的实体,进程结构的所有成分都在内核空间中,一个用户程序不能直接访问这些数据;

               线程是用户级的实体,县城结构驻留在用户空间中,能够被普通用户级方法直接访问;

      (3)程序、进程和线程的关系:

               程序是一段静态代码,它是应用软件执行的蓝本。进程对应与代码从加载到执行完毕的一个完整过程。作为执行蓝本的一段程序,可以被多次加载导系统的不同内存区域执行,形成不同的线程,而线程是比进程更小的单位。线程是程序运行中的一个子进程

 

2、线程模型包括:

       (1)一个虚拟的CPU;

       (2)此CPU所执行的代码;

       (3)代码所操纵的数据;

 

3、java中的线程体是由线程类的run()方法定义的,此方法定义线程的具体行为;

     实现run()方法有两种方式,实现Runnable接口和继承Thread类

4、在java.lang中,Runnable接口被定为:

          public interface Runnable{

                     void run();

          }

   

     通过Runnable接口建立线程的演示:

          public class X extends Thread implements Runnable{

                     public void run(){

                                System.out.println("this is run()");

                     }

                     public static void main(String args[]){

                                Thread t= new Thread(new X());          //将Runnable的一个实例作为参数传递给Thread类

                                t.start();

                     }

          }

 

5、新建的线程不会自动运行,必须调用线程的start()方法,start()方法会自动调用run()方法;

6、以同一个类的某一个对象为参数只能构造一个线程(见错题13)

7、注意,run()方法必须是不带参数的,且必须声明为void,即没有返回值;

 

8、线程的优先级划分为:MIN-PRIORITY(常数1)、NORM_PRIORITY(常数5)、MAX-PRIORITY(常数10);

     getPriority()方法用来获取线程的优先级,setPriority用来设置线程的优先级;

     创建线程后的任何时候都可以设置优先级

9、yield()方法只能使同优先级的线程有执行的机会;

10、一个程序中单独的、并发的线程对同一个对象进行访问的代码段称为临界区,在java中用关键字synchronized标识。

       由synchronized语句指定的每个对象设置一个锁,称为对象锁;当一个线程获得了对象锁之后,便拥有此对象的操作权,其他线程不能对此对象进行任何操作;

11、语句:synchronized(对象名);

                或public synchronized void 函数名(){ …… }

12、java中没有检测和避免死锁的专门机制,为了避免死锁,java程序中可以先定义获得锁的顺序,解锁按加锁的反序释放;

13、wait()和notify()都是java.lang.object类的方法,是实现线程通信的方法;

       wait()方法用于使线程等待并释放共享数据对象的锁,使其他线程能够获得此线程的锁;

       notify()方法用于通知正在等待的线程重新占有锁并运行;

 

14、阻塞状态分为对象锁阻塞状态,等待阻塞状态和其他阻塞状态;

15、可运行状态下:

                  start()方法:线程状态从新建状态转为可运行状态,但此时线程仅仅可以运行,不一定正在运行;

       运行状态下:

                  正常运行结束,则进入终止状态;

                  yield()方法:当前线程进入可运行状态;

                  sleep()方法:当前线程进入其他阻塞状态,睡眠时间到了将进入可运行状态

                   join()方法:当前线程进入其他阻塞状态;t.join()方法下当t线程结束或时间到后,线程进入可运行状态

                  wait()方法:当前线程进入等待阻塞状态;用notify()方法或时间到了之后,进入对象锁阻塞状态

                  线程请求对象的锁未获得,进入对象锁阻塞状态;此状态下,获得锁后进入可运行状态;

                  线程中有输入输出操作,进入阻塞状态;当输入输出操作结束后,进入可运行状态;

 

九、图形用户界面

swing部分:

1、Swing是java实现的轻量级结构,不依赖操作系统所提供的支持,这是它与AWT的最大区别;

2、Swing构件都是AWT的Container类的直接子类或间接子类;

      大多数Swing构件又是JComponent的子类,它是一个抽象类;

    

   

     javax.swing包中定义了两种类型的构件:顶层容器(JFrame,Japplet,Jdialog,JWindow)和轻量级构件;

 

3、Swing采用一种成为MVC的设计范式,即“模型-视图-控制器”,模型用来保存内容,视图用来显示内容,控制器用来控制用户的输入;

4、Swing虽然有顶层容器(JFrame,Japplet,Jdialog,JWindow),但是不能把构件直接添加到顶层容器中,必须先获取容器中的内容面板,在把构件加入内容面板中,例如:

      JFrame jf=new Jframe(title);

      Container container=jf.getContenPane();

        container.add(……);

 

猜你喜欢

转载自blog.csdn.net/captainCZY/article/details/81839966