文档库 最新最全的文档下载
当前位置:文档库 › java学习笔记

java学习笔记

1.Java的一条语句可分成多行来写。
●●●●●●●●●●●●●●●●
2.数据类型分基本数据类型和引用数据类型:
a.基本数据类型分 布尔(boolean)和数值类型
i.数值类型分定点类型和浮点类型
①定点类型分char、byte、short、int、long;
②浮点类型分float、double
b.引用数据类型分:
①类、枚举、接口
②数组
占用位数: (一个字节8位)
boolean 8 char 16 byte 8 short 16 int 32 long 64 float 32 double 64
●●●●●●●●●●●●●●●●
3.表达式的数据类型自动提升:
ex:byte b=3;
b=b-1;
b=?
●●●●●●●●●●●●●●●●
4.方法:
返回值类型 方法名 (参数类型 形参1,参数类型 形参2,……)
{
程序代码;
return 返回值;
}
形参:在方法调用时用于接收外部传入数据的变量。
返回值:方法在执行完毕后返还给调用它的程序的数据。
实参:调用函数时实际传给方法形参的数据。
若无返回值,则返回值类型为void,此时会自动添加return;这条语句,如果此时需要做判断则可以提前做返回操作。
●●●●●●●●●●●●●●●●
5.算术运算:
取模:5%2=1 ex:-5%2=-1 5%-2=1 说明 x%y=x%|y|
a.新学生x人,6人一间房,问需要几间房?(用一个数学公式表示)
答案:(x+5)/6
b.要x在0-9之间变换。
答案:x=(x+1)%10
逻辑运算:
! 非 只能多布尔值取反。ex: if(!x>3) error 应为if(!(x>3))
^ 异或 异为真,true。
位运算:
>>> 无符号右移

23:08 2010-3-30

1.switch(表达式)
{
case 常量表达式:语句1;【break;】
case 常量表达式:语句2;【break;……】
default:【语句n;】
}
直到遇到break,跳出switch语句。否则,剩下的case将都会执行。
判断条件:只能接受int、byte、char、short类型。
ぷぷぷぷぷぷぷぷぷぷぷぷぷぷぷぷぷぷぷぷぷぷぷぷぷぷ
2.while(表达式) 语句i;【解释:表达式为真时,执行完语句i后,继续判断表达式的值,若为真则继续执行语句i。】
exOne:while(x<10)
System.out.println(x);
x++;
结果:while无限循环,不断地打印出1。
exSecond:while(x<10);
System.out.println(x++);
结果:while无限循环,输出内容为空。
ぷぷぷぷぷぷぷぷぷぷぷぷぷぷぷぷぷぷぷぷぷぷぷぷぷぷ
3.数组
栈内存 堆内存 数组属于后者。
int[] a; 或int a[]; 声明数组时不能指定长度。
Java中并没有真正的数组,只有数组的数组,Java中多维数组不一定是规则矩阵形式。

组排序:java.util.Arrays.sort(a);
数组复制:System.arraycopy(x,0,y,5,4); 【具体含义可查JDK】

21:17 2010-3-31

Lesson 3 面向对象(上)

1.对象
Student stu =new Student();
其中stu是引用变量,其内容指向创建对象在堆内存的首地址【跟数组很像】。
堆内存
2.“==”和equals()方法的区别:
a.简易地讲:
前者:比较两个变量的值是否相等。
后者:比较两个对象中内容。
b.深入地讲:
引用数据类型:引用数据类型的变量用于指向一个数组或一个对象的句柄。
“==” 比较引用数据类型的值是否相等。
equals() 比较引用变量所指向的对象中的内容。
3.通过成员方法来访问成员变量,隐藏类的实现细节,安全而且易于维护。
4.我们在进行程序的详细设计时,应尽量避免一个模块直接修改或操作另一个模块的数据,模块设计追求强内聚(许多功能尽量在类的内部独立完成,不让外面干预),弱耦合(提供给外部尽量少的方法调用)。

20:39 2010-4-6
1.static静态方法
a.在静态方法中只能直接调用同类中其他的静态成员(包括变量和方法)而不能访问类中的非静态成员。Because非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不需要创建对象。
b. 静态方法不能以任何方式引用this(指当前的对象)和super关键字。
c.main方法是静态的,因而在main方法中不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能访问非静态成员。

2.静态代码块
static{
}
a.一个类中可以使用不包含在任何方法体中的静态代码块(static block),当类被载入时,静态代码块被执行且只被执行一次,故常用来进行类属性的初始化。
b.类中的静态代码块被自动执行,尽管我们产生了类的多个实例对象,但其中的静态代码块只被执行了一次。

3.当一个程序中用到了其他的类,类是在第一次被使用的时候才被装载的,而不是在程序启动时就装载程序中所有可能用到的类。

4.单态设计模式
a.设计模式是在大量的实践总结和理论化之后优选的代码结构、编程风格以及解决问题的思考方式。设计模式就像是经典的棋谱,不同的棋局用不同的棋谱,免得我们自己再去思考摸索。使用设计模式也许会制约你去创新,但也不必因循守旧完全不去了解和借鉴前人的成功经验。
b.类的单态模式就是采取一定的方法保证在整个的软件系统中,对某个类只能产生一个实例对象,并且该类只提供一个取得其对象实例的方法。
c.实现类单态:首先必须将类的构造方法的访问权限设为private,这样就不能用new操作符在

类的外部产生该类的对象实例了。其次在类的内部产生一个静态的对象,再产生该类的静态方法返回内部创建的对象实例以便外部来访问这个唯一的对象实例。
(外部要访问唯一对象,只有内部来创建,需定义一个方法来返回对象,而且必须是静态的,静态的方法只能访问静态变量,所以定义的对象变量也必须是静态的。)
5.理解main方法
a.java虚拟机调用main()方法,所以该方法访问权限是public;
java虚拟机在执行main()方法时不必创建对象,所以该方法是static;
该方法接收一个String类型的数组参数,该数组保存执行java命令时传递给所运行类的参数。
Java语言规定,成员方法main必须同时含有public、static和void属性。
22:54 2010-4-7


Lesson 3 面向对象(下)

1.类的继承 extends
a.Java只支持单继承,不允许多重继承,但可以多层继承。
b.子类继承父类所有成员变量和方法,但不继承父类的构造方法,可用super(参数列表)调用。
c.若子类的构造方法没有显式的调用父类构造方法,也没有使用this关键字调用重载的其他构造方法,则在产生子类的实例对象时,系统默认调用父类无参数的构造方法。
2.若定义一个类的构造函数(含参数),则系统在编译时就不会自动产生无参构造函数,需要手动添加。
3.有父类子类,在产生子类实例对象时会调用其构造方法,这时会先去调用其父类的构造方法,默认是无参构造方法,或者在子类构造方法中使用super关键字去调用父类的含参构造方法。就这样显式或者隐式调用父类的构造方法,一直到Object类为止,他是所有Java类的最顶层父类。待父类的构造方法执行完以后,回到当前的构造方法,继续执行。
4.显式 明确写出代码,例如:启用super关键字;对变量直接赋值。
隐式 不明确写出代码,例如:Java虚拟机自动调用super();
5.super()和this()调用语句不能同时在一个构造函数中出现。
super()或this()调用语句只能作为构造函数中的第一句出现。
6.若子类覆盖父类的方法,不能把这个方法的访问权限变得更弱。public
7.子类不能继承父类中私有的成员变量和方法。
8.final关键字
a.在Java中声明类、属性和方法时,可使用其关键字final来修饰。
b.final标记的类不能被继承;
final标记的方法不能被子类重写;
final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次。要么在定义时赋值,要么在构造方法里赋值;如果定义成static,则只能在定义时赋值了(不产生对象就可以使用)。
c.方法中定义的内置类只能访问该方法内的final类型的局部变量,用final定义的局部变量相当于是

一个常量,其生命周期超出方法运行的生命周期,将一个形参定义成final也是可以的,这就限定了我们在方法中修改形式参数的值。
d.public static final共同标记常量时,这个常量就成了全局的常量。
9.抽象类
a.Java中可以定义一些不包含方法体的方法,其具体实现交给该类的子类根据自己的情况去实现,这样的方法就是抽象方法,包含其的类就是抽象类。
b.抽象类、抽象方法用关键字abstract来修饰。
c.抽象类不能被实例化,也就是不能用new关键字去产生对象。
d.抽象类的子类必须覆盖其所有抽象方法才能被实例化,否则该子类还是一个抽象类。
10.函数声明 int add(int a,int b);
函数实现 int add(int a,int b){}
11.接口 implements
a.如果一个抽象类中的所有方法都是抽象的,我们就可以将这个类用另外一种方式来定义,这就是接口。
b.接口是抽象方法和常量值定义的集合,从本质上讲,接口是一种特殊的抽象类,这种抽象类只包含常量和方法的定义,而没有变量和方法的实现。
c.接口中的成员都是public访问类型的,接口中的变量默认是用public static final标识的。
d.我们可以定义一个新的接口用extends关键字去继承一个已有的接口;
也可以定义一个类用implements关键字去实现一个接口的所有方法,我们还可以定义一个抽象类用implements关键字去实现一个接口中定义的部分方法。
e.一个类只能继承一个类,但能实现一个或多个接口,不过extends关键字要在implements关键字之前。
12.对象的类型转换
a.子类对象可以自动转换成父类;父类转换成子类必须要强制转换。
b.instanceof操作符可以用来判断一个实例对象是否属于一个类。
例如:a instanceof b 对象a属于类b 结果是布尔型的。
13.面向对象的多态性
a.应用程序不必为每一个派生类(子类)编写功能调用,只需对抽象基类进行处理即可。这一招叫“以不变应万变”,可以大大提高程序的可复用性。
b.派生类的功能可以被基类的引用变量引用,这叫向后兼容,可以提高程序的可扩充性和可维护性。以前写的程序可被后来程序调用不足为奇,现在写的程序能调用以后写的程序就厉害了。

9:16 2010-4-11

1.异常
a.程序中遇到的非致命的错误。
b.finally语句发生不发生异常都会异常,return也不行,除System.exit(0);这条语句外,该条语句寓意“终止当前正在运行的 Java 虚拟机”。
10:53 2010-4-11

1.一个进程中可以包含一个或多个线程,一个线程就是一个程序内部的一条执行线索。如果要在一个程序中实现多段代码同时交替运行,就需要产生多个线程,并指定每个线程上所要运行的

程序代码段,这就是多线程。
2.要实现多线程,需要编写一个类继承Thread类并实现其run()方法,调用Thread的start()方法将产生一个新的线程,并在该线程上运行Thread类对象的run()方法。
3.由于线程的代码段在run()方法中,那么该方法执行完毕后该线程就相应的结束了,所以我可以通过run()方法中的循环的条件来控制线程的结束。
4.后台线程和联合线程
a.如果我对某个线程在启动之前,即start()方法调用之前,调用了setDaemon(true)方法,这个线程就变成了后台线程。对Java程序来说,只要还有一个前台线程在运行,这个进程就不会结束,但如果一个进程中只有后台进程运行,这个进程就会结束。
b.xc.join()方法的作用是把xc这个线程所对应的线程合并到调用xc.join()方法的这个语句所在的线程中,直到该线程结束,不妨用xc.join(long millis);规定最多等xc这个线程终止的时间为多少毫秒,当然也可以使用两个参数精确到纳秒。
5.创建线程有两种方法:
a.继承Thread类 创建其子类对象时可以用 Thread tt=new Thread1(); Thread1子类。
b.实现Runnable接口 创建其子类对象时可以用 Thread tt=new Thread(new Thread1);
6.使用Runnable接口创建多线程
a.适合多个相同程序的代码去处理同一资源的情况,把虚拟CPU(线程)同程序的代码、数据有效分离,较好地体现了面向对象的设计思想。
b.可以避免由于Java的单继承特性带来的局限。我们经常碰到这样一种情况,即当我们要将已经继承某一个类的子类放入多线程中,由于一个类不能同时有两个类,所以不能用Thread类的方式,那么这个类就只能采用Runnable接口了。
c.当线程被构造时,需要的代码和数据通过一个对象作为构造函数的实参传递过去,这个对象就是实现了Runnable接口的类的实例。
d.事实上,几乎所有的多线程应用都可用Runnable接口方式。
7.synchronized(str) {} 同步语句块 String s
tr=new String("");

21:44 2010-5-5
图形用户界面 GUI (Graphical User Interface)

╠AWT的基础知识
╠AWT事件处理
GUI╬GUI组件上的图形操作
╠常用的AWT组件
╠布局管理器
╠Swing
●AWT的基础知识
JDK中提供了AWT和Swing两个包,用于GUI程序的设计和开发。
AWT
GUI组件可以分为两大类:基本组件和容器,分别是https://www.wendangku.net/doc/069497490.html,ponent和java.awt.Container的直接或间接子类。
程序的GUI部分由AWT线程管理。
java.awt.Window (public class Window extends Container implements Accessible)
其直接子类有Dialog, Frame, JWindow
其中方法:void setSize(int width, int height)
调整组件的大小,使其宽度为 width,高度为 height。
void dispose()
释放

由此 Window、其子组件及其拥有的所有子组件所使用的所有本机屏幕资源。
void setVisible(boolean b)
根据参数 b 的值显示或隐藏此 Window。
●AWT事件处理
·事件处理机制 用于程序和用户之间的交互。
事件:用户对组件的一个操作,称之为一个事件。
事件源:发生事件的组件就是事件源。
事件处理器:某个JAVA类中的负责处理事件的成员方法。
·事件分类
按产生事件的物理操作和GUI组件的表现效果进行分类:
MouseEvent
WindowEvent
ActionEvent
按事件的性质分类:
低级事件
语义事件(又叫高级事件)关心的是具有特殊作用的GUI动作发生了,而不关心动作是怎么发生的。
查找API相关监听器类:如果监听器中只有一个成员方法,那么就是语义事件。
如果监听器中有多个成员方法,那么就是低级事件。
·事件监听器
一个事件监听器对象负责处理一类事件。
一类事件的每一种发生情况,分别由事件监听器对象中的一个方法来具体处理。
在事件源和事件监听器对象中进行约定的接口类,被称为事件监听器接口。
事件监听器接口类的名称与时间类的名称是相对应的。ex:MouseEvent→MouseListener。
public class WindowEventextends ComponentEvent
public Component getComponent() 返回事件的始发者。
public Object getSource() 返回最初发生 Event 的对象。
public void addWindowListener(WindowListener l)
添加指定的窗口侦听器,以从此窗口接收窗口事件。如果l为 null,则不抛出任何异常,且不执行任何操作。
小结:处理发生在某个GUI组件上的XxxEvent事件的某种情况,其事件处理的通用编写流程:
1.编写一个实现了XxxListener接口的事件监听器类。
2.在XxxListener类中的用于处理该事件情况的方法中,编写处理代码。
3.调用组件的addXxxListener方法,将类XxxListener创建的实例对象注册到GUI组件上。





相关文档