重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
java中类的显示初始化会在首次被“主动使用”时执行初始化,为类(静态)变量赋予正确的初始值。在Java代码中,一个正确的初始值是通过类变量初始化语句或者静态初始化块给出的。而我们这里所说的主动使用 包括:
为呼图壁等地区用户提供了全套网页设计制作服务,及呼图壁网站建设行业解决方案。主营业务为网站建设、网站制作、呼图壁网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
1. 创建类的实例
2. 调用类的静态方法
3. 使用类的非常量静态字段
4. 调用Java API中的某些反射方法
5. 初始化某个类的子类
6. 含有main()方法的类启动时
初始化一个类包括两个步骤:
1、 如果类存在直接父类的话,且直接父类还没有被初始化,则先初始化其直接父类
2、 如果类存在一个初始化方法,就执行此方法
注:初始化接口并不需要初始化它的父接口。
我们知道一个类(class)要被使用必须经过装载,连接,初始化这样的过程。下面先对这三阶段做一个简单的描述,之后会结合一个简单的例子来说明java中类的初始化过程。
在装载阶段,类装载器(Bootstrap ClassLoader 或者用户自定义的ClassLoader) 把编译形成的class文件载入内存,创建类相关的Class对象,这个Class对象封装了我们要使用的类的类型信息。
连接阶段又可以分为三个子步骤:验证、准备和解析。
验证就是要确保java类型数据格式 的正确性,并适于JVM使用。
准备阶段,JVM为静态变量分配内存空间,并设置默认值,注意,这里是设置默认值,比如说int型的变量会被赋予默认值0 。在这个阶段,JVM可能还会为一些数据结构分配内存,目的 是提高运行程序的性能,比如说方法表。
解析过程就是在类型的常量池中寻找类、接口、字段和方法的符号引用,把这些符号引用替换成直接引用。这个阶段可以被推迟到初始化之后,当程序运行的过程中真正使用某个符号引用的时候 再去解析它。
类会在首次被“主动使用”时执行初始化,为类(静态)变量赋予正确的初始值。在Java代码中,一个正确的初始值是通过类变量初始化语句或者静态初始化块给出的。而我们这里所说的主动使用 包括:
1. 创建类的实例
2. 调用类的静态方法
3. 使用类的非常量静态字段
4. 调用Java API中的某些反射方法
5. 初始化某个类的子类
6. 含有main()方法的类启动时
初始化一个类包括两个步骤:
1、 如果类存在直接父类的话,且直接父类还没有被初始化,则先初始化其直接父类
2、 如果类存在一个初始化方法,就执行此方法
注:初始化接口并不需要初始化它的父接口。
追问
你这不是初始化实例么
做了一个多小时,终于编出来了,楼上写的程序有很多问题而且不完整。楼主的要求没写明要操作数据库,所以就初始用户ID和密码都设置成123。密码正确后出现正在登陆的提示框,等登陆成功后,就关闭提示,退出程序。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Test extends JFrame implements ActionListener,Runnable {
JLabel jLabel1 = new JLabel();
JLabel jLabel2 = new JLabel();
JTextField jtUserID = new JTextField();
JLabel jLabel3 = new JLabel();
JPasswordField jpUsePwd = new JPasswordField();
JButton jbEnter = new JButton();
JButton jbExit = new JButton();
//设置登陆的用户名和密码
String userID="123";
String userPwd="123";
public Test() {
super("用户登陆界面");
try {
// 设置窗体的大小、位置、可见性
jbInit();
this.setVisible(true);
this.setSize(410, 300);
this.addWindowListener(new WindowAdapter() { // 清空内存
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
} catch (Exception exception) {
exception.printStackTrace();
}
}
private void jbInit() throws Exception {
// 初始化各控件,设置控件位置,将控件添加到面板上
getContentPane().setLayout(null);
jtUserID.setText("");
jtUserID.setBounds(new Rectangle(182, 50, 141, 22));
jLabel2.setText("用户名:");
jLabel2.setBounds(new Rectangle(83, 50, 78, 24));
jLabel3.setText("密 码:");
jLabel3.setBounds(new Rectangle(81, 91, 78, 24));
jpUsePwd.setBounds(new Rectangle(182, 92, 140, 27));
jbEnter.setBounds(new Rectangle(122, 197, 90, 25));
jbEnter.setText("登陆");
jbExit.setBounds(new Rectangle(217, 197, 90, 25));
jbExit.setText("退出");
this.getContentPane().add(jLabel2);
this.getContentPane().add(jLabel3);
this.getContentPane().add(jLabel1);
this.getContentPane().add(jtUserID);
this.getContentPane().add(jpUsePwd);
this.getContentPane().add(jbEnter);
this.getContentPane().add(jbExit);
jbEnter.addActionListener(this);
jbExit.addActionListener(this);
}
//多线程控制登陆信息框
public void run(){
try{
this.setVisible(false);
JOptionPane.showMessageDialog(null, "正在登陆中....");
Thread.sleep(3000);
this.dispose();
}catch(Exception e){
System.out.println(e);
}
}
//当点击按钮的时候触发下面的方法
public void actionPerformed(ActionEvent e) {
try{
String command=e.getActionCommand();
if (command.equals("退出")) {
System.exit(0);
} else {
// 管理员登陆功能实现
if (jtUserID.getText().equals("")
|| new String(jpUsePwd.getPassword()).equals("")) {
JOptionPane.showMessageDialog(null, "请输入完整数据");
} else {
if (jtUserID.getText().equals(userID)
new String(jpUsePwd.getPassword())
.equals(userPwd)) {
Thread t=new Thread(this);
t.start();
}
else {
JOptionPane.showMessageDialog(null, "帐号或者密码错误");
jtUserID.setText("");
jpUsePwd.setText("");
}
}
}
}catch(Exception ex){
System.out.println(ex);
}
}
public static void main(String[] args) {
new Test();
}
}
你问的是包含项目的多少吧?
Choice自动管理项目,不用干预。只有唯一的构造函数Choice(),必须通过.addItem(...)添加。
简便方法是,将所有项构造一个数组:
Choice itemList=new Choice();
String[] items=new String[]{"第一项","第二项",...};
for(int i=0;iitems.length;i++){
itemList.addItem(items[i]);
}