java 虚拟机要将被用到的java类文件通过classLoader 加载到JVM内存中。
首先classloader 分三个级别,最上级 : bootstrap classLoader 中间级:extension classLoader 最低级 app classLoader.
当需要加载某个类的时候,会看看这个类是否已经被加载了,如果没有,会请求app 级来加载,app 请求 extension 级 extension 请求 bootstrap级, 由最高级来负责加载(这个就是双亲委派,委托 上两级的loader来做加载),如果高级的无法加载 则会将人物返回给 下一级 以此类推 最后如果双亲都不行 就由自己来加载。 为什么要用这个机制? 比如 java.lang.String 这个类,这个是jdk提供的类, 如果我们自定义个 包名:java.lang 然后在里面创建一个String 类, 当我在用String类的时候,根据前面所说,是由bootstrap级的loader 来进行加载的,这个时候它发现其实已经加载过了jdk的String了,那么就不会去加载自定义的String了,防止了重复加载 也加大了安全性。
纯手打,有问题指正。
什么是委托事件模型在教材上的图中,我们可以发现,用户通过键盘、鼠标等进行操纵的行为,最终都传递给了JVM,那么JVM在接收到这些事件以后该如何处理呢?我们把这种处理事件的方案,称之为事件模型。
Java中采用的是委托事件模型:jdk1.1以后,引入的一种新的事件代理模块,通过它,事件源发出的事件被委托给(注册了的)事件监听器(Listener),并由它负责执行相应的响应方法。比如:病人生病请医生。
基于这种模型,我们使用两种类型的对象来执行事件机制,这两种对象是:
事件源对象
事件的侦听对象
委托事件模型的实现步骤
在java语言中委托事件模型的处理步骤如下:
1.建立事件源对象。如各种GUI的组件。
2.为事件源对象选择合适的事件监听器。比如事件源对象如果是“按钮”,那么我们能想到的发生在按钮身上最多的,应该是单击事件了。这时我就应该选择鼠标单击事件的监听器。
3.为监听器添加适当的处理程序。比如当按钮单击事件发生后,希望完成的代码。
4.为监听器与事件源建立联系。
窗体自身实现事件监听
我们在刚才的例子中使用了两个对象,一个是事件源对象,即JFrame窗体,另外还创建了一个监听器对象。事实上在实际开发过程中,我们往往,将这两个类写在一起,就是说一个窗体类自己监听自己的事件
其他事件监听器接口的使用
Java支持的事件监听器接口非常多,常见的主要有:
ActionListener 行为监听接口
AdjustmentListener 调整监听接口
ItemListener 选项监听接口
TextListener 文本监听接口
ComponentListener 组件监听接口
KeyListener 键盘监听接口
MouseListener 鼠标点击监听接口
MouseMotionListener 鼠标移动监听接口
FocusListener 光标聚焦监听接口
WindowListener 窗体监听接口
ContainerListener 容器监听接口
KeyListener接口与KeyAdapter类
KeyListener接口:监听键盘事件。
该接口中定义了如下三个方法:
keyPressed() 键盘按下时触发
keyReleased() 键盘释放时触发
keyTyped() 键盘单击一次时触发
KeyAdpeter适配器:即使我们只想使用上述三个方法中的一种,那么我们也必须在KeyListener接口的实现类中对这三种方法进行重写,这种方式显然增加了很多无效代码,我们可以使用适配器模式解决。
匿名内部类
WindowListener接口与WindowAdapter类
WindowListener接口:监听窗体的行为。
windowListener接口常用方法:
windowActivated(WindowEvent e) 将 Window 设置为活动 Window 时 调用。
windowClosed(WindowEvent e)因对窗口调用 dispose 而将其关闭 时调用。
windowClosing(WindowEvent e) 用户试图从窗口的系统菜单中关闭窗 口时调用。
windowDeactivated(WindowEvent e) 当 Window 不再是活动Window 时调用。
windowDeiconified(WindowEvent e) 窗口从最小化状态变为正常状 态时调用。
windowIconified(WindowEvent e) 窗口从正常状态变为最小化状态 时调用。
windowOpened(WindowEvent e) 窗口首次变为可见时调用。
MouseListener接口与MouseAdapter类
MouseListener接口:监听鼠标点击的行为。
MouseListener接口常用方法:
mouseClicked(MouseEvent e) 鼠标按键在组件上单击(按下并释放)时调用。
mouseEntered(MouseEvent e) 鼠标进入到组件上时调用。
mouseExited(MouseEvent e) 鼠标离开组件时调用。
mousePressed(MouseEvent e) 鼠标按键在组件上按下时调用。
mouseReleased(MouseEvent e) 鼠标按钮在组件上释放时调用。
MouseMotionListener接口与MouseMotionAdapter类
MouseMotionListener接口:监听鼠标移动的行为。
MouseMotionListener接口常用方法:
mouseDragged(MouseEvent e) 鼠标按键在组件上按下并拖动时调用。
mouseMoved(MouseEvent e) 鼠标按键在组件上移动(无按键按下)时调用
1.final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。被声明为final的
方法也同样只能使用,不能重载。
finally—抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。
2.
(1)
int sum=0//奇数和
int count=100;取值区间
for(int i=0i<=counti+=2){
sum+=i
}
System.out.println("奇数和:"+sum)
(2)
Math.pow(2.5, 3))//没试 不一定对
(3)
public class test {
public static void main(String[] args) {
int x = 1
while(x <= 20){
if(x%5==0){ System.out.print(x +"\n") x++}
else{ System.out.print(x +" ")x++}
}
}
}
3.
return 返回一个值给调用该方法的语句
break 流程跳出本层循环体,从而提前结束本层循环
continue 跳过本次循环,执行下一次循环
4.
JAVA异常分2种 :
一种是异常JAVA运行时的系统异常Error,由Java虚拟机生成并抛出,一般来说 Error表示恢复不是不可能但很困难的情况下的一种
严重问题。
另一种是 Exception异常,表示一种设计或实现问题上的错误(如 数组越界)。
异常处理功能提供了处理程序运行时出现的任何意外或异常情况的方法。异常处理使用 try、catch 和 finally 关键字来尝试可
能未成功的操作,处理失败,以及在事后清理资源。
5.
按数据流方向:输入流 和输出流,一个输入一个输出,不用说了吧
按处理数据的单位: 字节流和字符流。字节流主要用在处理二进制数据,它是按字节来处理的。但实际中很多的数据是文本,又
提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化
按功能: 节点流和处理流。节点流:从特定的地方读写的流类,例如:磁盘或一块内存区域。
处理流:使用节点流作为输入或输出。是使用一个已经存在的输入流或输出流连接创建的。
6.
同4
7.
接口就是给出一些没有内容的方法,类似于C++中的虚类。到具体用的时候再由用的方法自己定义内容,要注意的是想用接口必须
实现接口的所有方法,其实是因为java不支持多继承才产生了接口
定义public interface UsersDao {
public void add(Users user) throws Exception
public void update(Users user) throws Exception
}
实现public class UserDaoImpl implements UsersDao {
public void add(Users user) throws Exception {
//实现代码
}
public void update(Users user) throws Exception {
//实现代码
}
}
Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以,这大概就是Java
抽象类唯一的优点吧,但这个优点非常有用。如果向一个抽象类里加入一个新的具体方法时,那么它所有的子类都一下子都得到
了这个新方法,而Java接口做不到这一点,如果向一个Java接口里加入一个新方法,所有实现这个接口的类就无法成功通过编译
了,因为你必须让每一个类都再实现这个方法才行,这显然是Java接口的缺点。
8.
封装就是将属性私有化,提供公有的方法访问私有的属性。
封装的优点:
(1)隐藏类的实现细节;
(2)让使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;
(3)便于修改,增强代码的可维护性;
实现:封装:将复杂的处理过程写进类的方法中,外部只需要调用一个函数就能实现。
class A{
public long sum(int begin,int end,int step)
{
long sum=0
for(int i=begini<=endi+=step)
sum+=i
return sum
}
}
class Test{
static public void main(String[] str){
A a=new A()
System.out.println(a.sum(1,1000,1))//求从1到1000步长为1的和
}
}
将求阶加封装到方法,Test类只需要调用A类的一个方法就行,提高程序的简易度。
9.
对于几个已有的类来说,如果A继承了B,则B为A的超类(Superclass),A为B的子类(Subclass)。
在Java中,一个类只能继承一个超类,这种方式就是所谓的单继承。虽然一个类只可以有一个超类,但是一个超类却可以被多个
子类所继承。通过继承机制,子类拥有超类的成员变量和方法。当然,基于类的多态性特性,子类也可以拥有自己的成员变量和
方法。Java提供了一个最顶层的根类Object(java.lang.Object),它是所有类的超类。例如,下面的代码声明了一个Object对
象o1:Object o1
10.
java 事件委托机制的概念,一个源产生一个事件并将它送到一个或多个监听器那里。在这种方案中,监听器简单的等待,直到它
收到一个事件。一旦事件被接受,监听器将处理这个事件,然后返回
JAVA的事件处理机制的核心内容是:事件的发生与事件的处理。也就是说,某一个组件发生了一些变化,则该组件只需要产生一个事
件,而不用关心该事件如何被处理。其它组件如果对该事件感兴趣,则编写相应的事件处理代码。
事件源:产生事件的对象
监听者:负责处理事件的方法。
java swing中的事件模型:
事件源:即各种可以被操作从而产生相应的组件。
事件类型:对于一个组件可以产生很多类型的事件,比如鼠标单双击、changed等;一种事件可以被不同的组件产生
事件处理接口:这也就是真正处理事件的地方,针对各种事件提供了不同的接口,你只需要新建一个class
implements这些接口,这些类的实例称为监听器listener,实现其中与特定事件相关的方法。
注册:事件源有了,监听器有了,那么下一步就是把二者联系起来,component.addXXXListener(监听器对象);