Java自学笔记⑬

反射

Java反射机制是在运行状态中,对于任意一个类,都能知道这个类的所有的属性和方法,对于任意一个对象,都能调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象方法的功能称为Java语言的反射机制。

Class类

三种创建Class类的对象方法

//使用类的class属性
Class c=Demo.class;
//使用Class类的forName方法
try{
    Class c=Class.forName("test.Demo");
}catch(ClassNotException e){
   e.printStackTrace();
}
//使用Object对象的getClass方法
Demo demo=new Demo();
Class c=demo.getClass();

获取构造方法

获取成员变量

获取方法

使用时百度即可

多线程

继承Thread类

通过继承Thread类创建并执行一个线程的步骤如下:
创建一个继承自Thread类的子类
覆写Thread类的run方法
创建线程类的一个对象
通过线程类的对象调用start方法启动线程(启动之后会自动调用覆写的run方法执行线程)

Thread类中常用的两个构造方法

public Thread():创建一个新的线程对象
public Thread(String threadName):创建一个名称为threadName的线程对象
继承Thread类创建一个新的线程的语法
public class ThreadTest extends Thread{
}
当执行一个程序时,会自动产生一个线程,主方法正是在这个线程上运行的。当不再启动其他线程时,该程序就为单线程程序。主方法线程启动由Java虚拟机负责,程序员负责启动自己的线程,这是通过调用start()方法实现的
public static void main(String[] agrs){
    ThreadTest test =new ThreadTest();
    test.start();
}
注:如果start()方法调用一个已经启动的程序会抛出IllegalThreadStateException异常。
public class ThreadTest extends Thread{
	private int count=10;
	public void run(){
		while(true){
			System.out.print(count+" ");
			if(--count==0)
				break;
		}
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ThreadTest test=new ThreadTest();
		test.start();
	}

}

实现Runnable接口

实现Runnable接口的语法
public class Thread extends Object implements Runnable
实现Runnale接口的程序会创建一个Thread对象,并将Runnbale对象与Thread对象相关联。Thread类中有以下两个构造方法
public Thread(Runnable target):分配新的Thread对象,以便将target作为其运行对象
public Thread(Runnable target,String name):分配新的Thread对象,以便将target作为其运行对象,将指定的name作为其名称
使用Runnable接口启动新的线程的步骤

建立Runnable对象

使用参数为Runnable对象的构造方法创建Thread实例

调用start()方法启动线程

实现图标移动的功能

import java.awt.Container;
import java.net.URL;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;

public class SwingAndThread extends JFrame{
	private JLabel jl=new JLabel();//声明JLabel对象
	private static Thread t;//声明线程对象
	private int count=0;//声明计数对象
	private Container container=getContentPane();//声明容器
	public SwingAndThread(){
		setBounds(300,200,250,100);//绝对定位窗口大小与位置
		container.setLayout(null);//使窗体不适用任何布局管理器
		try{
			//获取图片的URL,此图片与本类在同一包下
			URL url=SwingAndThread.class.getResource("1.gif");
			Icon icon=new ImageIcon(url);
			jl.setIcon(icon);
		}catch(NullPointerException ex){
			System.out.println("图片不存在,请将1.gif复制到当前目录下");
			return;
		}
		//设置图片在标签的最左方
		jl.setHorizontalAlignment(SwingConstants.LEFT);
		jl.setBounds(10,10,200,50);//设置标签的位置和大小
		jl.setOpaque(true);
		t=new Thread(new Roll());
		t.start();//启动线程
		container.add(jl);//将标签添加到容器中
		setVisible(true);//使窗体可见
		//设置窗体的关闭方式
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		
	}
	class Roll implements Runnable{//定义内部类,实现Runnable接口
		@Override
		public void run(){
			while(count<=200){
				//将标签的横坐标用变量表示
				jl.setBounds(count,10,200,50);
				try {
					Thread.sleep(1000);//为了体现进度条的移动效果,使线程休眠1000ms
				} catch (Exception e) {
					// TODO: handle exception
					e.printStackTrace();
				}
				count+=4;
				if(count==200){
					//当图标到标签的最右边时,使其回到标签最左边
					count=10;
				}
			}
		}
		
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new SwingAndThread();
	}

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值