Java程序设计基础(知识点总结)
1、类:首字母大写,如果一个类名由多个单词构成,那么每个单词的首字母都大写,中间不使用任何的连接符。比如Person类,MemberTest类。
2、方法:首字母小写。如果一个方法由多个单词构成,那么第一个单词的所有字母全都小写,从第二个单词开始,每个单词的首字母大写。比如add,addThreeInt。
3、属性:命名约定与方法相同。比如age,ageOfPerson。
4、变量名命名规则 :在Java中,变量名以下划线、字母、$符号开头,并且后跟下划线、字母、$符号以及数字。总之,Java中的变量名不能以数字开头
注意:在循环里可以声明变量但其是局部变量,退出循环时不可再使用。
2、单行注释:以//开头,//后面的所有内容均被当作注释处理。
多行注释:以/*开头,以*/结束,中间的所有内容均被当作注释处理。关于多行注释,需要注意的是,多行注释不能嵌套。
3、原生数据类型共有8种 :整型:使用int表示。(32位) 字节型:使用byte表示。(表示-128~127之间的256个整数)。 短整型:使用short表示。(16位) 长整型:使用long表示。(64位)单精度浮点型:使用float表示。所谓浮点型(默认情况下都是double),指的就是小数,也叫做实数,比如1.2。 双精度浮点型:使用double表示。双精度浮点型表示的数据范围要比单精度浮点型大。 字符型:使用char表示(char是character的缩写)。所谓字符,就是单个的字符表示,比如字母a,或者中文张,外面用单引号包围上。比如char a = ‘B’; char b = ‘张’;
布尔类型,使用boolean表示。布尔类型只有两种可能值,分别是true与false。
4、如何将double类型的值赋给float类型的变量?:强制转换的语法: 类型 变量名 = (类型)变量值;
5、变量在使用前必须要赋值;变量必须要声明其类型方可使用;变量在使用前必须要定义,并且只能定义一次。
6、算术运算符 :+、-、*、/、%、==、--。取模运算符:使用%表示。
当有若干个变量参与运算时,结果类型取决于这些变量中表示范围最大的那个变量类型。
7、关系运算符:大于(>)、小于(<)、等于(==)、不等于(!=)、大于等于(>=)、小于等于(<=),关系运算的结果是个boolean值。
8、逻辑运算符 :!、&&、||、&、|、^、~。
!:操作数取反。
&:两个都true,则结果为true。
|:两个都false,则结果为false。
^:两个都同真或同假时,为false。
逻辑与:使用&&表示,逻辑与是个双目运算符(即有两个操作数的运算符),只有当两个操作数都为真的时候,结果才为真;其余情况结果均为假。逻辑与表示的并且的意思。
逻辑或:使用||表示,逻辑或也是个双目运算符,只有当两个操作数都为假的时候,结果才为假;其余情况结果均为真。
9、变量的自增与自减运算
关于int b = a++,作用是将a的值先赋给b,然后再让a自增1。
关于int b = ++a,作用是将a的值先自增1,然后将自增后的结果赋给b。
关于int b = a-- ,作用是将a的值先赋给b,然后再让a自减1
关于int b = --a,作用是将a的值先自减1,然后将自减后的结果赋给b。
10、三种流程结构 :顺序结构、分支结构(或称选择结构)和循环结构。
10.1)、选择结构:if 语句、if else语句、switch语句。
A、if 语句:第一种形式:If(条件表达式) { //待执行的代码 (该语句在if 后的条件语句满足时才执行。)}第二种形式: if(布尔表达式) { //待执行的代码 } else { //待执行的代码 }
第三种形式: if(布尔表达式) { //待执行的代码 } else if(布尔表达式) { //待执行的代码 } else if(布尔表达式) { //待执行的代码 } else { //待执行的代码 }
B、switch语句:switch(变量)
{ case 常量1:
//待执行的代码
break; //表示跳出循环。
case 常量2:
//待执行的代码
break;
case ……
default: //表示如果表达式的值与任何一个case后的常量表达式一样,则去执行default后的语句,如default语句不从在则跳出循环。
//待执行的代码 }
10.2)、Java中的循环控制语句一共有3种,分别是while,do… while以及for循环。
A、for循环(使用最多的一种循环),形式为:
for(变量初始化; 条件判断; 步进)
{ //待执行的代码 }
//for循环的执行过程: a) 执行变量初始化。 b) 执行条件判断。如果条件判断结果为假,那么退出for循环,开始执行循环后面的代码;如果条件判断为真,执行for循环里面的代码。 c) 执行步进。 d) 重复步骤。
B、while循环:while(布尔表达式) { //待执行的代码 } //先判断表达是真假,只要条件为真就一直循环,直到条件为假时才跳出循环。
C、do…while循环,形式为: do { //待执行的代码 } while(布尔表达式);// 先执行do中的语句在判断真假,若为真就循环,当变假就跳出。
11、break语句:经常用在循环语句中,用于跳出整个循环,执行循环后面的代码。
continue语句:经常用在循环语句中,用于跳出当前的这个循环(或者是跳出本次循环),开始下一次循环的执行。
return语句:是程序从方法中返回,并返回一个值。
12、类是一种抽象的概念,类中包含了数据(通常使用名词来表示,在类中称作属性或者叫成员变量)与对数据的操纵(通常使用动词来表示,这种操纵在类中称作方法)
13、对象是一种具体的概念,是类的一种具体表示方式。
14、面向对象程序设计的三大基本特征:继承、封装、多态
封装:类包含了数据与方法,将数据与方法放在一个类中就构成了封装。
15、类的定义: 修饰符 class 类的名字 { //类的内容(包含了属性与方法) }
16、方法的定义:修饰符 返回类型 方法名称([参数1, 参数2, 参数3…]) { //方法体 }
注意 :1)方法定义不能嵌套,也就说不能在一个方法中定义另外一个方法。方法只能定义在类中。
2)方法的执行:首先需要定义方法,接下来就可以使用方法(调用方法),当方法调用完毕后,方法可以返回值。方法到底是否返回值是由方法的定义决定的。
3)如果一个java源文件中定义了多个类,那么这些类中最多只能有一个类是public的,换句话说,定义的多个类可以都不是public的。 Main方法要放在public类中,如果没有public类,那Main方法放在哪个类中都可以。
Eg:
17、生成对象 :通过类来生成对象(通常使用new关键字来生成对象),生成一个对象的过程又叫做实例化。
格式:类名 对象变量名 = new 类名();
注意:1)一个类可以生成多个对象(实例)
2)引用类型:指向对象的变量(存放对象地址)
3)1、原生数据类型(基本类型)的变量(如:int a = 5;)和引用类型的变量都是在栈内存中分配空间。2、堆内存用于存放由new创建的对象。
18、 方法的调用 :
方法调用的形式是: 对象变量.方法名([参数值1, 参数值2, 参数值3….]);
注意:用“ . ”号来连接对象变量和方法名
19、注意事项
1) 在方法定义中,方法的返回类型与return后面的变量或常量类型保持一致。
2) 在方法调用时,给方法传递的参数需要与方法定义时的参数保持一致(参数个数一致,参数类型一致)。
20、3) 方法定义时的返回类型与接收方法返回值的变量类型保持一致。
public int add(int a, int b) {return a + b; }
方法定义时的参数叫做形式参数。 int a = test.add(8, 3);
方法调用时所赋予的具体值叫做实际参数。
4)关键字void表示方法没有返回值。
如果方法没有返回值,那么声明方法的时候使用void关键字。方法体内有两种情况实现不返回值:
a) 不使用return语句。
b) 使用return,但return后面没有任何值或者变量,return后面只有一个分号,表示退出方法,返回到方法的调用端。
使用方式: return;
21、定义在类中的属性,叫做成员变量;而定义在方法中的属性叫做局部变量。
22、定义属性 :修饰符 类型 属性名称;
例: public class Person
{
int age;
}
23、与方法一样,使用.运算符。首先需要生成类的实例,然后使用实例+”.”的方式来使用属性。 例: Person person = new Person();
person.age
24、成员变量与局部变量的联系与区别 ;1)、无论是成员变量还是局部变量,使用前都需要声明(定义)。 2)、从变量在内存中生存时间上看,成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而产生,随着方法调用的结束而自动消失。
3)、对于局部变量来说,使用前必须要初始化;对于成员变量来说,使用前可以不初始化。
1) byte、short、int、long类型的初始值为0
2) float、double类型的初始值为0.0
3) char类型的初始值‘\u0000’ 表示的意思就是空字符。
4) boolean类型的初始值为false
25、引用类型是用在对象上的。它指向一个对象,它的值是它所指向的对象在内存中的地址。
一个对象可以被多个引用所指向,但同一时刻,每个引用只能指向唯一的一个对象。
如果一个对象被多个引用所指向,那么无论哪个引用对对象的属性进行了修改,都会反映到其他的引用当中。
26、构造方法(Constructor):构造方法用于完成对象属性的初始化工作。
3.6.1 构造方法的特点
a) 构造方法的名字必须与类名完全一致(包含大小写)
b) 构造方法没有返回值,连void也不能出现。
c) 如果在定义一个类的时候,没有为类声明构造方法,那么Java编译器会自动为类添加一个没有参数且方法体为空的构造方法(默认的构造方法)
d) 如果在定义一个类的时候,为类声明了构造方法,那么Java编译器就不会再为类添加构造方法了。
e) 不能显式调用类的构造方法,构造方法通常是通过new关键字隐式调用。
3.6.2 new关键字在生成对象时完成了三件事情
a) 为对象开辟内存空间。
b) 调用类的构造方法。
c) 将生成的对象的地址返回。
构造方法没有参数且方法体为空。
使用new来生成对象的时候,后面的小括号()表示构造方法的参数列表,如果构造方法不接收参数,那么小括号中的内容为空;如果构造方法接收参数,那么小括号中的实际参数就需要与构造方法定义中的形式参数保持一致(参数数量一致、参数类型一致、按照顺序逐一赋值)。
注意:
1)如果一个类包含了属性与方法,那么该类的每一个对象都具有自己的属性,但无论一个类有多少个对象,这些对象共享同一个方法。
2)关于方法参数传递的总结:对于Java中的方法参数传递,无论传递的是原生数据类型还是引用类型,统一是传值(pass by value)。
3)什么类型的引用就能指向什么类型的对象,比如People类型的引用就能指向People类型的对象,但不能指向Student类型的对象。
比如:
People people = new People(); // 正确
People people = new Student(); //错误
27、第四章:
28、继承:定义:Java是单继承的,意味着一个类只能从另一个类继承(被继承的类叫做父类【基类,base class】, 继承的类叫做子类),Java中的继承使用extends关键字。
格式: class 类名 extends 类名
注意:
1)父类有的,子类也有
2)父类没有的,子类可以增加
3)父类有的,子类可以改变
4)构造方法不能被继承
5)方法和属性可以被继承
6)在定义一个类的时候,如果没有显式指定该类的父类,那么该类就会继承于java.lang.Object类(JDK提供的一个类,Object类是Java中所有类的直接或间接父类)。
29、方法的重载 (overload) :
同一个类中,定义了两个或多个方法名字相同,但方法参数不同,这就表明了方法间的重载关系。方法参数不同有两层含义:1)参数个数不同。2)参数类型不同。 注意:方法的返回值对重载没有任何影响。
30、方法的重构 (Override) :
31、如果在子类中定义的方法与其直接超类(父类)的某个方法有相同的名称和参数,则称该子类重构了该超类(父类)的该方法。
注意:方法重构与方法重载之间的关系:重载发生在同一个类内部的两个或多个方法。重构发生在父类与子类之间。
父类型的引用可以指向子类的对象 。
32、一共有两种类型的强制类型转换:
33、abstract :
向上类型转换(upcast):比如说将 Cat 类型转换为 Animal 类型,即将子类型转换为父类型。对于向上类型转换,不需要显式指定。
向下类型转换(downcast):比如将 Animal 类型转换为 Cat 类型。即将父类型转换为子类型。对于向下类型转换,必须要显式指定(必须要使用强制类型转换)。
34、如果一个类包含了抽象方法,那么这个类一定是抽象类。
35、如果某个类是抽象类,那么该类可以包含具体方法(有声明、有实现)。
36、如果一个类中包含了抽象方法,那么这个类一定要声明成 abstract class,也就是说,该类一定是抽象类;反之,如果某个类是抽象类,那么该类既可以包含抽象方法,也可以包含具体方法。
37、无论何种情况,只要一个类是抽象类,那么这个类就无法实例化。
38、在子类继承父类(父类是个抽象类)的情况下,那么该子类必须要实现父类中所定义的所有抽象方法;否则,该子类需要声明成一个 abstract class。
39、static修饰属性:无论一个类生成了多少个对象,所有这些对象共同使用唯一一份静态的成员变量;一个对象对该静态成员变量进行了修改,其他对象的该静态成员变量的值也会随之发生变化。如果一个成员变量是static的,那么我们可以通过 类名.成员变量名 的方式来使用它(推荐使用这种方式)。
40、static修饰方法:static修饰的方法叫做静态方法。对于静态方法来说,可以使用类名.方法名的方式来访问。
注意:不能在静态方法中访问非静态成员变量;可以在静态方法中访问静态的成员变量。可以在非静态方法中访问静态的成员变量。
总结:静态的只能访问静态的;非静态的可以访问一切。
41、final :final可以修饰属性、方法、类
final修饰类:当一个类被final所修饰时,表示该类是一个终态类,即不能被继承。见实例: FinalTest 。
final修饰方法:当一个方法被final所修饰时,表示该方法是一个终态方法,即不能被重写(Override)。见实例: FinalTest2
final修饰属性:当一个属性被final所修饰时,表示该属性不能被改写。见实例: FinalTest3
接口的地位等同于class,接口中的所有方法都是抽象方法。在声明接口中的方法时,可以使用abstract关键字,也可以不使用。通常情况下,都会省略掉abstract关键字。
类可以实现接口。实现使用关键字implements表示,代表了某个类实现了某个接口。
一个类实现了某个接口,那么该类必须要实现接口中声明的所有方法。
Java是单继承的,也就是说某个类只能有唯一一个父类;一个类可以实现多个接口,多个接口之间使用逗号分隔。见实例: Test3
接口类型的引用可以指向实现该接口的类的实例。关于接口与实现接口的类之间的强制类型转换方式与父类和子类之间的强制类型转换方式完全一样。
42、包(package):用于将完成不同功能的类分门别类,放在不同的目录(包)下。
1)编译带有package声明的Java源文件有两种方式:
a) 直接编译,然后根据类中所定义的包名,逐一手工建立目录结构,最后将生成的class文件放到该目录结构中(很少使用,比较麻烦)
b) 使用编译参数–d,方式为javac –d . 源文件.java,这样在编译后,编译器会自动帮助我们建立好包所对应的目录结构。
2)有两个包名,分别是aa.bb.cc与aa.bb.cc.dd,那么我们称后者为前者的子包
43、导入(import):将使用package分离的各个类导入回来,让编译器能够找到所需要的类。
1)import的语法:
import com.myjjx.PackageTest1;
2)import com.myjjx.*,表示导入com.myjjx包下面的所有类。
3)import aa.bb.*并不会导入aa.bb.cc包下面的类。这时需要这样写:
import aa.bb.*;
import aa.bb.cc.*;
4)关于package、import、class的顺序问题:
a) 首先需要定义包(package),可选
b) 接下来使用import进行导入,可选
c) 然后才是class或interface的定义。
5)如果两个类在同一个包下面,那么则不需要导入,直接使用即可。
6)java.lang.Object类。
java.lang包在使用的时候无需显式导入,编译时由编译器自动帮助我们导入。
44、访问修饰符 :
1)public(公共的):被public所修饰的属性和方法可以被所有类访问。
2)protected(受保护的):被protected所修饰的属性和方法可以在类内部、相同包以及该类的子类所访问。
3)private(私有的):被private所修饰的属性和方法只能在该类内部使用
4)默认的(不加任何访问修饰符):在类内部以及相同包下面的类所使用。
注:其中public和private修饰符可用在类的定义中。Public指的是所有的类都可以访问该类。Private指的是同一包下的类可以访问该类(这是java中默认的形式)。
45、String类 :1、使用格式: String 字符串变量名 = “字符串常量”;
2、对于String对象的相等性判断来说,请使用equals()方法,而不要使用==。
3、在“+”运算中,只要有一个String类型的,那么非String的都要把自己转换成字符串,然后进行拼接操作。
46、数组(Array)相同类型数据的集合就叫做数组
type[] 变量名= new type[数组中元素的个数];
可以按照下列方式定义长度为10的数组:
int[] a = new int[10];或者int a[] = new int[10];
数组中的元素索引是从0开始的。对于数组来说,最大的索引==数组的长度–1。
定义数组的第2种方式 :
type[] 变量名= {new type[]}{逗号分隔的初始化值列表};
length属性:
Java中的每个数组都有一个名为length的属性,表示数组的长度。length属性是public,final,int的。数组长度一旦确定,就不能改变大小。
一维数组中存放原生数据类型和引用类型时的不同 :
int[] a = new int[10],其中a是一个引用,它指向了生成的数组对象的首地址,数组中每个元素都是int类型,其中仅存放数据值本身。
47、 二维数组 :二维数组是一种平面的二维结构,本质上是数组的数组
1)二维数组的定义方式:type[][] a = new type[2][3];
2) 二维数组的初始化:type[][] a = {{逗号分隔的初始化值列表},{逗号分隔的初始化值列表}};
48、第五章:
5.1输入输出流
5.1.1 File类
一个File类的对象,表示了磁盘上的文件或目录。java.io包中的File类提供了与具体平台无关的方式来描述目录和文件对象的属性功能。其中包含大量的方法可用来获取路径、目录和文件的相关信息,并对它们进行创建、删除、改名等管理工作,File类的直接父类是Object类。
输入输出流
流的概念
Java程序通过流来完成输入/输出。一个输入流能够从磁盘文件,从键盘或从网络套接字。同样,一个输出流可以输出到控制台,磁盘文件或相连的网络。
输入输出类
在java.io包中提供了60多个类(流)。
从功能上分为两大类:输入流和输出流。
从流结构上可分为字节流(以字节为处理单位或称面向字节)和字符流(以字符为处理单位或称面向字符)。
字节流的输入流和输出流基础InputStream和OutputStream这两个抽象类,字节流的输入输出操作由这两个类的子类实现。字符流是Java 1.1版后新增加的以字符为单位进行输入输出处理的流,字符流输入输出的基础是抽象类Reader和Writer
5.1.4 输入输出流的逻辑
读/写 数据的逻辑为:
open a stream
while more information
read /write information
close the stream
文件的输入流(FileInputStream)
FileInputStream 是 InputStream的实现类
文件的输出流(FileOutputStream )
FileOutputStream 是 OutputStream的实现类。
5.2.3 字符流
尽管字节流提供了处理任何类型输入/输出操作的足够的功能,它们不能直接操作也就Unicode字符,也就是文本文件。
字符流层次结构的顶层是Reader 和Writer 抽象类。
FileReader类
创建了一个可以读取文件内容的Reader类。FileReader继承于InputStreamReader。
FileWriter类
创建一个可以写文件的Writer类。 FileWriter继承于OutputStreamWriter。
49、第六章:异常处理和GUI
6.1.1 异常
错误和异常都是错误。错误是致命的,和硬件和操作系统错误有关。而异常却是可以检测和处理的(如:除数为0,数组下标越界等)。
6.1.2 异常的处理
方案一:
try
{…}
catch(Exception e)
{…}
finally
{…}
方案二:
在调用该会产生异常的方法所在的方法声明 throws Exception。
6.2.1 AWT
AWT(Abstract Window Toolkit),抽象窗口工具包,SUN公司提供的用于图形界面编程(GUI)的类库。根据作用GUI组件可分为基本组件和容器。
1)容器:
容器其实是一种比较特殊的组件,可以容纳其它组件,如窗口、对话框等。所有的容器类都是java.awt.Container的直接或间接子类。容器不但能容纳组件,还能容纳其它容器,这一事实对于建立复杂的布局是关键的,也是基本的。
2)组件 :
组件又称构件,诸如按钮、文本框之类的图形界面元素 。
3)布局管理器 :
容器里组件的位置和大小是由布局管理器来决定的。布局管理器负责决定布局方针以及其容器的每一个子组件的大小。
① BorderLayout:
BorderLayout是Frame类的默认布局管理器,BorderLayout将整个容器的布局划分成东、西、南、北、中五个区域,组件只能被添加到指定的区域。如不指定组件的加入部位,则默认加入到Center区域,每个区域只能加入一个组件,如加入多个,则先前加入的组件会被遗弃
② FlowLayout :
组件按照加入容器的先后顺序从左向右排列。
一行排满之后就自动地转到下行继续从左向右排列。
每一行中的组件默认设置为居中排列。
是Panel的默认布局管理方式。
小结:
Frame
– Frame是一个顶级窗口。
– Frame的缺省布局管理器BorderLayout。
Panel
– Panel无法单独显示,必须添加到某个容器中。
– Panel的缺省布局管理器为FlowLayout。
– 当把Panel作为一个组件添加到某个容器中后,该Panel仍然可以有自己的布局管理器。
4)事件 :
事件-描述发生了什么的对象
事件源-事件的产生器
事件处理器-接收事件、解释事件并处理用户交互的方法
① ActionEvent :
当单击一个按钮时就会产生一个事件(ActionEvent),然后检查是否有与该按钮关联的事件处理器(实际上就是一个方法),如果没有,那么什么都不执行;如果有,就会将该事件传递给与该按钮关联的事件处理器方法,作为该方法的参数,之后该事件处理器方法就会自动得到调用,并且该方法可以使用传递过来的 ActionEvent 对象,进而获得事件发生时与该事件及事件源相关联的那些信息。
②WindowEvent :
窗口事件WindowEvent是指对窗口本身进行操作时所产生的事件,如对窗口的最小化、最大化、打开、关闭等操作。
6.2.2 Swing (实例:FrameDemo.java)
Swing,不依赖于底层细节,轻量级的组件。是第二代GUI开发工具它建立在AWT之上,但用新版本的组件替代了旧版本的组件。我们经常用的有两个包:
– javax.swing
– javax.swing.event
\
俄