反射及常用设计模式

51单片机入门指南-基于STC89C52(持续更新) 一、环境介绍 编程IDE: keil5 单片机型号: STC89C51/52 开发板: 普中科技的开发板 完整PDF资源下载地址:https://download.youkuaiyun.com/download/xiaolong1126626497/19785856 二、51单片机开发手册介绍 2.1 前言 51单片机是对所有兼容Intel 8031指令系统的单片机的统称。 该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最. 阅读详情

一、反射 (通用编程)

1. 概念

允许在程序运行状态中,可以获取任意类中的属性和方法,并且可以操作任意对象内部的属性和方法,这种动态获取类的信息及动态操作对象的属性和方法对应的机制称为反射机制。

2. 类的对象 和 类对象

(1) 类的对象:基于定义好的类,创建的该类对象、实例
(new 的对象)
(2) 类对象:类加载的产物,封装类该类信息(包名、类名、
父类、接口、属性、构造方法、成员方法等)。

类加载:JVM第一次使用一个类的时候,通过 classPath找到该类对应.class文件,读取.class文件,读取该类信息(包名、类名、父类、接口、属性、成员方法、构造 方法等信息),将该信息保存在jvm中,类加载进行一次。

类加载时机:
a. 第一次创建该类对象
b. 第一次使用该类静态成员
c. 加载子类会先加载其父类
d. 通过反射技术获取类对象

3. 获取类对象的方式 【重点】

(1) 通过 类的对象 获取 类对象,getClass方法
Student s = new Student();
Class c1 =s.getClass();
(2) 通过 类名.class 获取类对象
Class c2 = Student.class;
(3)利用Class类中静态方法forName(String className);
Class c3 =Class.forName(“包名.类名”);
注意:forName方法中参数需要的是全类名,否则运行报错,错误信息ClassNotFoundException(类找不到的异常)

4. Class中的成员方法
package classtest4;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class TestClass1 {
	public static void main(String[] args) throws ClassNotFoundException {
		Class c = Class.forName("day33.Student");
		// 通过类对象获取对应类信息
		System.out.println(c.getName()); // 获取类名
		System.out.println(c.getPackage().getName());// 获取包名
		System.out.println(c.getSuperclass().getName()); // 获取父类名
		Class[] inters = c.getInterfaces(); // 获取所有实现的接口
		System.out.println("实现接口的个数:" + inters.length);
		for (Class inter : inters) {
			System.out.println(inter.getName());
		}
		System.out.println("---------获取属性---------");
		Field[] fs = c.getFields();// 获取 公开属性(父类+子类的公开属性)
		System.out.println("类中属性的个数:" + fs.length);
		Field[] fs2 = c.getDeclaredFields(); // 获取自定义的属性:公开+非公开的属性
		System.out.println("类中属性个数:" + fs2.length);
		System.out.println("---------------------------------");
		Method[] ms = c.getMethods();// 获取公开方法:本类+父类的
		System.out.println("类中方法的个数:" + ms.length);
		for (Method m : ms) {
			System.out.println(m.getName());
		}
		// 获取自己定义方法:包含非公开的
		Method[] ms2 = c.getDeclaredMethods();
		System.out.println("------类中自己定义的方法具体内容------");
		for (Method m : ms2) {
			System.out.println(m.getName());
		}
	}
}

二、设计模式(23种)

1.概念

是一套被反复使用,多数人知晓、经过分类编目的代码经验总结

2.适配器设计模式

在这里插入图片描述

用一个或多个抽象类去分别实现接口中某些需要的方法,然后再用实现类去将抽象类中的方法进行覆盖或实现,这样既可以弱耦合,而且便于分类和管理

3.单例设计模式
(1)概念

定义一个类,保证jvm中只有该类的一个实例对象存在

(2)代码实现单例模式:
a.饿汉式

优点:并发效率较高
缺点:空间利用率相对较低

package classtest4;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class TestHungry {
	public static void main(String[] args) {
		long start = System.currentTimeMillis();
		for (int i = 1; i <= 100; i++) {
			ExecutorService pool = Executors.newFixedThreadPool(2);
			Future<B> f1 = pool.submit(new Callable<B>() {
				public B call() {
					return B.getInstance();
				}
			});
			Future<B> f2 = pool.submit(new Callable<B>() {
				public B call() {
					return B.getInstance();
				}
			});
			try {
				B b1 = f1.get();
				B b2 = f2.get();
				if (i == 1)
					System.out.println(b1 == b2 ? "两个线程获取的是同一对象" : "两个线程获取的是不同对象");
			} catch (InterruptedException e) {
				e.printStackTrace();
			} catch (ExecutionException e) {
				e.printStackTrace();
			} finally {
				pool.shutdown();
			}
		}
		long end = System.currentTimeMillis();
		System.out.println("程序运行时间:" + (end - start) + "ms");
	}
}

class B {
	private static final B B = new B();

	private B() {
	}

	public static B getInstance() {
		return B;
	}
}
b.懒汉式

优点:空间利用率相对较高
缺点:并发效率相对较低,因为方法被synchronized修饰

package classtest4;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class TestLazy {
	public static void main(String[] args) {
		long start = System.currentTimeMillis();
		for (int i = 1; i <= 100; i++) {
			ExecutorService pool = Executors.newFixedThreadPool(2);
			Future<A> f1 = pool.submit(new Callable<A>() {
				public A call() {
					return A.getInstance();
				}
			});
			Future<A> f2 = pool.submit(new Callable<A>() {
				public A call() {
					return A.getInstance();
				}
			});
			try {
				A a1 = f1.get();
				A a2 = f2.get();
				if (i == 1)
					System.out.println(a1 == a2 ? "两个线程获取的是同一对象" : "两个线程获取的是不同对象");
			} catch (InterruptedException e) {
				e.printStackTrace();
			} catch (ExecutionException e) {
				e.printStackTrace();
			} finally {
				pool.shutdown();
			}
		}
		long end = System.currentTimeMillis();
		System.out.println("程序运行时间:" + (end - start) + "ms");
	}
}

class A {
	private static A A;

	private A() {
	}

	public static synchronized A getInstance() {
		if (A == null) {
			A = new A();
		}
		return A;
	}
}

经过数十次的运行,发现 懒汉式运行时间大致分布为37-49 饿汉式运行时间大致为36-64,不过结果也不是太准确,如果有兴趣的,可以多整几个线程去测试一下它们两个之间的效果

c.用内部类实现的单例
package classtest4;

public class TestSingle {
	public static void main(String[] args) {
		Object o1 = Single.getInstance();
		Object o2 = Single.getInstance();
		System.out.println(o1 == o2 ? "相同对象" : "不同对象");
	}
}

class Single {
	private Single() {
	}

	static class Inner {
		private static final Single S = new Single();
	}

	public static Single getInstance() {
		return Inner.S;
	}
}

特点: 空间利用率高,并发效率高

4.工厂设计模式

(1)主要解决的问题:对象的创建,工厂的职责就在于创建一个对象
(2)工厂设计模式结合反射技术,使代码更加的通用和灵活
(3)扩充: Properties,Map集合的实现类,键值对存储
a.load(FileInputStream/FileReader in):将输入流指向的文件中内容加载到Properties中,文件中一行内容对应Properties一个键值对元素的内容自动以"=“进行拆分,”=“左侧为键,”="右侧为值
b.getProperty(String key):根据键获取对应的值

package classtest4;

import java.io.FileInputStream;
import java.util.Properties;

public class TestFactory {
	public static void main(String[] args) throws Exception {
		// 创建电脑对象
		Computer c = new Computer();
		USB usb = USBFactory.getUSBInstance();
		c.useDevice(usb);
	}
}

// 工厂类(结合反射让程序更加的灵活和通用)
class USBFactory {
	public static USB getUSBInstance() throws Exception {
		Properties pro = new Properties();
		FileInputStream fis = new FileInputStream("config.txt");
		pro.load(fis);
		String value = pro.getProperty("className");
		Class<?> c = Class.forName(value);
		// 通过类对象 获取 类的对象
		Object obj = c.newInstance();
		return (USB) obj;
	}
}

// A类 使用者
class Computer {
	public void useDevice(USB usb) {
		usb.service();
	}
}

// 对电子设备 和 电脑做一个标准和规范(接口)
interface USB {
	void service();
}

// B类 鼠标
class Mouse implements USB {
	public void service() {
		System.out.println("鼠标...");
	}
}

// C类 键盘
class Keyboard implements USB {
	public void service() {
		System.out.println("键盘...");
	}
}
【AI智能体】Spring AI Tool 从使用到实战详解 Spring AI Tool 阅读详情

相关推荐

EtherCAT主站SOEM -- 15 -- CIA402伺服驱动器子协议

以上就是EtherCAT主站SOEM – 15 – CIA402伺服驱动器子协议的内容。有不明白的地方欢迎留言;有建议欢迎留言,我后面编写文档好改进。创作不容,如果文档对您有帮助,记得给个赞。

常驻客栈的博客--嵌入式EtherCAT 2733

设计模式——反射模式

1:什么是反射 大家都知道,要让Java程序能够运行,那么就得让Java类要被Java虚拟机加载。Java类如果不被Java虚拟机加载,是不能正常运行的。现在我们运行的所有的程序都是在编译期的时候就已经知道了你所需要的那个类的已经被加载了。 Java的反射机制是在编译并不确定是哪个类被加载了,而是在程序运行的时候才加载、探知、自审。使用在编译期并不知道的类。这样的特点就是反射。 JAVA反射...

huyiju的博客 7317

YOLOv9实战:刀具磨损实时监控从摄像头到预测性维护(附车间落地代码)

摘要: 本文针对制造业刀具磨损监控痛点,提出基于YOLOv9的实时视觉检测方案。通过工业相机采集刀具图像,结合图像预处理(去油污、增强对比度)和深度学习模型,实现磨损等级分类与寿命预测。系统集成硬件选型(抗油污相机、红色环形光源)、数据增强(旋转、噪声模拟)及预测性维护(PLC联动),实测刀具利用率提升30%,工件报废率降至0.5%以下。详解车间部署、模型训练到系统落地的全流程,附代码与避坑指南,为工业视觉项目提供实战参考。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 541

java中的反射与设计模式

反射其实就是类对象,类加载的产物;将类加载到内存中,会产生类对象(class文件);有了类对象,即可得到所有类资源的信息: 类,方法,属性,构造器,包,父类,接口...即通过反射得到类对象,通过类对象可以得到类的实例对象,属性对象,方法对象,在反射中 对类的资源的操作都通过资源的对象进行操作为什么要用反射?通过反射,可以在编译时不需要知道类的名字,从而在程序运行时根据需要动态的确定要使用的类,并且动态创建类的实例对象、操作属性对象(甚至是私有的)、方法对象,使得程序更加的灵活、维护性更强。

qq_66013742的博客 419

某瓜数据app 获取达人直播商品信息接口 Sign

某瓜数据app 获取达人直播商品列表接口 Sign

自成背后的博客 6039

SAP MM模块后续借记、后续贷记、贷方凭证简介

在SAP系统中,后续借记、后续贷记和贷方凭证是处理供应商发票、采购和付款过程中常见的财务交易。

我小时候很黑的博客 3267

反射、设计模式、枚举、注解的简单介绍

让类的对象只能有唯一的一个实例懒汉式好处:避免资源浪费(需要对象的时候就创建对象)缺点 :线程不安全解决:DCL(双重检测锁)DCL的问题:1、指令重排 2、多线程可见性解决:volatile关键字修饰使用静态内部类(什么时候使用静态内部类,什么时候就加载)饿汉式好处:线程安全缺点:浪费资源。只要类被加载,那么这个类实例就会被创建如何实现单例1、私有化构造方法2、提供一个方法,返回这个类的实例解决:在构造方法中加上判断,如果对象不为空则直接抛出异常。

xx的博客 435

SAP RAP学习系列合集介绍

《SAP RAP学习系列合集:从入门到部署的完整指南》摘要: 本文介绍了作者创建的SAP RAP学习系列合集,涵盖RAP开发从基础概念到实战部署的全流程。系列目前包含17篇文章,系统讲解了RAP核心开发技术:从数据建模、UI构建到行为定义(包括并发控制、草稿功能、授权验证等),最后详细演示了应用部署到Fiori Launchpad的两种方案(OP版和ES版)。

DeveloperMrMeng的博客 1490

反射+设计模式

(1) 单例模式(Singleton):保证在当前JVM中,该类只有一个实例(对象)存在,是一种常见的设计模式。// 获取 自定的方法,包含非公开。System.out.println("Student类中定义方法的个数为:"+ms.length);

2302_81831994的博客 1674

【推荐100个unity插件】动画重定向,快速在不同角色间共享动画,共用非人形Humanoid(泛型generic)动画——Retarget Pro

Retarget Pro是一款高效的Unity动画重定向工具,可快速在不同角色间共享动画。主要特点包括:1分钟快速设置,支持编辑器和运行时重定向;适用于人形、动物、武器等各类角色;提供基础重定向、IK重定向和FPS专用重定向三种功能模块;通过Rig组件和骨架资产实现骨骼链匹配,支持批量处理。插件包含示例项目和预设资源,操作简便且效果优于Unity原生Humanoid系统,特别适合处理手指等精细动画。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 545

基于STM32F103的智能门禁门锁门卫系统设计

本文设计了一种基于STM32F103单片机的智能门禁系统,集成了密码、射频IC卡和指纹识别三种验证方式。系统采用模块化设计,包含MFRC522射频模块、AS608指纹模块、矩阵键盘、OLED显示和舵机控制等硬件,实现了身份验证、密码修改、IC卡/指纹管理以及安全防护功能。测试结果表明系统响应迅速(密码验证250ms、指纹验证600ms)、功耗低(待机50mA),且具备掉电密码保存功能。该系统操作简便、功能完善,适用于家庭和办公场所,具有较高实用价值。未来可扩展远程控制、人脸识别等功能以进一步提升智能化水平。

3254968421的博客 318

Java设计模式——1.Java反射技术

1.反射的介绍 Java反射技术应用广泛,它能够配置:类的全限定名、方法和参数,完成对象的初始化,甚至是反射某些方法。这样就能大大增强Java的可配置性,Spring IOC的基本原理也是如此。 反射机制指在程序运行过程中,对任意一个类都能获取其所有属性和方法,并且对任意一个对象都能调用其任意一个方法。这种动态获取类和对象的信息,以及动态调用对象的方法的功能被称为Java语言的反射机制。 ...

discover_space 509

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

设计模式:除常用设计模式之外,特别的,反射机制,代理模式

设计模式:除常用设计模式之外,特别的,反射机制,代理模式

XiaoArea的博客 380

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

java反射:通用编程 常用 设计模式

java反射:通用编程 类对象:类加载的产物,封装了一个类的所有信息,类对象的各个组成部分都是对象 public class Test { public static void main(String[] args) throws Exception { Student student = new Student(); Teacher teacher = new Teacher(); System.out.println(student.getClass().getName()); Sys

qq_49214533的博客 252

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

常用设计模式之简单工厂(使用反射)

常用设计模式之简单工厂(使用反射) (回顾自己工作以来参与过的所有项目,其中大部分大量使用框架,因此用到设计模式的场景并不多。可是,对于码农来说,设计模式是必不可少的基本功之一。所以现在重新梳理并简单记录几个设计模式。每个设计模式都有其适合使用的场景。作为码农,在搬砖的过程中,需要根据项目需求,结合各种设计的特点,考虑多方面因素,在满足当前需求...

weixin_30764883的博客 85

反射和设计模式

一、反射 1. 相关概念 (1) 类的对象:基于定义好的一个类,创建该类的实例,即利用 new 创建的实例就为类的对象。 (2) 类对象:类加载的产物,封装了一个类的所有信息(包名、类名、父类、接口、属性、方法、构造方法)。 (3) 反射:通过反射可以获取一个类的 类对象,从而获取该类的信息,直接通过类对象进行一系列操作。 2. 通过反射技术获取类对象: (1) 借助 Object类中 getClass()方法,通过 类的对象 获取 类对象: Student s = new St

hanjiaqi23111的博客 794

Java学习播客第十七期:详解反射与常用设计模式

而类对象是类加载之后在内存中生成的产物,它封装了这个类的全部信息,包括包名、类名、父类、接口、属性、方法、构造方法等等。而反射,简单来说就是先获取到类对象,再借助类对象反向操作类中的所有成员。拿到类对象之后,我们就可以调用各类方法,解析并操作类的成员。想要反射调用类中的方法,步骤也很清晰:先用 getDeclaredMethod() 获取目标方法,对于私有方法,需要执行 setAccessible(true) 解除访问权限限制,最后通过 invoke(实例对象, 方法参数) 执行方法。

hhdbchcj的博客 163

Java 反射和设计模式

b. load(InputStream in) / load(Reader in):自动将流指向文件内容进行加载,一行代表一个集合元素,自动以"="(3) Method[] getDeclaredMethods():获取自身所有方法,包含非公开的方法。(1) 工厂设计模式:用于解决程序中对象创建的问题,一个工厂的作用在于完成对象的创建。(1) 类的对象:基于定义好的一个类,创建该类的实例,即利用。(2) 类对象:类加载的产物,封装了一个类的所有信息。(4) 通过反射获取类对象,会导致类进行类加载。

Halo_tjn的博客 549

17_反射和设计模式

b. load(InputStream in) / load(Reader in):自动将流指向文件内容进行加载,一行代表一个集合元素, 自动以"=" 、":"进行拆分,符号 左侧作为键的内容,右侧作为值的内容。(2) 类对象:类加载的产物,封装了一个类的所有信息(包名、类名、父类、接口、属性、方法、构造方法)。(3) 反射:通过反射可以获取一个类的 类对象,从而获取该类的信息,直接通过类对象进行一系列操作。(1) 类的对象:基于定义好的一个类,创建该类的实例,即利用 new 创建的实例就为类的对象。

2301_82287220的博客 482

第六章 反射与设计模式

工厂设计模式:用于解决程序中对象创建的问题,一个工厂的作用在于完成对象的创建。设计模式:一套被反复使用,多人知晓,并分门别类的编目的一套代码经验总结。类对象,从而获取该类的信息,直接通过类对象进行一系列操作。所以开发时,对于封装的实体类,建议提供无参数的构造方法。类的对象:基于定义好的一个类,创建该类的实例,即利用。进行拆分,符号 左侧作为键的内容,右侧作为值的内容。方法,获取类的对象,默认调用无参数的构造方法。类对象:类加载的产物,封装了一个类的所有信息。通过反射获取类对象,会导致类进行类加载。

xhdbfj_的博客 592

Java反射与设计模式实战解析

a. Properties: 键和值,默认为String类型,创建该类对象时,不要添加泛型。工厂设计模式:用于解决程序中对象创建的问题,一个工厂的作用在于完成对象的创建。类对象,从而获取该类的信息,直接通过类对象进行一系列操作。所以开发时,对于封装的实体类,建议提供无参数的构造方法。类的对象:基于定义好的一个类,创建该类的实例,即利用。方法,获取类的对象,默认调用无参数的构造方法。类对象:类加载的产物,封装了一个类的所有信息。:获取自身所有方法,包含非公开的方法。通过反射获取类对象,会导致类进行类加载。

2501_91000867的博客 889

java反射

(1) 类的对象:基于定义好的一个类,创建该类的实例,即利用 new 创建的实例就为类的对象。(2) 类对象:类加载的产物,封装了一个类的所有信息(包名、类名、父类、接口、属性、方法、构造方法)。(1) (2) (3) (4) 第一次创建该类对象 第一次使用该类的静态成员(静态属性和静态方法) 子类类加载会导致其父类先进行类加载。(3) 反射:通过反射可以获取一个类的 类对象,从而获取该类的信息,直接通过类对象进行一系列操作。(3) 通过 Class 类中静态方法 forName("包名.类名");

gxxxxxxxy的博客 914

17 反射

工厂设计模式:用于解决程序中对象创建的问题,一个工厂的作用在于完成对象的创建。设计模式:一套被反复使用,多人知晓,并分门别类的编目的一套代码经验总结。类对象,从而获取该类的信息,直接通过类对象进行一系列操作。所以开发时,对于封装的实体类,建议提供无参数的构造方法。类的对象:基于定义好的一个类,创建该类的实例,即利用。进行拆分,符号 左侧作为键的内容,右侧作为值的内容。方法,获取类的对象,默认调用无参数的构造方法。类对象:类加载的产物,封装了一个类的所有信息。通过反射获取类对象,会导致类进行类加载。

2401_88350853的博客 617

Java反射

工厂设计模式:用于解决程序中对象创建的问题,一个工厂的作用在于完成对象的创建。设计模式:一套被反复使用,多人知晓,并分门别类的编目的一套代码经验总结。类对象,从而获取该类的信息,直接通过类对象进行一系列操作。所以开发时,对于封装的实体类,建议提供无参数的构造方法。类的对象:基于定义好的一个类,创建该类的实例,即利用。进行拆分,符号 左侧作为键的内容,右侧作为值的内容。方法,获取类的对象,默认调用无参数的构造方法。类对象:类加载的产物,封装了一个类的所有信息。通过反射获取类对象,会导致类进行类加载。

2401_83673634的博客 697

Java程序设计基础 第十七章:反射和设计模式

b. load(InputStream in) / load(Reader in):自动将流指向文件内容进行加载,一行代表一个集合元素,自动以"=" 、":"进行拆分,符号 左侧作为键的内容,右侧作为值的内容。(2) 类对象:类加载的产物,封装了一个类的所有信息(包名、类名、父类、接口、属性、方法、构造方法)。(3) 反射:通过反射可以获取一个类的 类对象,从而获取该类的信息,直接通过类对象进行一系列操作。(1) 类的对象:基于定义好的一个类,创建该类的实例,即利用 new 创建的实例就为类的对象。

2401_83185143的博客 758

第十七章反射和设计模式

工厂设计模式:用于解决程序中对象创建的问题,一个工厂的作用在于完成对象的创建。设计模式:一套被反复使用,多人知晓,并分门别类的编目的一套代码经验总结。类对象,从而获取该类的信息,直接通过类对象进行一系列操作。所以开发时,对于封装的实体类,建议提供无参数的构造方法。类的对象:基于定义好的一个类,创建该类的实例,即利用。进行拆分,符号 左侧作为键的内容,右侧作为值的内容。方法,获取类的对象,默认调用无参数的构造方法。类对象:类加载的产物,封装了一个类的所有信息。通过反射获取类对象,会导致类进行类加载。

zhangjunlin1019的博客 267
上一篇: Java开发重点 IO流
下一篇: Oracle date存储机制浅析
zxwwantlearnjava
博客等级 码龄7年 16粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值