面向接口编程:newInstance() 和 new 的区别

实战解析:利用Wireshark解密QQ通信协议 本文提供了一份利用Wireshark工具分析QQ通信协议的实战指南。文章详细介绍了从环境准备、捕获数据包到解析协议层的完整流程,重点演示了如何识别QQ号码字段、观察加密数据特征以及区分不同通信类型(如文本、文件传输)。通过此实践,读者可以深入理解网络分层模型和现代应用加密通信机制,提升网络协议分析与安全诊断能力。 阅读详情

通过反射机制加载类驱动和创建类实现:

 

 

配置文件内容<文件名:properties.properties>:

person=entity.PersonInstanceTest

接口:

package iInterface;

public interface IPerson {
 public void setAge(int age);
 public void setName(String name);
 public void setAddress(String address);
 public int getAge();
 public String getName();
 public String getAddress();
 public String sayHello(String name);
 public String sayGoodBye(String name);
}

接口实现类:

package entity;

import iInterface.IPerson;

public class PersonInstanceTest implements IPerson{
 private int age;
 private String name;
 private String address;
 public PersonInstanceTest() {
  System.out.println("--对象被实例化啦!--");
 }
 
 public PersonInstanceTest(int age,String name,String address){
  this.age = age;
  this.name = name;
  this.address = address;
 }
 @Override
 public int getAge() {
  return 0;
 }

 @Override
 public String getName() {
  return null;
 }

 @Override
 public String getAddress() {
  return null;
 }

 @Override
 public String sayHello(String name) {
  // TODO Auto-generated method stub
  return null;
 }

 @Override
 public String sayGoodBye(String name) {
  return null;
 }

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

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

 public void setAddress(String address) {
  this.address = address;
 }

 @Override
 public String toString() {
  return "age: " + age + "  name: " + name + " address: " + address;
 }
}

创建类实现工具类:

package reflect;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Properties;
/***
 * 面向接口编程:
 * newInstance() 和 new 有什么区别?
 * 1、区别在于创建对象的方式不一样,前者是使用类加载机制
 * 2、从jvm的角度看,我们使用new的时候,这个要new的类可以没有加载;
 * 3、使用newInstance时候,就必须保证:
 *     1、这个类已经加载;
 *     2、这个类已经连接了。
 *  而完成上面两个步骤的正是class的静态方法forName()方法,这个静态方法调用了启动类加载器(就是加载javaAPI的那个加载器)。
 *  即:newInstance实际上是把new这个方式分解为两步,即,首先调用class的加载方法加载某个类,然后实例化
 * 
 *  [补充:]
 * newInstance: 弱类型。低效率。只能调用无参构造。
 * new: 强类型。相对高效。能调用任何public构造。
 * newInstance()是实现IOC、反射、面对接口编程 和 依赖倒置 等技术方法的必然选择,new 只能实现具体类的实例化,不适合于接口编程。
 * @author huawei
 *
 */
public class ClassReflect {
 private static Properties props;
 //采用静态语句块:类加载便会执行
 static{
  props = new Properties();
  try {
   String path = "src" + File.separator + "file" + File.separator + "properties.properties";
   props.load(new FileInputStream(path));
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
 //调用类无参构造器
 public static Object createInstance(Object className)
    throws ClassNotFoundException, InstantiationException,
     IllegalAccessException, IllegalArgumentException,
     SecurityException, InvocationTargetException,
     NoSuchMethodException{
  String object = (String) props.get(className);
  Class<?> cls = Class.forName(object);
  return cls.getConstructor().newInstance();
 }
 //调用有参构造器
 public static Object createInstance(Object className,Class<?>[] parameterTypes,Object[] initargs) throws Exception{
  String object = (String) props.get(className);
  Class<?> cls =  Class.forName(object);
  return cls.getConstructor(parameterTypes).newInstance(initargs);
 }
}

调用不同参数构造器测试类:

package reflect;

import org.junit.Test;

import iInterface.IPerson;
/***
 * 创建类的实例测试类:--实现面向接口编程思想
 * 1、调用无参构造器
 * 2、调用有参构造器
 * @author huawei
 *
 */
public class ClassInstanceTest {
 //调用无参构造器
 //@Test
 public void test1(){
  try {
   IPerson person = (IPerson) ClassReflect.createInstance("person");
   person.setName("beyond0851");
   person.setAge(100);
   person.setAddress("hello");
   System.out.println(person.toString());
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 //根据参数类型不同,调用有参构造器
 @Test
 public void test2(){
  try {
   IPerson person = (IPerson) ClassReflect.createInstance("person",
        new Class[]{int.class,String.class,String.class},
         new Object[]{90,"beyond0851","love记记"});
   System.out.println(person.toString());
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

 

autoware 激光-相机联合标定 autoware进行激光-相机联合标定 ~~~ 刚开始进行激光-相机联合标定的时候,出现了不少问题,在此记录一下整体标定流程,以防忘记。在此,特别感谢佳明师弟,在录制数据集时提供的帮助。 ~~~ 0.系统配置: Ubuntu18.04系统 ROS Melodic opencv 3.2.0 vlp-16 一.安装autoware 这部分网上教程挺多的,但我在编译的过程中仍存在不少bug,唉~_~。 二.安装calibration_camera_lidar,从a... 阅读详情

相关推荐

用Python玩转LQR控制:3行核心代码实现倒立摆稳定控制(附Jupyter Notebook)

本文通过Python实战演示了如何使用LQR算法实现倒立摆的稳定控制。文章以直观方式解释LQR原理,提供从系统建模、核心代码求解到参数调优的完整流程,并附有可运行的Jupyter Notebook代码。重点介绍了如何利用SciPy库快速计算最优反馈增益,并通过仿真验证控制效果,为运动控制实践提供了即学即用的指南。

weixin_29311017的博客 83

newInstance() 是实现IOC、反射、面向接口编程和依赖倒置的必然选择

在初始化一个类,生成实例的时候,大家可能用new比较多,用newInstance较少。 收集到的资料为: 最简单的描述来区分new关键字和newInstance()方法的区别:   newInstance: 弱类型。低效率。只能调用无参构造。   new: 强类型。相对高效。能调用任何public构造。 newInstance()是实现IOC、反射、面对接口编程和依赖倒置等技术方法的必然选择

waj89757的专栏 1006

PCAN-Explorer5使用教程

在PCAN中新建工程,导入DBC文件(右键apply),导入采集的数据选择对应的CAN通道点击红框中的标记可选择想要查看的信号在plot界面跳出属性,可调整信号显示的样式和最大最小值调出cursor,选择需要观测的变量,选中右键style——Period 可显示间隔时间增加cursor,可观测多个变量。

weixin_43997043的博客 6914

反射

Class类 除了int等基本类型外,Java的其他类型全部都是class(包括interface)。 而class是由JVM在执行过程中动态加载的。JVM在第一次读取到一种class类型时,将其加载进内存。 每加载一种class,JVM就为其创建一个Class类型的实例,并关联起来。注意:这里的Class类型是一个名叫Class的class。 由于JVM为每个加载的class创建了对应的Class实例,并在实例中保存了该class的所有信息,包括类名、包名、父类、实现的接口、所有方法、字段等,因此,如果获

qq_42530332的博客 215

初识Classic AUTOSAR开发工具链

在过去,软件和硬件之间具有很强的耦合性,阻碍了软件组件在不同硬件平台上的可移植性和重用性。而AUTOSAR作为汽车电子行业的标准,提供标准的软件接口定义,工程师可以根据需求将软件组件分配到汽车的ECU中,实现标准软件组件的可重用性。

怿星科技的博客 8095

保姆级教程:用Wokwi玩转ESP32 MicroPython仿真(含库文件配置指南)

本教程详细介绍了如何使用Wokwi平台进行ESP32 MicroPython仿真开发,包括库文件配置、传感器数据模拟和REPL调试技巧。通过Wokwi的仿真调试系统,开发者可以在浏览器中快速验证代码逻辑,提高开发效率,特别适合物联网项目的快速迭代。

weixin_29195615的博客 446

Class.newInstance()

由于刚跳了槽,刚开始来了几天,开始改bug,碰到很多新的东西,瞬间觉得自己太水了,让我欣慰的是我可以学到很多知识,而且是很实用的东西。吐槽一下,扎实的基本功,哪里都很喜欢,原因是基础扎实,才能看懂别人写的是啥。。。。。。学吧!!! 原文引自:http://www.yiibai.com/java/lang/class_newinstance.html java.lang.Class.

hrklzwzj的博客 5009

在 Ubuntu 上安装和配置 PostgreSQL 实录

本文介绍了在Ubuntu系统上安装和配置PostgreSQL数据库的完整步骤。主要内容包括:1)通过官方源或PPA源安装最新版本;2)修改配置文件(postgresql.conf和pg_hba.conf)以允许远程访问;3)设置postgres用户密码;4)创建新用户并配置权限;5)防火墙设置和重启服务;6)验证安装和远程连接方法。文章提供了详细的命令行操作指导,帮助用户完成从安装到远程访问的全部配置过程。

qq_58168857的博客 1208

php newinstanceargs,ReflectionClass::newInstance 在调用构造函数中含有引用参数的时候报错的解决方法...

class a {public function __construct(&$a, $c) {}}// this works$A = new stdClass();$a = new a($A, 11);// also this works$classname = "a";$a = new $classname($A, 10);// but this fails:$r = new Refle...

weixin_33712536的博客 807

50、压电微泵与技术设备驱动的研究分析

本文研究了压电微泵在弹性微通道中的流体流动特性及技术设备驱动的振动行为。通过建立轴对称流固耦合模型,利用FreeFem++进行数值模拟,分析了不同数量压电致动器和频率对微泵流量的影响,发现多个致动器按特定时序压缩可产生净正向流量,并提出了稳态流量的近似解析公式。同时,针对技术设备驱动系统,探讨了周期性负载引起的强迫振动特性,明确了共振条件及影响因素,并比较了主动、被动和优化设计等振动控制策略。最后展望了实验验证、多物理场耦合与智能控制等未来研究方向,为相关设备的优化设计与高效运行提供了理论支持。

convnet3designer的博客 148

069、自动曝光(AE)测光策略:全局/中心/点测光与曝光时间增益分配

本文深入探讨了自动曝光(AE)测光策略的技术细节与实际应用。作者通过多个真实案例(手机前置摄像头、车载ADAS、安防监控等)分析了全局测光、中心测光和点测光的优缺点,指出不同场景应采用不同策略。重点剖析了曝光时间与增益分配的"跷跷板效应",提出要根据传感器特性选择最优分配方案。文章强调测光策略应动态调整,并给出5条实用建议:结合场景切换测光模式、关注传感器增益拐点、点测光需防抖处理、全局测光不宜迷信、调试要观察亮度直方图。最后指出AE调试需要结合具体硬件特性进行实测优化,没有通用解决方案。

zzfmlxs的博客 103

newInstance()有什么用

"newInstance()"是Java中的一个方法,可以用于动态地创建一个类的新实例(对象)。它在反射中使用,反射是Java语言的一项特性,可以在运行时检查、访问和修改类的属性、方法和构造函数等信息。 newInstance()方法可以通过调用类的无参构造函数来创建对象。如果类没有无参构造函数,newInstance()方法会抛出InstantiationException异常。例如,假设有一个...

weixin_42600407的博客 2052

Airtest进阶使用篇-提高脚本稳定性+批量运行脚本

Airtest进阶篇,主要分享如何提高脚本稳定性+如何批量运行脚本生成测试报告!

程序员小杨哥的博客 2570

Class.newInstance与同new的到对象的区别

先说一下区别 1、使用newInstance可以解耦。使用newInstance的前提是,类已加载并且这个类已连接,这是正是class的静态方法  forName()完成的工作。newInstance实际上是把new         这个方式分解为两步,即,首先调用class的加载方法加载某个类,然后实例化。 2、newInstance: 弱类型。低效率。只能调用无参构造。 ne

qq_29631069的博客 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

java中newInstance()和new()

https://blog.youkuaiyun.com/wistbean/article/details/80964377 在初始化一个类,生成一个实例的时候;newInstance() 和 new 有什么区别?用newInstance与用new是区别的,区别在于创建对象的方式不一样,前者是使用类加载机制,那么为什么会有两种创建对象方式?这个就要从可伸缩、可扩展,可重用等软件思想上解释了。Java中工...

weixin_34227447的博客 732

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java对象创建之new关键字和newinstance()方法

new和newinstance()区别 在初始化一个类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法,一个是关键字外,最主要有什么区别?它们的区别在于创建对象的方式不一样,前者newInstance()是使用类加载机制,后者new关键字是创建一个新类。那么为什么会有两种创建对象方式?这主要考虑到软件的可伸缩、可扩展和可重用等软件设计思想。   Java中工厂模式经常使用newInstance()方法来创建对象,因此从为什么要使用工厂模式上可以找到具体答案。 例...

daobuxinzi的博客 4192

newInstance() 和 new 有什么区别?

<br />在初始化一个类,生成一个实例的时候;newInstance() 和 new 有什么区别? <br />  用newInstance与用new是区别的,区别在于创建对象的方式不一样,前者是使用类加载机制,那么为什么会有两种创建对象方式?这个就要从可伸缩、可扩展,可重用等软件思想上解释了。 <br />  Java中工厂模式经常使用newInstance来创建对象,因此从为什么要使用工厂模式上也可以找到具体答案。 <br />  例如: <br />  Class c = Class.forName

::: 移动互联网时代开发者 ::: 4848

new和newInstance区别

详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp55     在初始化一个类,生成一个实例的时候;newInstance() 和 new 有什么区别? 用newInstance与用new是区别的,区别在于创建对象的方式不一样,前者是使用类加载机制,那么为什么会有两种创建对象方式?这个就要从可伸缩、可扩展,可重用等软件

yemou_blog的博客 677

new和newinstance()区别?

newInstance()是使用类加载机制,new关键字是创建一个新类。那么为什么会有两种创建对象方式?这主要考虑到软件的可伸缩、可扩展和可重用等软件设计思想。 Java中工厂模式经常使用newInstance()方法来创建对象,因此从为什么要使用工厂模式上可以找到具体答案。 例如:真正起到消除耦合的,正是这个ExampleInterface 接口,而不是reflection class c = Class.forName(“类的全限定名”); ExampleInterface factory = (Exa

一个搬砖工人 311

newInstance( )和new的区别

终于明白为什么加载数据库驱动只用Class.forName()了!!困扰了我2个小时!!希望我写的这个东西对各位有所帮助。在Java开发特别是数据库开发中,经常会用到Class.forName( )这个方法。通过查询Java Documentation我们会发现使用Class.forName( )静态方法的目的是为了动态加载类。在加载完成后,一般还要调用Class下的newInstance( )静态

小学长的博客 2220

java new newinstance_java中newInstance()和new()

https://blog.youkuaiyun.com/wistbean/article/details/80964377在初始化一个类,生成一个实例的时候;newInstance() 和 new 有什么区别?用newInstance与用new是区别的,区别在于创建对象的方式不一样,前者是使用类加载机制,那么为什么会有两种创建对象方式?这个就要从可伸缩、可扩展,可重用等软件思想上解释了。Java中工厂模式经常...

weixin_35104141的博客 214

newInstance()和new()的区别

转载:http://www.jobui.com/mianshiti/it/java/7148/ newInstance: 弱类型。低效率。只能调用无参构造。new: 强类型。相对高效。能调用任何public构造。newInstance()是实现IOC、反射、面对接口编程 和 依赖倒置 等技术方法的必然选择,new 只能实现具体类的实例化,不适合于接口编程。newInstance()里面...

aishuqun0228的博客 170

newinstance()和new有什么区别?

在初始化一个类,生成一个实例的时候;newInstance() 和 new 有什么区别? 用newInstance与用new是区别的,区别在于创建对象的方式不一样,前者是使用类加载机制,那么为什么会有两种创建对象方式?这个就要从可伸缩、可扩展,可重用等软件思想上解释了。 Java中工厂模式经常使用newInstance来创建对象,因此从为什么要使用工厂模式上也可以找到具体答案。 例如: C

菜鸟程序猿的博客 721

new 和 newInstance 的区别

初始化一个类,生成一个实例的时候;newInstance() 和 new 有什么区别? 用newInstance与用new是区别的,区别在于创建对象的方式不一样,前者是使用类加载机制,那么为什么会有两种创建对象方式?这个就要从可伸缩、可扩展,可重用等软件思想上解释了。 Java中工厂模式经常使用newInstance来创建对象,因此从为什么要使用工厂模式上也可以找到具体答案。 例如: Cl...

qq_39581763的博客 137

newinstance()和new有什么区别

在初始化一个类,生成一个实例的时候,newInstance() 和 new 有什么区别?用newInstance与用new是区别的,区别在于创建对象的方式不一样,前者是使用类加载机制,那么为什么会有两种创建对象方式?这个就要从可伸缩、可扩展,可重用等软件思想上解释了。Java中工厂模式经常使用newInstance来创建对象,因此从为什么要使用工厂模式上也可以找到具体答案。例如:Clas...

dibe49481448的博客 71

在初始化一个类,生成一个实例的时候;newInstance() 和 new 有什么区别?

在初始化一个类,生成一个实例的时候;newInstance() 和 new 有什么区别? 用newInstance与用new是区别的,区别在于创建对象的方式不一样,前者是使用类加载机制,那么为什么会有两种创建对象方式?这个就要从可伸缩、可扩展,可重用等软件思想上解释了。 Java中工厂模式经常使用newInstance来创建对象,因此从为什么要使用工厂模式上也可以找到具体答案。 例如: C

gaohuixiang315 1082
上一篇: 面向接口编程:newInstance() 和 new 的区别
下一篇: java 注解的几大作用及使用方法详解(完)
beyond0851
博客等级 码龄15年 18粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值