java前期总结

一、java基础入门

1.环境变量的配置
变量名:Path     变量值:D:\Program Files\Java\jdk1.6.0_18\bin

2.命名的注意事项:
(1)类名:类名的首字母要大写,如果由多个单词组成,则每个单词的首字母要大写,只能包含数字字母和下划线,开始只能以字母或下划线开头。

(2)属性名、方法名:第一个单词的字母要小写,如果由多个单词组成,则从第二个单词开始的每个单词首字母要大些,只能包含数字、字母和下划线,开始只能以字母或下划线开头。

(3)常量名:每个字母都要大写。

(4)类名必须和文件名相同,包括大小写(java是区分大小写)。
注意:不能以关键字命名,最好是有特定的含义。

3.java的基本样式

(1)入口函数
public static void main(String[] args){
}

(2)打印输出
System.out.print();
注意:String和 System在java里都是大写,与C++不同

(3)注释
A.注释一行 //

B.注释若干行
/*
......
*/  

C.注释若干行,并写入 javadoc 文档
/**
......
*/

4. 其他
(1)Java编译和运行的命令与格式
     编译的命令:javac 文件名.java
     运行的命令:java  文件名

(2)Java中的基本数据类型  
int     整型           32位(4个字节,一个字节8位)
short   短整型          16位
long   长整型            64位
double  双精度           64位
float    浮点型           32位
boolean  布尔型          true和false
byte               8位           -128-127
char    字符型           16位
char c = ‘中’;
每一个基本数据类型,都有一个对应的封装类型,位于java.lang包下。

(3)Java中有哪几种数据类型?
1.基本数据类型(原始类型)
2.引用类型(类类型,对象类型)

(4)基本数据类型对应的包装类型
int——Integer       float——Float            double——Double
string—— String          boolean——Boolean

(5)String 是java中的一个类,而不是基本数据类型,因为它具有自己的方法和属性。
① String 变量名;
②String 变量名=“内容”;
③String 变量名=new String();   (String  str=new String(“Hello”);)
④String replace(char old , char new)
    返回一个新的字符串,其中new替换了所有的old字符串
String substring(int beginIndex)
String substring(int beginIndex)
⑤String toLowerCase() 将所有字符转换为小写
   String toUpperCase() 将所有字符转换为大写
⑥String[] split(String str) 返回一个字符数组,原字符串将以str作为分隔符,分割成若干个组成部分

5. 类和对象

a) 类的定义
类是具有相同特征和相同行为对象的抽象。

b) 对象的定义
  对象是类的具体实现。
  
c) 定义类的格式
  Public  class 类名{
   Private 数据类型  属性名;
   Public 构造函数名(参数列表){
   //函数体
  }
  Public 返回值类型 方法名(参数列表){
   //方法体
  }
  }
d) 创建对象的格式
  类名  对象名  =  new  构造函数名(参数值列表);
   调用对象方法的格式:
   对象名.方法名(参数值列表);
6.方法
(1).有返回类型,其中返回类型又分有返回值和无返回值(void);
(2).一般是个动词,一般是小写;
(3).分为有参方法和无参方法;
(4).一般方法不能调用构造器;

7.方法的重载
要实现重载必须要满足的条件有:
A.(1).方法名相同
   (2).参数类型和参数的个数要不同。
  
B.调用的时候,会根据你所传递的参数个数以及类型来决定最终调用的方法。

C.子类可以重载父类的方法。

D.  重载(overLoad)和重写(overWrite)的区别.
  方法的重载(在一个类中,没有继承关系):
 (1)定义多个同名(方法的名字要相同!),但参数类型和参数个数不同。
 (2)可以改变返回值的类型,即返回值类型可以相同也可以不同。
 (3)重载是一个类中多态性的一种表现

   方法的重写(前提:要有继承关系):
 (1)子类中保持方法的定义不变,方法内部实现父类的不同
 (2)重写是父类与子类之间多态性的一种表现

8.构造器                                 
(1).没有返回类型;                             
(2).构造器必须与类名相同(一般是个名词,一般大写);
(3).也可以传入参数;
(4).构造器可以通过this关键字调用构造器和方法;
(5). 构造函数是用来创建对象的。
(6).构造函数每调用一次就会创建一个新的对象。
(7). 如果定义了构造函数,则默认的构造函数将被覆盖,不可以在使用默认的构造函数。

9.值传递与引用传递
(1)值传递
值传递适用于基本数据类型。
传递的方式?

(2)引用传递
引用适用于引用类型。

如果令stu2=stu1,实质上stu2这个对象已经消亡了
(3)值传递和引用传的区别.
值传递:
仅将对象的值传递给目标对象,即传递内存中的值,如果改变目标对象,原始不会因此而改变。

引用传递:
将对象在内存中的地址传递给目标对象,就相当于使目标对象和原始对象对应同一个内存存储空间。
如果对目标对象进行修改,内存中的数据也会改变。
(类似于C中的传地址)

例如:
Student a1=new Student();
Student a2=a1;
此时是引用传递,如果对a2进行操作即相当于对a1进行操作,即a2与a1是同一对象的不同名字了。
而在值传递中,a2会分一个与a1不同的空间,此时改变a2,不会对a1有影响。

10.this关键字
(1)this关键字表示对象本身,当前是哪一个对象在调用方法,那么this关键字就表示当前的对象。
(2)利用this关键字可以在构造器中调用另外一个构造器(但是调用的代码必须是第一行,且只能调用一次)。

11.自动转型
(1) 一个对象可以自动地由父类转型为子类对象,比如定义了一个“public class Student”类,让一个大学生public class UNStudent extends Student,定义“Student stu=new UNStudent();”,这时父类的stu对象就可以自动转型为
(2)子类的对象;
必须要存在继承关系。
格式:
父类名  对象名  =  new  子类构造函数(参数值列表);
子类名  对象名B  =  new  子类构造函数(参数值列表);

方法名(对象名B);

Public void 方法名(父类名  对象名){

}
??
(3)如果子类中的函数中要传入父类对象的,在主函数中,定义了一个子类对象,则可以调用这个函数,并传入子类的对象是可以的。
(4)一个父类的对象的指向传给子类的对象时必须要强制转型,例如
public void tc(Object st){
UNStudent us=(UNStudent)st; //us指向了st所指向的空间
us.play(); //UNStudent为一个子类,play()是其中的方法
(5)注意:
  子类的指向转化为父类的指向(父类的指向要)强制转型(为子类的指向),父类的指向转化为子类的指向(父类的指向会)自动转型(为子类的指向),但是不同类型的绝不能转换。

(6)缺点:不可以调用子类特定的方法。
     优点:减少代码量和程序的繁琐

12.多态
方法的重载,方法重写,继承,自动转型等形成多态。

13.接口
(1)定义接口的格式:
Public  interface  接口名{
//定义常量的格式
Public static final 数据类型 常量名 = 值;
//定义方法
Public abstract 返回值类型 方法名(参数列表);
返回值类型 方法名(参数列表);
}

(2)实现接口的格式:
Public class 类名 implements 接口名{
//必须重写接口中所有的方法
}

(3)接口可以继承接口。Public interface 子接口 extends 父接口, 父接口,…{}

14.抽象类
(1)定义抽象类的格式:
Public abstract 抽象类名  extends 类名  implements 接口名{
Public abstract 返回值类型  方法名(参数列表);
}
(2)如果抽象类实现接口,那么可以不可以不实现接口中所有的方法?
  可以

(3)抽象类是接口和类的集合。
     抽象类只能被类或者抽象类继承。
     接口和抽象类都不能用来创建对象。

15.接口、抽象类和类的区别?
   A.
   a.类:public class 类名;方法要有方法体,如果没有方法体的要写成“public abstract void fun();”形式,没有方法体的不能在继承类中实现。

   b.抽象类:abstract class 抽象类名;抽象类中的方法可以被实现,也可以不用被实现,不需要实现的,格式写成:“public abstract void fun();
  
   c.接口:public interface 接口名,接口中的函数不能有函数体,只能有个定义(即只能有个函数名在那儿,例“public void fun();”)。
  
B.
 a.类继承:public class 子类名 extends 父类名;继承的时候子类可以使用父类的方法,也可以重写父类中的方法,必须要有实现(方法体可以为空),但是在这个时候,只有定义的对象是父类的对象才能调用父类的函数,其中包括自动转型、本来就定义的子类的对象两种情况,这两种情况是不能够调用父类中的函数的。
 
   b.接口的继承:public class 子类名 implements 接口名;这个时候,子类中的函数必须要包括接口中未实现的函数,并且必须要实现(函数体为空也行)。不能直接定义接口类型的对象,只能定义它的子类的对象。
  
???c. 抽象类的继承:可以连续不断地继承下去,方法可以不用实现,但是必须要写成:“public abstract void fun();”,情形与普通类的继承相似,但是对象不能够调用没有方法体的方法。


16.Java的图形界面和事件

(1)Java的图形界面有两套?
①awt
②swing组件
按钮:JButton      标签:JLabel     文本框:JTextFiled 
密码隐藏:JPasswordFiled            流式布局管理器:java.awt.FlowLayout
点击关闭推出程序setDfaultCloseOperation(3)
显示居中:setLocationRelative(null);
setVisible(true);要放到所有组件之后才能是i窗体显现出来!
import javax.swing.*(可包含swing组件里的所有包)

(2)为什么要使用swing,而不使用awt ?
因为Swing是标准化的,可移植性强。

(3)所有的图形界面都是从哪一个类继承的?
Object是java所有的类的父类。

(4)事件流程
a.寻找事件源
b.给事件源添加监听器方法
c.重写监听器类
d.创建监听器类的对象,并绑定到事件源的监听器方法中。

(5)常用的监听器
动作监听器  ActionListener
鼠标监听器  MouseListener
鼠标拖动监听器  MouseMotionListener
鼠标的适配器   MouseAdapter
键盘等监听器
ActionEvent和MouseEvent

16.数组和队列

(1)数组
数组是一种线性的数据结构,如果你指定了数组的类型,那么数组的类型就已经决定了。
一维数组
定义一维数组的格式:三种
数据类型  []  数组名  = new  数据类型[长度];
数据类型  []  数组名  = {参数列表};
数据类型  []  数组名  = new  数据类型[]{参数列表};
数组类型  [] 数据名;
数组名  = new  数据类型[长度];

(2)操作数组是通过什么?
下标可以操作数组中的每一个元素,可以通过length属性获取数组的长度。

(3)多维数组
下标可以操作数组中的每一个元素,可以通过length属性获取数组的长度。
定义二维数组的格式:三种
数据类型  [][]  数组名  = new  数据类型[行][列];
数据类型  [][]  数组名  = {{参数列表},{…},..};
数据类型  [][]  数组名  = new  数据类型[][]{{参数列表},{…},..};
数组类型  [][] 数据名;
数组名  = new  数据类型[行][列];

(4)下标可以操作数组中的每一个元素,可以通过length属性获取数组的长度。
获取行的总数格式:数组名.length;
获取列的总数格式:数组名[i].length;

数组的缺点:不能改变数组的大小

(5)数组的排序
a.冒泡排序
b.选择排序
c.插入排序
d.希尔排序

(6)队列
用自定义队列来实现数组不能改变大小的问题。
实现自定义队列一个。要可以通用。

(7)E  泛型
\数组必须是Object的类型。

表示可以代替所有的类型(int,char,short,long,float,double,byte,boolean这些类型不可以)。

17.重绘(数据的封装)

(1)Paint方法重写 
(2)Super关键子,可以调用父类的方法。
(3)画板的重绘要先用自定义队列将所画的内容存储起来再实现重绘方法。

18.五子棋
(1)前期基础的综合应用
     二维数组的使用
(2)人人对战
a.窗体
b.在重绘方法中画出棋盘
c.将棋子画在交叉点上
d.黑棋白棋交替下(可用计数器,也可用boolean来控制)
e.判断各个方向的连珠数(横向:左、右;纵向:上、下;斜向:45度、135度)
f.判断输赢
(3)人机对战(算法分析)
用权重值来决定机器人下棋的地方
(4)后期优化
加上图片,声音,菜单项,还可以悔棋

你可能感兴趣的:(java,C++,c,swing,C#)