??xml version="1.0" encoding="utf-8" standalone="yes"?>国产日韩欧美一区二区三区四区 ,久久久久高潮毛片免费全部播放,99re这里只有精品视频首页http://www.aygfsteel.com/jiangquan/zh-cnWed, 18 Jun 2025 00:15:15 GMTWed, 18 Jun 2025 00:15:15 GMT60JAVA语法复习http://www.aygfsteel.com/jiangquan/archive/2013/01/13/394146.htmlDolveVitaDolveVitaSun, 13 Jan 2013 01:29:00 GMThttp://www.aygfsteel.com/jiangquan/archive/2013/01/13/394146.htmlhttp://www.aygfsteel.com/jiangquan/comments/394146.htmlhttp://www.aygfsteel.com/jiangquan/archive/2013/01/13/394146.html#Feedback0http://www.aygfsteel.com/jiangquan/comments/commentRss/394146.htmlhttp://www.aygfsteel.com/jiangquan/services/trackbacks/394146.html工作原理
1Q编?java文本文gQ?br />2Q通过~译器编译ؓ.class二进制文Ӟ
3Q用JAVA虚拟机执?class文gQ不同^台对应不同虚拟机Q?br />System.exitQmainҎl束不等于整个程序的真正l束Q可能还有线E在q行着Q调用System.exit()才达到程序的真正l束?/p>


面向对象原理
单承,多接口实玎ͼ一般,l承主要用在一个系列的对象抽象Q接口主要针对功能的抽象Q?br />JAVA语言中,q所有的变量都是对象Q基本的数值类型(char,short,int,long,float,double,booleanQ除外,可能是ؓ了运行速度Q编译器没有这些类型编译ؓ对象Q?br />对象Object是所有对象的宗Q?br />对象Class保存一个对象的cd信息Q也可以是基本的数值类型;


数据cd
int         4B
short       2B
long        8B
byte        1B
float       4B (后缀f,F)
double      8B (后缀d,D)
char        2B
boolean     1B
前缀Q?br />0xQ十六进?(指数用pQ十q制用e)
0Q八q制


变量命名
字母(a-zA-Z)、下划线(_)开_后箋字母可以是字母、数字、下划线Q不能是关键字或者保留字?/p>


关键?/strong>
abstract, assert, boolean, break, byte, case, catch, char, class, const, continue, default, do, double, else, extends, final, finally, float, for, goto, if,

implements, import, instanceof, int, interface, long, native, new, null, package, private, protected, public, return, short, static, strictfp, super, switch,

synchronized, this, throw, throws, transient, try, void, volatile, while
其中Qconst和goto是保留关键字?/p>


注释
//行注?/p>


q算W?br />术q算Q?????Q?+?-?=?=Q?br />关系q算Q?gt;?lt;?=?gt;=?lt;=?=??amp;&、||Q?br />位运:&、|、^、~?gt;>?gt;>>?lt;<?lt;<<Q?/p>


程控制
if ... else ...
(...) ? ... : ...;
switch  只能接受byte、short、char、int四种Q不能接受longcd?br />for
for each
while
do...while


参数传?br />基本数据cd按照g递,对象按照引用传递;String对象没有修改该对象的ҎQ如果要通过引用修改可以使用StringBuilder或StringBufferQ?/p>


面向对象
cd载:static字段、一般字Dc构造函数字D;Q注意:static成员是类加蝲器加载的Q是U程安全的;Q?br />l承Q?br />接口Q?br />内部cR匿名内部类用途:使用一个对象去做Q务处理,但是该对象以后也不需要用刎ͼq样在一个类A内部定义一个内部类BQ这LB可以讉KcA的数据,外界q不知道有类B的存在;
异常l承时候,父类与子cȝ异常声明可以不同Q但是子cȝ异常必须在父cȝ异常范围之内Q也是父类的异常必d以引用子cȝ异常Q?br />Ҏl承时候,如果需要覆盖,Ҏ名称、Ş参类型、返回类型必ȝ同;


讉K修饰W?/strong>
           当前对象    同一个包中子c?非子c?nbsp;    其它包中子类/非子c?br />private    yes         no/no                     no/no
protected  yes         yes/yes                   yes/no
默认       yes         yes/yes                   no/no
public     yes         yes/yes                   yes/yes


对象比较
使用==比较的是引用Q用equals默认比较的也是对象的引用Q但是,l过重蝲的equals可以按照我们需要去比较特点字段Q?br />Stringc重载了equals与hashCodeQ而StringBuilder与StringBuffer没有l过重蝲Q因此用equals比较StringBuilder与StringBuffer实际比较的是引用Q?br />注意Q重载equals必须同时重蝲hashCodeQ这两个Ҏ必须保持同步Q即equals与hashCode同真假;


对象序列?br />l承接口Serializable卛_以实现对象序列化Q默认是序列化与反序列化的结果是相同的(引用被序列化后再反序列化回来q是跟之前相同的Q;
一般序列化后,要定义字DserialVersionUIDQeclipse自动可以生成Q作用是保持序列化与反序列化时候的版本兼容Q如果不定义该字D,当出现反序列化时候内容不同时Q可能会报错Q?br />transient关键字可以该字D不q行序列化;


对象克隆
l承接口CloneableQ然后覆盖Objectcȝclone()Ҏq行克隆的声明;默认是浅拯Q若字段是引用类型,则需要手动在clone()Ҏ里面人工q行new一个对象;
数组默认支持克隆Q但是数l的数组Q二l数l以上)不支持直接用克隆;


异常
异常的结?br />Throwable
        |
    Error  Exception
                            |
               IOException{?nbsp; RuntimeException

异常的分c?br />1Q未查异?br />RuntimeException和Error及其子类?br />q类异常不需要显式捕捉,一旦发生,它自动会抛出来,然后E序l止Q当Ӟ你也可以q行捕捉Q这L序就可以l箋q行Q?br />2Q已查异?br />Exception及其子类
׃Exceptionz的子cdExceptioncd是已查异常,所以,ThrowablecM属于已检查异常;q类异常必须q行捕捉Q否则编译不能通过?/p>

声明已检查异?br />例:public FileInputStream(String name) throws FileNotFoundException

抛出已检查异?br />例:throw new Exception("message");

捕获异常
如果不捕L话,E序׃l止。有些时候,出现了异常,但是Q我们不需要终止程序,那么需要捕获异常?br />try {
    // 可能抛出异常的代?br />} catch(异常cd e) {
    // e.printStackTrace(); // 打印异常堆栈
    // 处理
}
// catch语句是从上到下执行的Q具体的异常应该攑֜上面Q?/p>

传递异?br />异怼递下去,q样才能不会被覆盖;
try {
    // access the database
} catch(SQLException e) {
    throw new ServletException("database error.", e);
}

finally子句
finally子句是一定会执行的,该子句主要用于回收一些资源?/p>


泛型Q属于底层代码,不常用)
JAVA虚拟Z没有泛型Q只有普通类与方法,使用泛型主要是ؓ了方便类型{换;q有泛型可以限定对象引用的用;所有,泛型了解使用卛_Q不需要深IӞ
泛型包含两种Q泛型类、泛型方法;泛型cM要用于对某个不确定类型的字段q行操作Q泛型方法是指staticҎ中用了泛型参数Q?/p>

泛型的翻?br />译泛型表达?br />A a = new A();
a.setT("generic programming.");
String str = a.getT(); // 译为:String str = (String) a.getT();
译泛型Ҏ
public static T getMiddle(T[] a) // 译为:public static Object getMiddle(Object[] objects)
public static   T getMiddle(T[] a) // 译为:public static Comparable getMiddle(Comparable[] a)
// 默认是{化ؓ左边W一个类型,所有尽量将范围大的cd攑ֈ前面Q?br />复杂一点的桥方法:
class A {
 
 private T t;
 
 public void setT(T t) {
  this.t = t;
 }
 public T getT() {
  return t;
 }
}
class B extends A {

 

 public void setT(String t) {
  super.setT(t);
 }
}

// 译后:
class A { // 父类译后肯定是Object
    private Object t;
  
    public void setT(Object object) {
 t = object;
    }
  
    public Object getT() {
 return t;
    }
}
class B extends A {
    public void setT(String string) { // 子类肯定它的父类是String
 super.setT(string);
    }
  
    public volatile void setT(Object object) { // 桥方法,外界q是认ؓ是Object
 setT((String) object);
    }
}
// 调用Q?br />A a = new B();
a.setT("generic programming."); // 译为:b.setT((Object) "generic programming.");

不能使用泛型的情?br />不能使用泛型l承异常?br />例如Qpublic class Problem extends Exception {...}?br />不能在catch(...)中,使用catch(T t)?br />异常声明中可以用泛型?br />例如Qpublic static void doWork(T t) throws T {...}?/p>

不能用泛型数l?br />A[] arr = new A[5]; // 擦除后ؓQA[] arr = new A[5];

不能泛型类型实例化?br />class A {
 a = new T(); // 擦除后是a = new Object();我们本意却不是这个?br /> ...
}

cȝ静态字D不能用泛型;

当泛型类型擦除后Q创建条件不能出冲H?br />例如Qpublic boolean equals(T t) {...}

 

cd限定
子类型限?lt;? extends Employee>Q可以读Q不能写?br />Pair<? extends Employee> pair1 = null; // ?是Employee的子c,子类可能很多Q不定有几个?br />Pair<Manager> pair2 = new Pair<Manager>();
pair1 = pair2;
pair1.getFirst(); // 操作成功Q因为是“(? extends Employee) pair1.getFirst();”Q?br />  // 相当于是“(Employee) pair1.getFirst();”?br />pair1.setFirst(new Manager()); // ~译通不q,因ؓ?#8220;pair1.setFirst(? extends Employee);”
  // 相当于是“pair1.setFirst(?);” 不确定的cd?/p>

类型限?lt;? super Employee>Q可以写Q不能读Q刚好和上面相反?/p>

无限定通配W?lt;?>Q可以读Q不能写Q读的时候直接{型ؓObject?/p>


反射Q属于底层代码,不常用)
对象产生于类Q而在JAVA虚拟机里面还保存着对类的描qͼq个描述是一个Class的对象;cM息被加蝲到虚拟机Q就会生一个Class对象Q用以描q这个类的信息;
通过q个Class对象可以解析cȝl构Q这个Class对象可以从类信息来(例如QEmployee.classQ,也可以从对象来(例如Qemp.getClass()Q;
通过q个Class对象可以引用具体对象的字Dc方法、构造器Q可以完全操作一个对象;
.class: 应该是一个指向类的Class对象的指针?br />forName(): 会调用当前线E所在的ClassLoader来装载一个类的Class实例?br />注意Q基cd也可以这样?#8220;int.class”Q?/p>


cd载器Q属于底层代码,不常用)
java中的cL动态加载的Q即引用C才会被加载;
// 三种加蝲方式CZ
class A{}
class B{}
class C{}
public class Loader{
    public static void main(String[] args) throws Exception{
       Class aa=A.class;
       Class bb=Class.forName("B");
       Class cc=ClassLoader.getSystemClassLoader().loadClass("C");
    }
}

pȝ内默认的cd载器
Bootstrap ClassLoader (加蝲rt.jar)
 |
 ExtClassLoader (加蝲jre/lib/ext/)
  |
  AppClassLoader (加蝲claspath)

//ClassLoader实现Q查扄Q从父加载器向上遍历Q找不到p用当前自定义的加载器Q?br />protected ClassLoader() {
 SecurityManager security = System.getSecurityManager();
 if (security != null) {
     security.checkCreateClassLoader();
 }
 // 自己实现的类加蝲器,默认是用pȝcd载器的?br /> this.parent = getSystemClassLoader();
 initialized = true;
}

protected ClassLoader(ClassLoader parent) {
 SecurityManager security = System.getSecurityManager();
 if (security != null) {
     security.checkCreateClassLoader();
 }
 // 传入一个父加蝲?br /> // 如果parent=nullQ那么启动类加蝲器就是父二Ӏ?br /> this.parent = parent;
 initialized = true;
}
 
// 双亲委派加蝲的实?br />public Class<?> loadClass(String name) throws ClassNotFoundException {
 return loadClass(name, false);
}

protected synchronized Class<?> loadClass(String name, boolean resolve)
 throws ClassNotFoundException {
 // 先检查该cL否已l被装蝲q?br /> Class c = findLoadedClass(name);
 if (c == null) {
     try {
   // 向父加蝲器委托(加蝲不到抛ClassNotFoundExceptionQ?br />   if (parent != null) {
       c = parent.loadClass(name, false);
      
      // 最l到启动cd载器Q加载不到抛ClassNotFoundExceptionQ?br />   } else {
       c = findBootstrapClass0(name);
   }
     } catch (ClassNotFoundException e) {
         // 父加载器加蝲不到Q调用我们自p定的findClass(name)q行查找
         // 对于API提供的ClassLoaderQfindClass()是直接抛ClassNotFoundException
         c = findClass(name);
     }
 }
 // 是否要解析(解析W号引用为直接地址引用Q?br /> // 一般我们用false?br /> // 我的理解是用false的话Q程序启动速度应该会有一点点提升Q但是第一ơ执行的时候应该会慢一点点?br /> // 当然Q这个我们h是感觉不出来的?br /> if (resolve) {
     resolveClass(c);
 }
 return c;
}



=====
from
http://blog.sina.com.cn/s/blog_667ac0360102e8ii.html

DolveVita 2013-01-13 09:29 发表评论
]]>
Java的SystemTraycȝ使用Ҏhttp://www.aygfsteel.com/jiangquan/archive/2013/01/13/394145.htmlDolveVitaDolveVitaSun, 13 Jan 2013 01:27:00 GMThttp://www.aygfsteel.com/jiangquan/archive/2013/01/13/394145.htmlhttp://www.aygfsteel.com/jiangquan/comments/394145.htmlhttp://www.aygfsteel.com/jiangquan/archive/2013/01/13/394145.html#Feedback0http://www.aygfsteel.com/jiangquan/comments/commentRss/394145.htmlhttp://www.aygfsteel.com/jiangquan/services/trackbacks/394145.htmlJava的SystemTraycȝ使用Ҏ

JDK1.6版增加了java.awt.SystemTrayc,该类表示桌面的系l托盘,q对大多数系l托盘应用已l够。如果这个类q是不能满您的需求,可以试一试JDIC QJDesktop Integration ComponentsQ?br />JDK1.6的API文档Q给Zq个cȝ用法。有人愿意把创徏pȝ托盘的代码直接放在主应用代码中,W者更們֐于把创徏pȝ托盘的责dz一个单独的c,q符合类的设计原则。在d用中直接调用该类的工厂方法就可以了,l构清晰Q便于维护,改动或增加系l托盘的功能Q不必改动主应用代码?br />创徏pȝ托盘的类(TrayFactory.java)的代码如下:

//package com.jnmc.liang.systemtray;

import java.awt.*;
import java.awt.event.*;

public class TrayFactory {
        private TrayIcon trayIcon = null;
        private Component comp = null;
        private String trayImageName = null;
        private String tooltip = null;
        
        private TrayFactory(Component comp, String trayImageName, String tooltip) {
                this.comp = comp;
                this.trayImageName = trayImageName;
                this.tooltip = tooltip;
                
                init();
        }
        
        private void init() {
                if (SystemTray.isSupported()) {
                        SystemTray tray = SystemTray.getSystemTray();
                        Image image  = Toolkit.getDefaultToolkit().getImage(trayImageName);
                        PopupMenu popupMenu = new PopupMenu();
                        MenuItem restoreItem = new MenuItem("q原"); 
                        MenuItem exitItem  = new MenuItem("退?);
                        
                        restoreItem.addActionListener(new RestoreItemActionListener());                        
                        exitItem.addActionListener(new ExitItemActionListener());
                        
                        popupMenu.add(restoreItem);
                        popupMenu.addSeparator();
                        popupMenu.add(exitItem);
                        
                        trayIcon = new TrayIcon(image, tooltip,  popupMenu);
                        trayIcon.addMouseListener(new TrayIconMouseListener());
                        //trayIcon.addActionListener(new TrayIconActionListener());
                                                
                        try {
                                tray.add(trayIcon);
                        }
                        catch (AWTException e) {
                                System.err.println(e);
                        }
                }
                else {
                        //..........
                }
        }

        private class RestoreItemActionListener implements ActionListener {
                public void actionPerformed(ActionEvent ae) {
                        comp.setVisible(true);
                }
        }
                
        private class ExitItemActionListener implements ActionListener {
                public void actionPerformed(ActionEvent ae) {
                        System.exit(0);
                }
        }
        
        private class TrayIconMouseListener extends MouseAdapter {
                public void mousePressed(MouseEvent me) {
                        if (me.getButton() == MouseEvent.BUTTON1) {
                                comp.setVisible(true);
                        }
                }
        }

        public static void createTray(Component comp, String trayImageName, String tooltip) {
                new TrayFactory(comp, trayImageName, tooltip);
        }
}

q个cȝ构造方法是private的,因ؓ创徏该类的实例不是我们的目的Q另一斚w是ؓ了方便系l托盘的创徏?br />构造方法有3个参敎ͼ
W?个参数是一个ComponentQ这是您所要显C或隐藏的主H体。当Ӟ您把q个参数写成Component的子cM无妨Q这里是Z增加cȝ通用性?br />W?个参数是一个StringQ它是一个image文g的名Uͼ来用这个文件创建托盘图标TrayIcon?br />W?个参C是一个StringQ它是工hC字W串Q当您把鼠标攑ֈ托盘图标上的时候,托盘图标弹个字W串的内宏V?br />创徏pȝ托盘的具体代码在Ҏprivate void init()中?br />创徏pȝ托盘的Q务分Z个步骤:
首先创徏托盘图标QTrayIconQ,其次把托盘图标添加到pȝ托盘(SystemTray)中?br />Java.awt.TrayIcon提供3U构造方法创建TrayIcon实例Q这里采用第三种构造方法:
                trayIcon = new TrayIcon(image, tooltip,  popupMenu);
其中Qimage对象由TrayFactorycL造方法的W二个参数trayImageName创徏Q?br />Image image  = Toolkit.getDefaultToolkit().getImage(trayImageName);
tooltip是TrayFactorycL造方法的W三个参?br />׃不能朝前引用QPopupMenu对象popupMenu必须在创建trayIcon对象之前创徏Qƈlpopup菜单Ҏ加动作监听器来处理菜单项的动作(点击Q事Ӟ׃处理动作事g比较单,q里不做具体分析Q只对TrayIcon的鼠标事件做明?br />我们希望在托盘图标上按下鼠标左键时显CZH体Q所以必d理托盘图标的鼠标按下事g。我们用TrayIconMouseListenerU有内部c(private inner classQ来处理鼠标按下事g。不论按下鼠标左键还是右键,都会产生鼠标事gQ都会引起mousePressedҎ的调用,所以在q个Ҏ中只处理左键而忽略右键,把右键留lpopup菜单Q?br />                        if (me.getButton() == MouseEvent.BUTTON1) {
                                comp.setVisible(true);
                        }
q时Q就可以linit()Ҏ中创建的TrayIcon对象trayIcond鼠标监听器了Q?br />trayIcon.addMouseListener(new TrayIconMouseListener());
利用TrayFactorycdd用创建系l托盘时Q只需在主应用中调用该cȝ工厂Ҏ卛_Q?br />TrayFactory.createTray(comp, trayImageName, tooltip);
注意q一句,一定要攑֜适当的位|:d用从开始启动到启动完毕Q必LZ执行q一句。所以徏议把q一句放在主应用的构造方法中Q或者干脆放在显CZH体的前一个语句的位置Q?br />
//其他语句
               JFrame mainFrame = new JFrame("试ȝ?);
                mainFrame.getContentPane().add(otherVisibleObj, BorderLayout.CENTER);
                mainFrame.pack();
                TrayFactory.createTray(mainFrame, "images/icon.png", "q是工具提示");        
                mainFrame.setVisible(true);
下面l出一个完整的例子?br />d用(MainApp.javaQ源代码如下Q?br />
import java.awt.*;
import javax.swing.*;

public class MainApp {
        private static void createAndShowGUI() {
                JFrame mainFrame = new JFrame("试ȝ?);
                JLabel jLabel = new JLabel("q是一个标{?, SwingConstants.CENTER);
                jLabel.setPreferredSize(new Dimension(400, 300));
    mainFrame.getContentPane().add(jLabel, BorderLayout.CENTER);
    
                mainFrame.pack();
                TrayFactory.createTray(mainFrame, "images/icon.png", "你好QJava!\nHello,Java!");
                mainFrame.setVisible(true);
        }
    
        public static void main(String[] args) {
                String lf = UIManager.getSystemLookAndFeelClassName();
                try {
                        UIManager.setLookAndFeel(lf);
                } 
                catch(Exception e) {
                }
                
                javax.swing.SwingUtilities.invokeLater(new Runnable() {
                                public void run() {
                                        createAndShowGUI();
                                }
    });
           
}

为简单v见,可以把TrayFactory.java和MainApp.java攑֜同一目录下,把icon.png文g攑֜当前目录的images目录下?br />
===
from
http://blog.sina.com.cn/s/blog_a5f093b401018ss1.html



DolveVita 2013-01-13 09:27 发表评论
]]>
վ֩ģ壺 ƽ| ̶| ɽ| ʦ| Զ| ׸| | | Ƥɽ| | ϲ| ͬ| ƺ| ڻ| ̴| | | ׸| γ| ݸ| | | | ׶| ˶| | | | ˼| | | | ߷| ˮ| | | ʯׯ| | | | ֲ|