课程总结 

  大二的第一学期已经过去了,时间过得很快,匆匆间16周快要结束,在这一学期里从开始接触Java到后来写出很多的代码,程序,一步步了解学习,一点点得当运用,我已经对Java有了一些基本的认识。最初接触的Java的时候很疑惑,为什么需要输入前面那些繁琐的代码,后面一点点发现Java的一个个代码在很多细节地方有着很大的用处,比起C语言来说更加精炼。这使我对Java的兴趣更加浓烈,我会更加努力的学习,争取早日学会并做出属于自己的软件程序。下面是我对自己学到的Java知识的了解:

一、Java语言的特点

1、简洁有效

2、可移植性

3、面向对象

4、解释性

5、适合分布式计算

6、拥有较好的性能

7、健壮、防患于未然

8、具有多线程处理能力

9、具有较高的安全性

10、是一种动态语言

11、是一种中性结构

二、Java基础程序设计

1、Java的数据类型可分为基本数据类型和引用数据类型两种。

2、布尔类型的变量,只有ture和false两个值。

3、数据类型的转换可分为“自动类型转换”与“强制类型转换”两种。

4、算术运算符的成员有加法运算符、减法运算符、乘法运算符、除法运算符、余数运算符。

5、if语句可依据判断的结果来决定程序的流程。

6、自增与自减运算符有着相当大的便利性,善用他们可提高程序的简洁程度。

8、括号是用来处理表达式的优先级的,也是Java的运算符。

9、占用较少字节的数据类型会转换成占用较多字节的数据类型;有short和int类型,则用int类型;字符类型会转换成short类型;int类型转换成float类型;布尔类型不能转换成其他的类型。

三、Java面向对象程序:

面向对象编程(基础篇):

1.类与对象。关于类的定义、状态与行为,类与对象的关系,对象的创建与使用。
2.封装性(setter与getter)。
3.构造方法(类名 对象名称 = new 类名称)。
4.匿名对象。
5.this关键字(强调本类中方法,表类属性,使用this调用本类构造方法,this表示当前对象)。
6.static关键字(所有对象共享,类名称直接调用)。
7.String类
①两种实例化方法(例给name赋值zy):直接赋值(String name= "zy");直接调用String类的构造方法(String name=new String("zy"))。
②两种比较内容方法:“==”,“equals()”(将内容进行比较)。
③String类中常用方法(jdk中可查看)。
④注意:字符串就是一个String类的匿名对象;使用String类声明后的字符串内容不可改变。

面向对象(高级篇):

继承:
通过子类扩展父类功能(class 父类{} class 子类 extends 父类{})。
子类不可直接访问父类的私有操作(要通过setter或getter),但可调用父类私有方法。
③子类对象实例化之前先调用父类的构造方法。值得注意的是,父类的构造方法中既有无参构造方法(可系统给,可自己写)又有有参构造方法,我们需要在父类中自己写上一个无参构造,防止调用时this与super并用时报错(super调用无参构造)。
④覆写时,子类只可扩大权限,不可缩小(例父:private,子:public)。
⑤因this与super都需要放在构造方法的首行,故不可同时出现。且均不可用于main方法中。
final关键字:
①使用final声明的类不能有子类。
②final声明的方法不能被子类覆写(即不能被继承)。
③final声明的变量即成为常量,常量不可被修改。
抽象类:
普通类不可有抽象方法,抽象类可以有普通方法及构造方法。抽象类的方法和抽象类都要使用abstract关键字声明。抽象类必须被子类继承,故抽象方法不能用private封装。抽象类必须被子类继承,子类(如果不是抽象类)必须覆写抽象类中全部的抽象方法
多态性;
对象多态性:

 

 

 


抽象类(模板):

抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。

由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。

父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。


接口(标准):

在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

 

接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。

 

除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。

 

接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。

 

接口特性

 

  • 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
  • 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
  • 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。

 

异常的捕获及处理

1、异常:
a、异常处理:try{...}catch{...}finally{...}
b、throw关键字:用户手工抛出异常类的实例化对象。throws:用于方法声明,表示此方法不处理异常,将异常交给程序被调用处进行处理。
c、RuntimeException是Exception的子类,其定义的异常可以选择性进行处理。
d、自定义异常只需要继承Exception类进行强制性处理。

e、Exception类与RuntimeException类

1、Exception在程序中是必须使用try…catch进行处理。
2、RuntimeException可以不使用try…catch进行处理,但是如果有异常产生,则异常将由JVM进行处理。

多线程

       线程对象是可以产生线程的对象。比如在Java平台中Thread对象,Runnable对象。线程,是指正在执行的一个指点令序列。在java平台上是指从一个线程对象的start()开始,运行run方法体中的那一段相对独立的过程。相比于多进程,多线程的优势有:

    (1)进程之间不能共享数据,线程可以;

    (2)系统创建进程需要为该进程重新分配系统资源,故创建线程代价比较小;

    (3)Java语言内置了多线程功能支持,简化了java多线程编程。

一、创建线程和启动

  (1)继承Thread类创建线程类

通过继承Thread类创建线程类的具体步骤和具体代码如下:

   • 定义一个继承Thread类的子类,并重写该类的run()方法;

   • 创建Thread子类的实例,即创建了线程对象;

   • 调用该线程对象的start()方法启动线程。

 class SomeThead extends Thraad   { 
    public void run()   { 
     //do something here  
    }  
 } 
 
public static void main(String[] args){
 SomeThread a = new SomeThread();      
     a.start(); 
}

2)实现Runnable接口创建线程类

通过实现Runnable接口创建线程类的具体步骤和具体代码如下:

   • 定义Runnable接口的实现类,并重写该接口的run()方法;

   • 创建Runnable实现类的实例,并以此实例作为Thread的target对象,即该Thread对象才是真正的线程对象。

class SomeRunnable implements Runnable   { 
  public void run()   { 
  }  
} 
Runnable b = new SomeRunnable();   
Thread b = new Thread(b);   
b.start(); 

二、线程的生命周期

                        

1、新建状态

       用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新生状态。处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态(runnable)。

注意:不能对已经启动的线程再次调用start()方法,否则会出现Java.lang.IllegalThreadStateException异常。

2、就绪状态

       处于就绪状态的线程已经具备了运行条件,但还没有分配到CPU,处于线程就绪队列(尽管是采用队列形式,事实上,把它称为可运行池而不是可运行队列。因为cpu的调度不一定是按照先进先出的顺序来调度的),等待系统为其分配CPU。等待状态并不是执行状态,当系统选定一个等待执行的Thread对象后,它就会从等待执行状态进入执行状态,系统挑选的动作称之为“cpu调度”。一旦获得CPU,线程就进入运行状态并自动调用自己的run方法。

提示:如果希望子线程调用start()方法后立即执行,可以使用Thread.sleep()方式使主线程睡眠一伙儿,转去执行子线程。

3、运行状态

      处于运行状态的线程最为复杂,它可以变为阻塞状态、就绪状态和死亡状态。

处于就绪状态的线程,如果获得了cpu的调度,就会从就绪状态变为运行状态,执行run()方法中的任务。如果该线程失去了cpu资源,就会又从运行状态变为就绪状态。重新等待系统分配资源。也可以对在运行状态的线程调用yield()方法,它就会让出cpu资源,再次变为就绪状态。

注: 当发生如下情况是,线程会从运行状态变为阻塞状态:

     ①、线程调用sleep方法主动放弃所占用的系统资源

     ②、线程调用一个阻塞式IO方法,在该方法返回之前,该线程被阻塞

     ③、线程试图获得一个同步监视器,但更改同步监视器正被其他线程所持有

     ④、线程在等待某个通知(notify)

     ⑤、程序调用了线程的suspend方法将线程挂起。不过该方法容易导致死锁,所以程序应该尽量避免使用该方法。

当线程的run()方法执行完,或者被强制性地终止,例如出现异常,或者调用了stop()、desyory()方法等等,就会从运行状态转变为死亡状态。

4、阻塞状态

      处于运行状态的线程在某些情况下,如执行了sleep(睡眠)方法,或等待I/O设备等资源,将让出CPU并暂时停止自己的运行,进入阻塞状态。 

在阻塞状态的线程不能进入就绪队列。只有当引起阻塞的原因消除时,如睡眠时间已到,或等待的I/O设备空闲下来,线程便转入就绪状态,重新到就绪队列中排队等待,被系统选中后从原来停止的位置开始继续运行。有三种方法可以暂停Threads执行:

5、死亡状态

      当线程的run()方法执行完,或者被强制性地终止,就认为它死去。这个线程对象也许是活的,但是,它已经不是一个单独执行的线程。线程一旦死亡,就不能复生。 如果在一个死去的线程上调用start()方法,会抛出java.lang.IllegalThreadStateException异常。

三、线程管理

     Java提供了一些便捷的方法用于会线程状态的控制。具体如下:

1、线程睡眠——sleep

      如果我们需要让当前正在执行的线程暂停一段时间,并进入阻塞状态,则可以通过调用Thread的sleep方法。

IO:

字节流与字符流相关的基本操作

1.字节流(操作byte数据)
①输出数据:OutputStream类
②输入数据:InputStream类
2.字符流
①输出数据:Writer类
②输入数据:Reader类
3.两者区别:字节流在操作时本身不会用到缓冲区,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件
4.操作流程:
①使用File类打开一个文件
②通过字节流或字符流的子类,指定输出的位置
③进行读/写操作
④关闭输入/输出

转换流等以及System类对IO的支持相关内容

1.转换流
①OutputStreamWriter类:Writer的子类,将输出字符流变字节流
②InputStreamReader类:Reader的子类,将输入字节流变字符流
2.内存操作流
①字节内存操作流:内存输入流(ByteArrayInputStream) 内存输出流(ByteArrayOutputStream)
②字符内存操作流:内存输入流(CharArrayReader) 内存输出流(CharArrayWriter)
③ByteArrayInputStream: 程序->InputStream->输出到内存
④ByteArrayOutputStream:程序<-OutputStream<-内存
3.管道流
4.System类
①System.out 即向显示器上输出(希望用户可以看见的信息
②System.err 表示的是错误的标准输出(不希望用户可以看见的信息
③System.in 从键盘中读取数据

图形界面

组件和容器

顶层容器有小应用程序(Applet和JApplet)、对话框(Dialog和JDialog)、框架(Frame和JFrame)。这些容器都存在于java.swing*;中.

一般容器有面板(JPanel)、滚动窗格(JScrollPane)、分裂窗格(JSplitPane)、选项卡窗格(JTabbedPane)和工具条(JToolBar). 

专用容器有什么作用。。这个我也不知。 

基本控件有命令式按钮(JButton)、单选按钮(JRadioButton)、复选框(JCheckBox)、组合框(JComboBox)和列表框(JList)等

组件1.不可编辑的

有标签(JLabel)、进度条等。

2.可编辑的

有文本编辑框(JTextField)、文本区域(JTextArea)等

8.2布局管理器

每个容器都有其默认的布局管理器

常用的布局方式有6种

1.FLowLayout

2.GridLayout

3.BorderLayout

4.BoxLayout

5.GridBagLayout

6.CardLayout

组合布局方式我的理解是框架中不能同时有两个容器两个布局存在,只可以容器嵌套。如果有不对之处,请大家指正!

还有自定义布局管理器还没弄,明天补上!我估计是根据坐标具体位置来定义的了

8.3事件处理模型

分为鼠标事件和键盘事件模型

java一般通过事件对象来封装事件,其中常用的事件有:java.awt.event.*;中的1.ActionEvent; 2.AdjustmentEvent  3.ComponentEvent  4.FocusEvent  5.ItemEvent  6.KeyEvent

7.MouseEvent  8.MouseWheelEvent  9.WindowEvent这些都是类中的事件。

posted on 2019-12-13 21:48  百花丶  阅读(239)  评论(0编辑  收藏  举报