课程总结

java课程学习总结
  
(一)java须知 
 1.java语言与c语言有许多相似点,但又有很大的区别。java源程序主要有5部分组成:package语句(用来定义程序所属的包,放在程序的最前面,可省略)、import语句(用来引入其它包中的类,放在类定义之前)、类(class是定义类的关键字,类是整个源程序的核心部分)、方法(每个java程序只允许有一个main()主方法)、语句(语句有复值语句、调用方法语句和对象定义语句等,每条语句占一行,以分号结束) 
 2. 标识符、注释与c语言相同。 
3.注意代码书写的规范性和速度性:类名首字母大写,变量、
main()主方法语句和方法及对象的首字母小写。但在c#中main()主方法都是大写的 
 4.掌握循环语句结构。   

 (二)java面向对象(oop)(类与对象,继承抽象类与接口) 
 1. oop的三大特性:在oop中,现实世界的所有事物都成为对象。  (1)封装:将对象的数据和方法结合,由方法将对象的数据实现,并实现对象的数据隐藏。 
 (2)继承:子类继承父类的变量和方法,实现代码的重用。具有传递性。 
 (3)多态:对外一个接口,内部多种实现。使程序具有可扩展性,可维护性。 
 2.类:是对某一类事物的描述,是抽象的、概念上的定义; 
 对象:是对类的具体实现,可以说是个实例。在使用类之前必须先定义再声明并创建对象。  3.类与对象的定义: 
 [类的修饰符]class类名[extends 父类][implements 接口]{  类的头部 
 成员变量的声明  成员方法的声明 
 类名 对象名;//声明对象 
 对象名=new 类名();//创建对象 
 对象名.成员变量名;//访问对象的成员变量 
 对象名.成员方法名();//访问对象的成员方法  } 
 (1)类体:包括类成员变量的声明、构造方法和成员方法的声明与定义。 
 (2)类的封装:可以通过public、protected、private和默认的访问权限来定义。 
 (3)方法重载:允许在一个类的定义中,多个方法使用相同的方法名称,但是不同的参数。方法的重载也是实现多态性的一种形式。this.(该类自己)。 
 (4)构造方法:一般情况默认为不带参数,并且方法体为空。但有其它构造方法时必须在类中先声明。构造方法很特殊:名称必须与类名相同,且不能有返回值,更不能直接调用该方法,必须通过new来调用它。 
 (5)对象的创建:声明变量,实例化,通过new。 
 (6)对象的使用:引用对象的变量,调用对象的方法。 
 (7)类的继承:java类的继承是单继承,不能有多继承。通过extends来实现继承。被继承的类叫父类,继承父类的类叫子类。  创建子类的格式:class  子类名  extends 父类名{  } 
 (8)extends关键字:定义的类中指出父类,默认的父类都是object类。 
 (9)super关键字:指向它所在类的父类。用来引用父类中的成员方法或成员变量。调用父类中的方法。super()表示调用父类的构造方法,和this一样必须放在第一行,this()用于调用本类的构造方法。如果没有定义构造方法,就会调用父类的无参构造方法,即super() 
 (10)子类对象的创建与实例化步骤:分配对象所需的空间、继承并初始化、继承并调用构造方法。 
 (11)方法重写:子类中父类成员的隐藏,当变量名相同时,子类成员的变量会隐藏父类成员变量。当子类的方法与父类具有相同的名字、参数、类型的返回值时,子类重写了父类的方法,父类中的方法被隐藏起来。子类可以改写父类所实现的功能,但子类中重写的方法必须与父类的方法有一样的返回值、方法名、以及参数。注意的是重写时访问修饰符不能变小,即访问权限不能缩小,可以扩大或与其相等。 
 (12)多态:指的是一个对象的行为方式可以在子类中使用,子类的对象继承了父类的对象,是从一个父类派生的许多子类都可以有相同的类型,将一种子类对象引用转换成父类对象的引用。父类对象的调用可以在子类对象中实现。 
 (13)接口:java中的接口是一种特殊的抽象类,是若干完成某一特定功能的没有方法体的方法(抽象方法)和常量的集合  (14)接口与抽象类以及继承的区别: 
a:接口中不能有非抽象方法,但抽象类中可以有。  b:一个类能实现多个接口,但只能有一个父类。 
 c:接口并不属于继承结构,它实际与继承无关,所以无关的类也可以实现同一个接口。 
 d:抽象类:包含了抽象方法的类叫抽象类。如果一个类中包含了一个或多个抽象方法,类就必须指定成abstract(抽象)。 
 抽象类的定义:abstract 类名{声明成员变量 ;返回值类型  方法名[参数];}abstract 返回值类型方法名([参数]); 
 e:接口(interface)它可以创建一个类:方法名、自变量以及返回值类型,不规定方法体。一个接口中所有方法为公开、抽象的方法,所有的属性都是公开、静态、常量。类必须实现接口,否则变成了一个抽象类了。接口与接口之间可以定义继承关系,并且接口间运行实现多继承。 
 接口的定义:[public]interface 接口名[extends  父接口列表]{[public][static][final] 数据类型 成员变量名=常量;  [public][abstract]返回值的数据类型 方法名([参数]);}  f:创建接口应使用interface关键字,不要用class,可以在
interface关键字前加上public关键字(只有接口定义在同一个名的文件内才行),或者用friendly“友好类”。
方法以整理系统资源或执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。  
 (三)java程序的数组与字符串   
 (1) 数组:是数据类型相同、变量数目一定的有序集合,数组是一种复合数  据类型。 
 (2) 使用数组四步走:a:声明数组:eg :int[] a; b:分配空间: eg: a=new 
 int[6]; c:f赋值: eg: a[0]=7;  d:处理数据: eg:a[0]=a[0]*10; 
 (3) java中的数组下标同c语言一样为:下标不能越界,最大下标是长度减 
 去1,但在c语言中下标越界时程序不能编译成功。而在 java中下标越界程序编译能通过,在运行时则会出现程序异常!这是与c语言的不同。 
 (4) java数组声明:数据元素类型 数组名[]; 或者 数据元素类型  []数组 
 名;这也与c语言的数组声明有所不同!  2. 字符串: 
 (1) 在java中字符串是当作对象来处理的,而c/c++是把字符串当作字符数  组来处理的。 
 (2) 字符串连接方法:方法一:使用“+”连接;方法二:使用string类的 
 concatenate()方法。 
 (3) 字符串常用的提取方法:indexof()从前面查;lastindexof()从后 

(四)异常处理
异常是导致程序中断运行的一种指令流

异常处理格式
try{
// 有可能出现异常的语句
}catch(异常类 异常对象){
// 编写异常的处理语句
}[ catch(异常类 异常对象){
// 编写异常的处理语句
} catch(异常类 异常对象){
// 编写异常的处理语句
} …. ]
[finally{
一定会运行到的程序代码 ;
}]

异常类的继承结构
在整个java的异常结构中,实际上有以下两个最常用的类:Exception、Error,这两个类全都是Throwable的子类。
Exception:一般表示的是程序中出现的问题,可以直接使用try…catch处理。
Error:一般指的是JVM错误,程序中无法处理。

Java的异常处理机制
一旦产生异常,则首先会产生一个异常类的实例化对象;
在try语句中对此异常对象进行捕捉;
产生的异常对象与catch语句中的各个异常类型进行匹配,如果匹配成功,则执行catch语句中的代码。

throws关键字
在定义一个方法的时候可以使用throws关键字声明,使用throws声明的方法表示此方法不处理异常,而交给方法的调用处进行处理 。
throws使用格式
public 返回值类型 方法名称(参数列表…) throws 异常类{}

throw关键字
与throws不同的是,可以直接使用throw抛出一个异常。抛出的时候直接抛出异常类的实例化对象即可。

Exception与RuntimeException
这两个类的区别如下:
Exception在程序中是必须使用try…catch进行处理。
RuntimeException可以不使用try…catch进行处理,但是如果有异常产生,则异常将由JVM进行处理。

自定义异常类
在Java中已经提供了大量的异常类,但是这些异常类有些时候也很难满足开发者的要求,所以此时用户可以根据自己的需要定义自己的异常类,定义异常类,只需要继承Exception类即可。

多线程
在Java中要想实现多线程代码有两种手段:
一种是继承Thread类
另一种就是实现Runnable接口

继承Thread类
Thread类是在java.lang包中定义的,一个类只要继承了Thread类,此类就称为多线程操作类。在Thread子类之中,必须明确的覆写Thread类中的run()方法,此方法为线程的主体。
多线程的定义语法:
class 类名称 extends Thread{ // 继承Thread类
属性… ; // 类中定义属性
方法… ; // 类中定义方法
// 覆写Thread类中的run()方法,此方法是线程的主体
public void run(){
线程主体;
}
}

如果要想正确的启动线程,是不能直接调用run()方法的,应该调用从Thread类中继承而来的start()方法,才可以启动线程。
mt1.start(); // 启动多线程
mt2.start(); // 启动多线程

实现Runnable接口
在Java中也可以通过实现Runnable接口的方式实现多线程,Runnable接口中只定义了一个抽象方法:
public void run() ;
通过Runnable接口实现多线程:
class 类名称 implements Runnable{ // 实现Runnable接口
属性… ; // 类中定义属性
方法… ; // 类中定义方法
public void run(){ // 覆写Runnable接口里的run()方法 线程主体 ;
}
}

Thread类和Runnable接口的区别
如果一个类继承Thread类,则不适合于多个线程共享资源,而实现了Runnable接口,则可以方便的实现资源的共享。
实现Runnable接口相对于继承Thread类来说,有如下显著的优势:
适合多个相同程序代码的线程去处理同一资源的情况。
可以避免由于Java的单继承特性带来的局限。
增强了程序的健壮性,代码能够被多个线程共享,代码与数据是独立的。

线程的状态
要想实现多线程,必须在主线程中创建新的线程对象。任何线程一般具有五种状态,即创建、就绪、运行、阻塞、终止。

同步与死锁
一个多线程的程序,如果是通过Runnable接口实现的,则意味着类中的属性将被多个线程共享,那么这样一来就会造成一种问题,如果这多个线程要操作同一资源的时候就有可能出现资源的同步问
题。例如,以之前的卖票程序来讲,如果多个线程同时操作的时候就有可能出现卖出票为负数的问题。

同步代码块
在代码块上加上“synchronized”关键字的话,则此代码块就称为同步代码块。
同步代码块格式:
synchronized(同步对象){
需要同步的代码 ;
}

同步方法
除了可以将需要的代码设置成同步代码块之外,也可以使用synchronized关键字将一个方法声明成同步方法。
同步方法定义格式:
synchronized 方法返回值 方法名称(参数列表){}

 学习java听老师讲起课来,自己听得明白,但是要自己真的去动手起来做的话,那又是另一回事了,听得明白不一定就可以自己动手做出来,学习java只有听懂了再自己动手去真正的做出一些东西来
运用这些代码,让代码在你脑子里转来转去不会忘记,看到有类似的功能你就会想起用这些代码来实现功能,那样才是真正的学会了,不然你就是没学会。 在学习java的过程中,最需要的就是耐心,在学习过程中,你会感到很枯燥,烦恼,无聊,寂寞感,,但这些都不是问题,问题就是你能不能有很好的耐心学习下去,一般的人都是因为没耐心学下去才觉得它难,其实java语言本身不难,难的是你自己有没有这样的心去学,耐心很重要。耐心+灵活变通=学习成功

你可能感兴趣的:(课程总结)