前期学习总结
第一章:基础入门
a)环境变量的配置:
变量名:Path 变量值:D:\Program Files\Java\jdk1.6.0_18\bin
b)对类名、属性名、方法名以及常量名命名的时候需要注意的问题:
相同点:
不能以关键字来命名,要有特定含义。
不同点:
类名:1.类名的首字母要大写
2.如果由多个单词组成,则每个单词的首字母要大写
3.只能包含数字字母和下划线,开始只能以字母或下划线开头。
属性名:1.第一个单词的字母要小写
2.如果由多个单词组成,则从第二个单词开始的每个单词首字母要大写
3.只能包含数字、字母和下划线,开始只能以字母或下划线开头。
方法名:和属性名的定义式一样的。
常量名:每个字母都要大写。
c)类名必须和文件名相同,包括大小写(java是区分大小写)。
d)Java编译和运行的命令与格式:
编译的命令:javac 文件名.java
运行的命令:java 文件名
e)Java中的基本数据类型
类型 称呼 值域
int 整形 32位
short 短整型 16位
long 长整型 64位
double 双精度 64位
float 浮点型 32位
boolean 布尔型 true/false
byte 字节型 8位
char 字符型 16位
注:每一个基本数据类型,都有一个对应的封装类型,位于java.lang包下。
f)Java中的数据类型:
1.基本数据类型(原始类型)
int,short,long,double,float,boolean,byte,char,
2.引用类型
类类型,对象类型
g)String的常用方法:
1.string是用class定义的类,但是因为String会经常用到,在JDK中对String做出特殊处理,它的使用方式和基本数据类型是一样的。
2. String的常用的方法:
1>、length() 字符串的长度
2>、charAt() 截取一个字符
3>、getChars() 截取多个字符
4>、getBytes()
5>、toCharArray()
6>、equals()和equalsIgnoreCase() 比较两个字符串
7>、regionMatches() 用于比较一个字符串中特定区域与另一特定区域,它有一个重载的形式允许在比较中忽略大小写。
8>、startsWith()和endsWith() startsWith()方法决定是否以特定字符串开始,endWith()方法决定是否以特定字符串结束
9>、equals()和==
equals()方法比较字符串对象中的字符,==运算符比较两个对象是否引用同一实例。
10>、compareTo()和compareToIgnoreCase() 比较字符串
11>、indexOf()和lastIndexOf()
indexOf() 查找字符或者子串第一次出现的地方。
lastIndexOf() 查找字符或者子串是后一次出现的地方。
12>、substring() 它有两种形式,第一种是:String substring(int startIndex)
第二种是:String substring(int startIndex,int endIndex)
13>、concat() 连接两个字符串
14 >、replace() 替换
它有两种形式,第一种形式用一个字符在调用字符串中所有出现某个字符的地方进行替换,形式如下:
String replace(char original,char replacement)
第二种形式是用一个字符序列替换另一个字符序列,形式如下:
String replace(CharSequence original,CharSequence replacement)
15>、trim() 去掉起始和结尾的空格
16>、valueOf() 转换为字符串
17>、toLowerCase() 转换为小写
18>、toUpperCase() 转换为大写
19>、StringBuffer构造函数
StringBuffer定义了三个构造函数:
StringBuffer()
StringBuffer(int size)
StringBuffer(String str)
StringBuffer(CharSequence chars)
(1)、length()和capacity() 一个StringBuffer当前长度可通过length()方法得到,而整个可分配空间通过capacity()方法得到。
(2)、ensureCapacity() 设置缓冲区的大小
(3)、setLength() 设置缓冲区的长度
(4)、charAt()和setCharAt()
(5)、getChars()
(6)、append() 可把任何类型数据的字符串表示连接到调用的StringBuffer对象的末尾。
(7)、insert() 插入字符串
(8)、reverse() 颠倒StringBuffer对象中的字符
(9)、delete()和deleteCharAt() 删除字符
(10)、replace() 替换
(11)、substring() 截取子串
第二章:类和对象
a)类与对象的定义及区别:
类是具有相同特征和相同行为对象的抽象。对象是类的具体实现。对象是具体存在的实体,具有明确定义的状态和行为;而类则是对 象所具有的方法和属性。 类是对象的抽象,而对象是类的具体实例。 类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是一个模板,同时类也是一种自定义的数据类型。
b)定义类的格式
Public class 类名{
Private 数据类型 属性名;
Public 构造函数名(参数列表){
//函数体
}
Public 返回值类型 方法名(参数列表){
//方法体
}
}
d)创建对象的格式
类名 对象名 = new 构造函数名(参数值列表);
调用对象方法的格式:
对象名.方法名(参数值列表);
e)方法的分类
1.按返回值划分
有返回值的方法和无返回值的方法
2.按参数划分
有参数的方法和无参数的方法
f)方法的重载
每个类型成员都有一个唯一的签名。方法签名由方法名称和一个参数列表
(方法的参数的顺序和类型)组成。只要签名不同,就可以在一种类型内
定义具有相同名称的多种方法。当定义两种或多种具有相同名称的方法时,
就称作重载。即重载时相同名称成员的参数列表是不相同的(参数顺序和
类型)。 在重载中,多个同名方法中参数类型和个数不同
要实现重载必须要满足的条件有:
1.方法名相同
2.参数类型和参数的个数要不同。
注:
1.实现了方法重载后,调用的时候,会根据你所传递的参数个数以及类型来决定最终调用的方法。
2.子类可以重载父类的方法。
如:
public void study(int score,int hour){
score+=hour/2;
system.out.println("正在学习中......");
}
public void study(int score){
system.out.println("没学到什么");
}
g)构造函数:
1.构造函数不能有返回值。
2.函数名必须和类名相同。
3.如果定义了构造函数,则默认的构造函数将被覆盖,不可以在使用默认的构造函数。
4.构造函数可以实现方法的重载。
5.构造函数调用构造函数的时候,可以使用this进行调用。
6.构造函数是用来创建对象的。
7.构造函数每调用一次就会创建一个新的对象。
如:
public class Student{
public Student(String name){
this.name = name;
}
}
h)值传递
值传递适用于基本数据类型;值传递传递的是实实在在的变量值;值传递后,两个变量改变的是各自的值。
如:
public class Student{
public void ChangeInt(int t){
t = 100;
}
}
public class teacher{
public static void main(String[] args){
Student stu = new Student();
int i=1000;
stu.ChangeInt(i);
system.out.println("i现在的值为: "+i);
}
}
输出结果i为1000.
i)引用传递
引用适用于引用类型;引用传递传递的是对象的引用地址;引用传递后,两个引用改变的是同一个对象的状态。
如:
//创建一个student类
public class Student {
private String name;
public void setname(String n){
name = n;
}
public String getname(){
return name;
}
}
//创建一个Teacher类
public class Teacher {
public void changeName(Student st){
String newName = "改名字";
st.setname(newName);
}
public static void main(String[] args){
Student stu = new Student();
stu.setname("第一个");
Teacher te = new Teacher();
te.changeName(stu);
String name = stu.getname();
System.out.println("调用后的名字是: "+name);
}
}
输出结果为 :改名字
j)this关键字
this关键字表示对象本身,当前是哪一个对象在调用方法,那么this关键字就表示当前的对象。
第三章:类的继承
a)为什么需要继承?
可以拥有父类的属性和方法,补充自己的特定的方法,可以避免不必要的定义。降低代码的冗余,提高了代码的重用性。更符合了现实生活中的概念。
b)继承的语法格式
Public class 子类名 extends 父类名{
}
c)子类继承到父类的哪些方法和属性
父类中所有的方法都能被子类继承到,但是不是所有的方法都能被子类调用。
1.子类和父类在同一个包下
除了私有的属性、方法以及所有的构造函数不能被调用,其他的都可以直接被子类调用。
2.子类和父类不再同一个包下
只有公有的方法和属性能被子类直接调用。
如果创建一个子类的对象,那么父类的对象是否被创建了?
不会,子类继承父类的话,构造方法父类先执行,那么这个执行应该只是代码上的,对象的话应该是没有创建的。父类引用指向子类对象。那么这个引用的话,应该只是代码上的引用。
d)方法的重写
必须满足的条件:
1.必须要存在继承关系
2.方法名,返回值类型,参数个数以及参数类型都必须要和父类的相同。
3.方法的访问修饰符必须要大于或者等于父类的访问修饰符。
e)自动转型
1).必须要存在继承关系。
2).是子类->父类。
格式:
父类名 对象名 = new 子类构造函数(参数值列表);
子类名 对象名B = new 子类构造函数(参数值列表);
方法名(对象名B);
Public void 方法名(父类名 对象名){
}
缺点:不可以调用子类特定的方法。
优点:可以减轻编程的工作量。
g)多态
多态指的是相同类型的对象调用相同的方法的时候,由于继承和重写,得到的
结果不一定相同。
方法的重载,方法重写,继承,自动转型等形成多态。
g)接口
定义接口的格式:
Public interface 接口名{
//定义常量的格式
Public static final 数据类型 常量名 = 值;
//定义方法
Public abstract 返回值类型 方法名(参数列表);
返回值类型 方法名(参数列表);
}
实现接口的格式:
Public class 类名 implements 接口名{
//必须重写接口中所有的方法
}
接口可以继承接口。Public interface 子接口 extends 父接口, 父接口,…{}
接口默认的访问修饰符为public
h)抽象类
定义抽象类的格式:
Public abstract 抽象类名 extends 类名 implements 接口名{
Public abstract 返回值类型 方法名(参数列表);
}
如果抽象类实现接口,那么可以不可以不实现接口中所有的方法?
可以
抽象类是接口和类的集合。
抽象类只能被类或者抽象类继承。
接口和抽象类都不能用来创建对象。
接口、抽象类和类的区别:
接口只有方法名,没有方法体,不能直接用接口创建对象。接口里只能定义抽象方法和常量。
抽象类是接口和类的集合,是介于两者之间的定义,抽象类只能被类或者抽象类继承。
类可以通过extends继承类,也可以通过implements实现接口,接口与接口之间,也可以通过extends实现继承,与类继承不同的是,一个接口同样可以继承多个接口。
第四章:Java的图形界面和事件
a)Java的图形界面有:
1.awt
2.swing
注:swing是标准的图形界面,而awt不是。
b)所有的图形界面都是从Object类继承的,Object是java所有的类的父类。
c) 事件流程
1.寻找事件源
2.给事件源添加监听器方法
3.重写监听器类
4.创建监听器类的对象,并绑定到事件源的监听器方法中。
b)常用的监听器
1.动作监听器 ActionListener
2.鼠标监听器 MouseListener
3.鼠标拖动监听器 MouseMotionListener
4.鼠标的适配器 MouseAdapter
5.键盘等监听器
c)ActionEvent和MouseEvent
ActionEvent:指示发生了组件定义的动作的语义事件。当特定于组件的动作(比如被按下)发生时,由组件(比如 Button)生成此高级别事件。事件被传递给每一个 ActionListener 对象,这些对象是使用组件的 addActionListener 方法注册的,用以接收这类事件。
MouseEvent:指示组件中发生鼠标动作的事件。当且仅当动作发生时鼠标光标处于特定组件边界未被遮掩的部分上,才认为在该组件上发生了鼠标动作。
第五章:数组和队列
a)数组:
数组是一种线性的数据结构,如果你指定了数组的类型,那么数组的类型就已经决定了。
一维数组:
定义一维数组的格式:
数据类型 [] 数组名 = new 数据类型[长度];
数据类型 [] 数组名 = {参数列表};
数据类型 [] 数组名 = new 数据类型[]{参数列表};
数组类型 [] 数据名;
数组名 = new 数据类型[长度];
数组的操作:
下标可以操作数组中的每一个元素,可以通过length属性获取数组的长度。
多维数组:
下标可以操作数组中的每一个元素,可以通过length属性获取数组的长度。
定义二维数组的格式:三种
数据类型 [][] 数组名 = new 数据类型[行][列];
数据类型 [][] 数组名 = {{参数列表},{…},..};
数据类型 [][] 数组名 = new 数据类型[][]{{参数列表},{…},..};
数组类型 [][] 数据名;
数组名 = new 数据类型[行][列];
下标可以操作数组中的每一个元素,可以通过length属性获取数组的长度。
获取行的总数格式:数组名.length;
获取列的总数格式:数组名[i].length;
数组的缺点:不能改变数组的大小
b)队列
用自定义队列来实现数组不能改变大小的问题。
实现自定义队列一个。要可以通用。
c) 泛型
数组必须是Object的类型。
第六章:重绘
1.关键点:数据的封装
2.Paint方法重写
Super关键,可以调用父类的方法。
3.自定义队列的运用,即用队列存储数据
完整画板的实现:
1.画板的重绘
2.重绘画过的形状
3.重绘队列中的形状
第七章:五子棋
1.前期基础的综合应用
2.二维数组的使用
人机对战:
关键点:1.数组的运用
2.重绘
3.权值的分配