学习总结
1.
类和对象
一个月来,我所做的就是编写一个个类,并用这些类创建对象,现在对于类和对象我已经有了初步的理解。
首先,
类是一个模板
,用来生成具体对象。类中定义了具体对象所共有的属性(形态描述)和方法(行为和功能)。
其次,
类是一种数据类型
。
创建类: public class ClassName{
........
}
创建对象通过关键字new:如果类中没有重写构造器 ClassName cn = new ClassName() ;
2.数据类型
数据类型主要包括
基本数据类型
和
类类型
2种。
Java中一共有8种基本数据类型:byte,short,int,long,float,double,char,Boolean
所占字节数分别为: 1 , 2 , 4 , 8 , 4 , 8 , 2 , 1
字符串类型不属于基本数据类型,在Java中字符串类型被定义成类,但可以被直接引用。
3.值传递和引用传递
值传递
: 在Java中,如果方法中的参数是基本数据类型,那么就是值传递,
接受的是数值
。当参数接受了基本数据变量所传递的值以后,就与传递这个值的标量没有关系了。下面是一个例子:
private int x = 5 ;
num = method(x);
...............
public int method(int x ){
x *= 10 ;
return x ;
}
System.out.println("x="+x + " num="+num);
运行后x=5 , num=50;
引用传递
:如果参数是一个对象,那么就是引用传递,
接受的是一个对象的引用地址
,指向代表这个参数的对象,任何对这个参数的改变都是对那个对象变量的改变。下面是一个例子:
SomeClass sc = new SomeClass(5);//对对象sc的变量x赋初值5;
method(sc);
.................
public void method(SomeClass sc){
sc.setX(50);//将一个SomeClass类的对象的属性值x赋值为50 ;
}
运行后sc的属性x值为50;
4.构造器和方法
构造器
的主要作用是在创建对象的时候对其变量初始化。其格式如下:
public ClassName(param1,param2...){
..............
}
构造器名和类名必须相同,不允许有返回值,也不用void。
构造器可以重载,即一个类可以有多个不同的构造器。
构造器重载
:每个构造器和其他构造器的参数个数或则参数次序排列不同。
方法
:方法就是对象的行为,执行对象要进行的运算与操作。格式如下:
public void(或者任一数据类型) method(param1,param2......){
...................
}
若方法有返回值,要满足所有情况下对返回对应数据类型的值。
方法重载 与构造器重载规则相同。
多态
: 子类可以重写继承父类的方法,但该方法的访问权,返回类型,方法名,参数必须相同,方法的实现不同。
5.接口
接口和类有所不同,类对其对象提供了具体了具体的运算与操作代码,而接口只是对实现该接口的类提供了一些协议,有点像所有实现一个接口的类共享该接口的方法与常量。
接口中只规定静态常量,方法不能有实现代码
。
如下是一个创建接口的例子:
public interface InterfaceName{
static final int price = 8 ;
public void calculateTotal(int quantity ,int price ) ;
..........
}
6.队列
队列和数组不同,数组是一组相关元素的集合,这些元素必须是相同的类型,可以是基本变量类型,也可以是对象 。
数组一经创建,其元素类型和大小就被确定,不可以再更改。
但是很多时候,只使用数组无法解决问题,比如通讯录的存储,无法得知要存储多少个号码,若是数组长度定义过大就
太浪费内存,于是就有了队列。可以随意添加元素,其长度自动增加,也可以删除,在指定位置插入删除元素。 队列其实
是数组的一种运用。
如下是一个基本队列的类:
public class Que {
private String sa[] = new String[0] ;
//增添元素至最后一位
public void add(String s){ //复制sa中的值到s2
String[] s2 = new String[sa.length+1];
for(int i=0;i<sa.length;i++){
s2[i] = sa[i];
}
s2[sa.length] = s ; // 将要添加的值加到s2的最后一位
sa = s2 ;
}
//得到队列的大小
public int getSize(){
return sa.length ;
}
//得到指定位置的元素值
public String getAtIndex(int index){
return sa[index];
}
//在指定位置添加元素
public void add(int index , String s){
String[] s3 = new String[sa.length+1] ;
int i;
//得到index位之前sa中de元素值,复制到s3中
for(i=0;i< index ;i++){
s3[i] = sa[i] ;
}
s3[index] = s ; //将 s 添加到 index为上
for(i=index+1 ; i<s3.length ;i++){
s3[i] = sa[i-1] ;
}
sa = s3 ;
}
//删除队列指定位置上的元素
public void remove(int index ){
String[] s4 = new String[sa.length-1] ;
int i ;
//复制index位之前的元素到s4中
for(i =0 ;i<index;i++){
s4[i] = sa[i] ;
}
//复制index位之后的元素到s4中
for(i=index ;i<s4.length ;i++){
s4[i] = sa[i+1] ;
}
sa = s4 ;
}
}
这是一个基本队列,但是每次添加一次元素,就要新建一个数组,程序运行所需的时间长,于是就有了 队列的优化 ,使程序更加友好。比如:可以初始化数组sa的长度,设置每次队列长度的增加值。
队列的优化问题主要要注意数组越界问题。比如,增添元素时要判断是否超出sa的长度,在指定位置删除第index个元素时要判断index是否超出队列的size等等。 由于时间有点晚了,代码我就不敲了。
7.Swing组件的继承体系
所有的swing组件都继承于javax.swing.JComponent这个抽象类,这样做的好处就是可以 规范所有JComponent类的子类的方法属性,使之拥有一些比较统一的方法 。
8.文件格式
文件格式是电脑存储文件时对数据流采取的不同编码方式,不同的文件格式读入读出数据的方式不同,如果读出方式不对就读不出数据或读不到正确的数据。 每个文件都有扩展名,扩展名主要用来帮助区分不同文件按格式,提示系统采用什么程序读取文件。如果扩张名与文件实际类型不同,系统读取文件就会出错。
比如我们保存所画的图形时,依次读入形状的个数,每个形状对象的坐标,颜色的RGB值,可以把保存的图像定义为一种新的文件格式ipg,该图像系统无法读取,因为读出数据的方法不对。