尚硅谷多线程以及反射

404、多线程概述

此后开始java高级篇
希望能越来越顺
11/10 下午13:51 公司
十五章 反射机制
api 动态获取

405、idea卸载

只需要配置一个idea
恢复成最初状态 删除config
keymaps 快捷键
system 系统相关

406、安装idea

407、安装

408、启动并完成helloworld

jdk安装路径

414、单核与多核cpu

单核:挂起
并行:
并发:一个cpu同时执行(时间片)多个任务。’

415、多线程的优点

单核cpu多线程不会更快。
提高程序的响应
提高cpu利用率
改善程序结构

416、线程创建和使用

每个线程通过某个特定Thread对象的run()方法完成操作,run()方法主体称为线程体。
通过该Thread对象的start()方法启动线程,

在start()方法之后,开始执行。

417、线程两个问题

public static void main(String[] args) {
		/*MyThread1 m1=new MyThread1();
		MyThread2 m2=new MyThread2();
		m1.start();
		m2.start();*/
		//创建匿名子类方式
		new Thread(){
			@Override
			public void run() {
				for(int i=0;i<100;i++){
					if(i%2==0){
						System.out.println(Thread.currentThread().getName()+":"+i);
					}
				}
			}
		}.start();

		new Thread(){
			@Override
			public void run() {
				for(int i=0;i<100;i++){
					if(i%2==1){
						System.out.println(Thread.currentThread().getName()+":"+i);
					}
				}
			}
		}.start();
	}

这节课讲了两个例子,后面使用匿名子类方式进行改写。
所以什么是匿名子类,
没有解释到位。

419、线程的常用方法 32

yield:释放当前cpu的执行权
join():在线程a中调用线程b的join(),此时a变成阻塞状态,直到b执行完后a才结束阻塞状态。

多线程这块听不懂
该不该放弃?

447、复习线程通信 15

634、java反射机制 12

获取class类实例‘

创建运行时类的对象

调用运行时类指定结构

允许程序运行期间 借助reflectionapi获取任何类的内部信息。
并能直接操作任意对象的内部属性方法。

反射方式:实例化对象 getClass()方法 得到完整的包类

反射可以做到的事
构造任意类的对象
获取泛型信息
调用任意一个对象的成员变量和方法

java.lang.Class
用来描述类的类

635、反射之前类的实例化

11/12下午

public class ReflectionTest {
	//反射之前对Person类的操作
	@Test
	public void test1(){
		Person p1=new Person("Tom",12);

		//通过对象调用内部属性和方法
		p1.age=10;
		System.out.println(p1.toString());

		p1.show();
		//Person类外部,不允许通过Person类对象调用其内部私有结构
	}
}
public class Person {

	private  String name;
	public int age;

	public Person() {
	}

	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

	private Person(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "Person{"+
				"name='"+name+'\''+
				",age="+age+
				'}';
	}

	public void show(){
		System.out.println("你好,我是");
	}

	private String showNation(String nation){
		System.out.println("我的国籍是:"+nation);
		return nation;
	}
}

656、调用运行时类中的指定构造器

@Test
	public void test2() throws NoSuchMethodException, InvocationTargetException, InstantiationException,
			IllegalAccessException {
		Class clazz=Person.class;
		Constructor cons=clazz.getConstructor(String.class, int.class);

		Object obj = cons.newInstance("Tom", 12);
		Person p=(Person)obj;
		System.out.println(p.toString());
	}

657、调用类的私有结构

//通过反射 可以调用Person类的私有结构

//调用方法
		Method show = clazz.getDeclaredMethod("show");//方法  形参类型  不写等于调用空参\
		show.invoke(p);

		//调用Person的私有结构
		Constructor cons1 = clazz.getDeclaredConstructor(String.class);
		cons1.setAccessible(true);
		Person p1 = (Person) cons1.newInstance("Jerry");
		System.out.println(p1);

		//调用私有属性和方法
		Field name = clazz.getDeclaredField("name");
		name.setAccessible(true);
		name.set(p1,"hanmeimei");
		System.out.println(p1.getName());

		//调用私有方法
		Method showNation = clazz.getDeclaredMethod("showNation", String.class);
		showNation.setAccessible(true);
		String nation=(String)showNation.invoke(p1,"中国");
		System.out.println(nation);
	}

638、反射和封装

反射机制和单例 封装性
是不是矛盾

再听一听

问题2、

639、clazz理解 10

clazz对象
Class 反射源头
1、类的加载过程:
程序经过javac.exe后,会生成一个或多个字节码文件(.class)

接着使用java.exe命令对某个字节码文件进行解释运行。
相当于将某个字节码文件加载到内存中,此过程称为类的加载。

加载到内存中的类,称为运行时类。此运行时类作为Class对象。

Class clazz=Person.class;
通过类造对象,类本身也是对象,是Class类的对象。

642、理解类的加载过程

643、classLoader的理解

644、使用classLoader

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值