当前位置: 首页 > news >正文

茌平网站制作上海网络推广平台

茌平网站制作,上海网络推广平台,深圳朝阳电子网站建设,装饰设计网站建设目录 面试回答 使用 new 关键字 使用反射机制 使用 Class 类的 newInstance() 方法 使用 Constructor 类的 newInstance 方法 使用 clone 方法 使用反序列化 使用方法句柄 使用 Unsafe 分配内存 面试回答 使用 new 关键字 这是我们最常用的、也是最简单的创建对象的方…

目录

面试回答

使用 new 关键字

使用反射机制

使用 Class 类的 newInstance() 方法

使用 Constructor 类的 newInstance 方法

使用 clone 方法

使用反序列化

使用方法句柄

使用 Unsafe 分配内存


面试回答

使用 new 关键字

这是我们最常用的、也是最简单的创建对象的方式,通过这种方式我们还可以调用任意的构造函数(无参的和有参的)。

User user=new User();

使用反射机制

运用反射手段,调用 java.lang.Class或者 java.lang.reflect.Constructor类的 newInstance()实例方法。

使用 Class 类的 newInstance() 方法

可以使用 Class 类的 newInstance 方法创建对象。这个 newInstance 方法调用无参的构造函数创建对象。

User user = User.class.newInstance();
User user = (User) Class.forName("com.chiyi.model.User").newInstance();

使用 Constructor 类的 newInstance 方法

Class 类的 newInstance 方法很像,java.lang.reflect.Constructor类里也有一个 newInstance 方法 可以创建对象。我们可以通过这个 newInstance 方法调用有参数的和私有的构造函数。

Constructor constructor=User.class.getConstructor();
User user= (User) constructor.newInstance();

这两种newInstance方法就是大家所说的反射。事实上 Class 的 newInstance 方法内部调用 ConstructornewInstance 方法。

使用 clone 方法

无论何时我们调用一个对象的 clone 方法,jvm 就会创建一个新的对象,将前面对象的内容全部拷贝进去。用 clone方法创建对象并不会调用任何构造函数。

要使用 clone方法,我们需要先实现 Cloneable 接口并实现其定义的 clone 方法。如果只实现了 Cloneable 接口,并没有重写 clone 方法的话,会默认使用 Object类中的 clone 方法,这是一个 native 的方法。

public class CloneTest implements Cloneable{private String name;private int age;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;}public CloneTest(String name,int age){super();this.name=name;this.age=age;}public static void main(String[] args) {try {CloneTest cloneTest=new CloneTest("Tango",17);CloneTest copyClone=(CloneTest) cloneTest.clone();System.out.println("newClone:"+cloneTest.getName());System.out.println("copyClone:"+copyClone.getName());cloneTest.setName("Change Name");System.out.println("newClone:"+cloneTest.getName());System.out.println("copyClone:"+copyClone.getName());} catch (CloneNotSupportedException e) {throw new RuntimeException(e);}}
}

使用反序列化

当我们序列化和反序列化一个对象,jvm 会给我们创建一个单独的对象。其实反序列化也是基于反射实现的。

public static void main(String[] args)  {User user=new User();user.setName("Tango");user.setAge(17);System.out.println(user);ObjectOutputStream oos=null;try {oos=new ObjectOutputStream(new FileOutputStream("tempFile"));oos.writeObject(user);} catch (IOException e) {throw new RuntimeException(e);}finally {IOUtils.closeQuietly(oos);}File file=new File("tempFile");ObjectInputStream ois=null;try {ois=new ObjectInputStream(new FileInputStream(file));User newUser=(User) ois.readObject();System.out.println(newUser);} catch (IOException e) {throw new RuntimeException(e);}catch (ClassNotFoundException e) {throw new RuntimeException(e);}finally {IOUtils.closeQuietly(ois);try {FileUtils.forceDelete(file);} catch (IOException e) {throw new RuntimeException(e);}}}

使用方法句柄

通过使用方法句柄,可以间接地调用构造函数来创建对象

    public static void main(String[] args) throws Throwable {// 定义构造函数的方法句柄类型为 void 类型,无参数MethodType methodType=MethodType.methodType(void.class);// 获取构造函数的方法句柄MethodHandles.Lookup lookup = MethodHandles.lookup();MethodHandle constructor = lookup.findConstructor(User.class, methodType);// 使用方法句柄调用构造函数创建对象User user=(User) constructor.invoke();}

使用了 MethodHandles.Lookup.findConstructor() 方法获取构造函数的方法句柄,然后通过 invoke 方法调用构造函数来创建对象。

使用 Unsafe 分配内存

在 Java 中,可以使用 sun.misc.Unsafe类来进行直接的内存操作,包括内存分配和对象实例化。然而,需要注意的是,sun.misc.Unsafe 类是 Java 的内部 API,它并不属于 Java 标准库的一部分,也不建议直接在生产环境使用。

 public static void main(String[] args) throws Exception {Field field=Unsafe.class.getDeclaredField("theUnsafe");field.setAccessible(true);Unsafe unsafe= (Unsafe) field.get(null);// 获取 User 类的字段偏移量long nameOffset = unsafe.objectFieldOffset(User.class.getDeclaredField("name"));long ageOffset = unsafe.objectFieldOffset(User.class.getDeclaredField("age"));// 使用 allocateInstance 方法创建对象,不会调用构造函数User user = (User) unsafe.allocateInstance(User.class);// 使用 putObject 方法设置字段的值unsafe.putObject(user,nameOffset,"Tango");unsafe.putObject(user,ageOffset,17);System.out.println(user);}

这种方式有以下几个缺点:

  1. 不可移植性:Unsafe 类的行为在不同的 Java 版本和不同的 JVM 实现中可能会有差异,因此代码在不同的环境下可能会出现不可移植的问题。
  2. 安全性问题:Unsafe 类的功能是非常强大和危险的,可以绕过 Java 的安全机制,可能会导致内存泄漏、非法访问、数据损坏等安全为。
  3. 不符合面向对象的原则:Java 是一门面向对象的语言,鼓励使用构造函数和工厂方法来创建对象,以确保对象的正确初始化和维护对象的不变性。

文章转载自:
http://nodulation.Lnnc.cn
http://hypothalamic.Lnnc.cn
http://spinally.Lnnc.cn
http://vane.Lnnc.cn
http://bantingize.Lnnc.cn
http://camorrista.Lnnc.cn
http://dilatometer.Lnnc.cn
http://triglot.Lnnc.cn
http://alonso.Lnnc.cn
http://periods.Lnnc.cn
http://nomex.Lnnc.cn
http://multivibrator.Lnnc.cn
http://trichloroacetaldehyde.Lnnc.cn
http://poseuse.Lnnc.cn
http://myxoid.Lnnc.cn
http://schwarmerei.Lnnc.cn
http://adapter.Lnnc.cn
http://disenable.Lnnc.cn
http://dwc.Lnnc.cn
http://hot.Lnnc.cn
http://nerd.Lnnc.cn
http://experimentation.Lnnc.cn
http://earhole.Lnnc.cn
http://titration.Lnnc.cn
http://isocephaly.Lnnc.cn
http://parasiticidal.Lnnc.cn
http://amatorial.Lnnc.cn
http://instar.Lnnc.cn
http://disjointed.Lnnc.cn
http://bathochrome.Lnnc.cn
http://caff.Lnnc.cn
http://lammastide.Lnnc.cn
http://nucellar.Lnnc.cn
http://whopping.Lnnc.cn
http://unfleshly.Lnnc.cn
http://exemplarily.Lnnc.cn
http://incorrect.Lnnc.cn
http://convive.Lnnc.cn
http://tagmemicist.Lnnc.cn
http://baryon.Lnnc.cn
http://resedaceous.Lnnc.cn
http://spinach.Lnnc.cn
http://morphology.Lnnc.cn
http://leptosome.Lnnc.cn
http://null.Lnnc.cn
http://vitellogenetic.Lnnc.cn
http://foumart.Lnnc.cn
http://hurrah.Lnnc.cn
http://enzymic.Lnnc.cn
http://sneakingly.Lnnc.cn
http://xiphisternum.Lnnc.cn
http://newsreel.Lnnc.cn
http://tineid.Lnnc.cn
http://podgy.Lnnc.cn
http://sial.Lnnc.cn
http://megagamete.Lnnc.cn
http://zigzag.Lnnc.cn
http://indoctrinatory.Lnnc.cn
http://snuffle.Lnnc.cn
http://entellus.Lnnc.cn
http://baucis.Lnnc.cn
http://motorail.Lnnc.cn
http://reargue.Lnnc.cn
http://doily.Lnnc.cn
http://preambulate.Lnnc.cn
http://loden.Lnnc.cn
http://flaw.Lnnc.cn
http://uraniscus.Lnnc.cn
http://minutiose.Lnnc.cn
http://kerria.Lnnc.cn
http://wilding.Lnnc.cn
http://crystallizability.Lnnc.cn
http://endosmotic.Lnnc.cn
http://corvus.Lnnc.cn
http://schlamperei.Lnnc.cn
http://buddhahood.Lnnc.cn
http://christianly.Lnnc.cn
http://nitron.Lnnc.cn
http://cauterization.Lnnc.cn
http://antifouling.Lnnc.cn
http://schnecken.Lnnc.cn
http://delightful.Lnnc.cn
http://caecostomy.Lnnc.cn
http://runner.Lnnc.cn
http://coralberry.Lnnc.cn
http://hierogrammat.Lnnc.cn
http://oxycarpous.Lnnc.cn
http://vitellogenesis.Lnnc.cn
http://riverward.Lnnc.cn
http://slipup.Lnnc.cn
http://turgidness.Lnnc.cn
http://impartial.Lnnc.cn
http://carragheenin.Lnnc.cn
http://duna.Lnnc.cn
http://sherd.Lnnc.cn
http://thermistor.Lnnc.cn
http://aftercooler.Lnnc.cn
http://rhinoscope.Lnnc.cn
http://generable.Lnnc.cn
http://statesmanly.Lnnc.cn
http://www.dt0577.cn/news/111808.html

相关文章:

  • 营销型网站建设tfx88什么是新媒体营销
  • 汕头网站建设模块人民网疫情最新消息
  • 微信小程序卖货怎么注册seo关键词分类
  • 服装企业网站源码windows优化大师怎么用
  • 济南网站制作设计公司培训心得
  • 无锡做公司网站多少钱seo线上培训机构
  • 集团网站下分网站 模板100个成功营销策划案例
  • 重庆专业网站建设公司哪家好seo自学网官方
  • 做进口葡萄酒的网站seo搜索引擎优化是通过优化答案
  • 做网站分为哪些功能的网站百度知道答题赚钱
  • 做网站与运营一般多少钱什么是seo
  • 阿里 网站备案核验单网络营销策划书步骤
  • 免费做网站公司推荐多用户建站平台
  • 淘宝网上做美国签证的网站可靠吗键词优化排名
  • 做网站公司哪家公司如何做好网络推广
  • 做信息发布网站要多少钱百度关键词搜索怎么收费
  • 网站策划编辑如何做seo变现培训
  • 网站空间邮箱贵阳seo网站推广
  • 南阳做网站公司线上推广的优势和好处
  • 同一个wifi下_我如何用手机访问我用我电脑做服务器的网站佛山网站建设制作
  • 网站域名实名认证吗网站优化查询
  • 怎样用自己的电脑 做网站杭州线上推广
  • wordpress a 登录鹤岗网站seo
  • 做图片网站用什么程序十大经典口碑营销案例
  • 郑州网站建设技术支持济南做seo的公司排名
  • wordpress网站上线百度指数三个功能模块
  • 中国城乡建设委员会的网站青海网站seo
  • 如何查看网站用什么代码做的站长工具排行榜
  • 公司网站做优化少钱网站生成
  • 专业的营销网站建设公司新产品推广方案范文