2012年(106)
分类: Java
2012-05-08 01:43:02
面向对象思想
1、封装
属性:使用private修饰,对外界隐藏。
private boolean flag=true/false
boolean getFlag(){}
功能:(方法,函数)实现细节的隐藏
2、继承:extend 通过已有的类扩展新的类
全盘皆收
Java的类和类之间只有单继承
Class 父类
{
抽烟();
}
Class 子类 extends 父类
{
}
3、多态:
(同一类域)的(不同对象)在调用(相同的方法)的时候(表现不同)。
注意:类里边定义成员的地方,不可再设置成员的属性,不然不报错,成员属性在方法中设置。
二、方法(函数)
完成特定功能的代码段:入口:参数列表的限制,出口:返回值类型的限制;保证流入数据和流出数据的正确性
面包 面包机(水,面粉,糖)
{
//制作面包的细节
}
1、访问修饰符:public,private,protected,默认
2、返回值类型:与return 中表达式的数据类型保持一致
3、throws Exception :声明抛出异常的种类
String和StringBuffer:String用于处理简单的字符串,但大量的字符串连接操作可能导致垃圾的大量出现,建议使用StringBuffer处理连接操作。
内存中的情况:String——当两个字符相加的时候调用(str1=str1+str2),它会再开辟一个内存空间存放str1+str2,然后把该内存空间的值赋给str1,而StringBuffer则不会再开辟空间,而是在传过来的元数据地址上直接操作。
this:当前对象的引用
this.实例变量
this.成员方法();
this(参数列表);调用本类“存在的”构造器
Package:包:文件夹
1.作用:为.class文件进行归类;避免命名冲突
2.定义了包的类进行编译后,类名将发生改变
格式:包名.类名.->类的全限定名
方法的重载
1、方法名相同
2、参数列表不相同
(1)参数个数不同
(2)参数类型不同
(3)参数顺序不同
3、返回值是否相同无关
函数指针使用函数名来表示;重载的方法函数名全都相同,重载的方法函数指针一致?
错,参数的个数不同,类型不同可以保证名字的唯一性
有编译原理可知:
add(int a ,intb) add(int a,int b,int c)
编译成
[ ]_add_int_int_[ ]
[ ]_add_int_int_int_[ ]
继承:extend
1、子类继承父类所有的方法及属性,构造器除外!
2、继承是“is a”的关系
3、继承:代码重用,模式
4、类和类之间只准许单继承
5、方法的重写(覆盖)必须是在继承里;派生类重写的方法的访问权限不能低于基类的权限。
(1)具有相同的 参数列表,返回值类型,方法名,参数个数和参数类型
(2)可见度不能缩小
(3)声明抛出异常的种类不能增加
“Student” is a “Person”
class A
{
int a;
public A(int a){}
}
class B extends A
{
int b;
int c;
public B(int a,int b,int c)
{
super(a);//调用父类“存在的”构造器;
//只能放在子类构造器的第一行格式super(参数列表)
//如果子类没有显示的调用父类的任何构造器,系统将自动调用父类默认的构造器
this(参数列表)
super.父类准许访问的属性;
this.本类的属性;
super.父类准许访问方法();
this.本类的方法();
}
}
class C
{
int a;
int b;
int c;
public C(int a,int b,int c){}
}
B objB=new B(1,2,3)
C objC=new C(1,2,3)
选择原则?
B继承内存使用原则就是链表
C的内存使用原则是连续的
6、接口:所有的方法都以声明的形式存在:
(1)、一个类可以同时实现一个或多个接口(implement)当一个类实现一个或多个接口的时候,该类必须实现接口中所有声明的所有方法,否则,该类必须使用abstract进行修饰(抽象类:避免对实现不完整的类进行实例化/抽象类:部分方法以声明的形式存在)
(2)、接口和接口之间可以多继承
(3)、描述类的基本功能(最低的要求)。规范,标准
一个类可以继承多个接口
一个接口也可以继承多个接口
interface Soft
{
Sit();
Sleep();
}
interface Bed
{
Sit();
Sleep();
}
interface SofaBed extends Sofa,Bed
{}
class SofaBed implements Sofa,Bed
{
Sit(){};
Sleep(){};
}
类型 创建对象的引用 实例化 方法的实现
----------------------------------------------------------------------------------------------------
class 可以 可以 全部实现
abstract class 可以 不可以 部分实现
interface 可以 不可以 全未实现
GUI:图形用户界面
一、容器:
可以盛放组件(按钮,文本框等)或容器
顶级容器:不能再放子其他的容器中,最外层容器JFrame 它不能存放任何子组件和设置布局管理器
普通容器:JPanel
二、布局管理:摆放的方式
1、FlowLayout:流式布局
2、BorderLayout:边界式布局
3、GridLayout:网格式布局
4、CardLayout:卡式布局
考试系统
1、用户模块
登录:按照用户名和密码检索
注册:增加
2、考试模块
*****重新填写,不跳转*******
答案超限[0--1000]
非法字符
***保存答案,跳转********
放弃(未达或不填即空格) -1
有效答案
3、成绩显示模块
三、事件处理原理
1、事件:“所关注”的对象的属性的改变。
Class ....Event事件类:携带事件本身的相关信息
{
2、事件源:发生事件的主题 Girl
3、对事件的描述:事件的必要相关信息
}
4、事件处理的范围 interface
监听:监视
Interface ....Listener
{
Happy();
Sad();
}
Btn.addActionListener
(nw ActionListener()
{
Pulbic void actionPerformed(ActionEvent e)
{
//处理
}
}
)
Timer:每个多长时间执行一次摸个任务
Timer timer=new Timer(时间间隔/毫秒 1000,new ActionListener()
{
Public void actionPerformed(ActionEvent e)
{
//执行的任务
}
});
单击JButton,在JTextFied,JtextArea中按回车,单击菜单项MenuItem会触发AticonEvent事件,有AticonEventListener监听 在public void actionPerformed(ActionEvent e){}中做事件处理工作
JradioButton,JcheckBox 事件ItemEvent ItemListener public viod itemStateChage( )
组件:
JRadioButton:单选 逻辑分组:ButtonGroup bg=new ButtonGroup()
JCheckBox:复选
菜单:
JMenuBar:菜单条
JMenu:菜单
JMenuItem:菜单项
Thread
一、概念
1、进程
OS:完整的任务(多个应用程序协同工作)
语言级别:一般单指一个独立的应用程序
2、线程:是一个资源共享,独立运行,不可再分(原子性)的小任务。目的:提高效率
3、线程进程关系:一个进程可以被“合理”的划分为多个线程
二、共享:
1、CPU:时间
2、data:地址空间,进程的地址空间独立
3、code::执行的任务
注意程序中共享资源的实现,程序中的共享资源是对同一内存节点的访问
三、需要掌握的方法
1、Thread.currentThread():获取当前线程对象的引用
2、sleep(毫秒):线程的挂起,需要异常处理。
3、run():线程执行的任务
4、start():线程的启动
*5、stop():线程的停止,禁用!
6、isAlive():判断线程是否处于活动状态
7、join():一个线程等待另一个线程结束之后再结束,
8、控制线程的运行:ch10/PriorityTest.java
四、创建子线程类
1、继承Thread
2、实现Runnable接口
实现run()方法
两种方法之间效率上没有区别,由于java类和类之间只容许单继承,如果在继承一个类的同时还需要实现多线程,建议使用方式2回避单继承的局限性。
**五、线程的并发访问控制
(在资源上使用,相当于给资源加了一个锁)(Java就业培训教程—张孝祥p192 ,ch10/DeadLockTes.java SynchonizedTest.java)
1、当多个线程操作同一个对象时,为了保证线程对对象操作的完整性,可以使用synchronized(次关键字和Thread没有任何联系)修饰对应的方法(同步方法)。
2、当一个线程进入到另一个对象的同步方法,该线程将“有机会”(有可能,只有锁是空闲的时候)获得对象的锁,保证对象的完整操作,直到操作完毕释放对象的锁
3、同步块:当线程操作的对象所属的类没有提供相应的同步方法且不可更改,可以使用同步块来代替
格式:synchronized(对象的应用)
{
//对对象的操作
}
***Synchronized 区的代码可理解为操作系统的临界区代码,进入临界区是必须要得到临界区的锁,然后关闭锁,访问临界区,如果在临界区遇到break或抛出异常是线程会释放锁,不然只有退出临界区时才打开锁,其他线程才可以访问。锁在对象上 ,锁的作用域在Synchron修饰的代码区上
六、线程的死锁
产生的原因:对资源的竞争(主),不当的执行书序
逻辑错误,资源的交叉等待(同一时刻),且由于某些原因导致永远无法获得所等待的资源的异常。
建议:可以在对结果没有影响的情况下微调代码的顺序
七、生产者和消费者问题
T1 T2
八戒 馒头 厨子
Qtest.java
class Object
{
equals(){}
toString(){}
hashCode(){}
getClass(){}
//---------------------------
wait(){}:使线程处于等待的状态
notify(){}:唤醒处于等待状态的线程
notifyAll(){}:唤醒处于等待状态的所有线程
(1) 来自Object类
(2) 必须用在同步方法中即必须在synchronized修饰的方法或块中使用
(3) 用于线程之间的通信 ch10/QTest.java
(4) 通常和标志变量结合使用
(5) 谁做监控器就调用谁的这些方法,千万别搞错对象,不然会出错的
}