反射和new出来的类的区别

java 反射和new的区别

关于java 反射和new的区别,在这里我不做多讲,因为网上有大把资料,描述得很详细。

今天我只讲一点,为什么要用反射?直接用new不行么?干嘛弄得那么麻烦!

1.基本上效果差不多,但是new对象,无法调用该类里面私有的东西,反射反之,具体怎么做请参考java AIP,不过反射需要以牺牲性能做代价。

2.在不知道类名的情况下,你怎么去new?我相信很多人看到这句话都迷糊了(新手),肯定有这样的疑问,不知道类名,你怎么反射啊?

那么接下来在讲讲new和反射本质上的区别,new属于静态编译,而反射属于动态编译,意思就说只有到运行时他才会去获得该对象的实例,可能讲的有些抽象(也有可能讲的不太正确)

举例:spring框架是事先就写好的框架,他内部的处理并不知道用户要写哪些类,应为那是以后由用他的人来定的,这时候你还能在spring内部去new吗?所以用户在用的时候才去配置文件中配置类路径,这是一个典型反射的例子,在很多面试中就问道了这个问题。

静态编译和动态编译的区别:来自网上,借花献佛,

静态编译就是在编译的时候把你所有的模块都编译进exe里去,当你启动这个exe的时候所有模块都加载进来了。你写小程序没问题,但程序一大,加载的过程(就是当你运行程序时初始化的过程)就比较费力了。。大多数ppc的硬件配置还是很一般的。

动态编译就不一样了,你编译的时候那些模块都没有编译进去,一般情况下你可以把那些模块都编译成dll,这样你启动程序(初始化)的时候这些模块不会被加载,而是在运行的时候,用到那个模块就调用哪个模块。

简单的打个比方,我写个阅读器,支持txt,pdf,udm三种格式,暂时把读txt,读pdf,读udm定义为三个功能模块。 使用静态编译:我想看个txt,点击应用程序图标以后三个功能都加载进来了,判断格式,使用读txt模块。(在这里,另外两个模块的作用就是占用系统资源) 使用动态编译:我想看个txt,点击应用程序,判断格式,只加载读txt模块,使用读txt模块。

显然,动态编译1速度快,2节省了系统资源,3利于今后拓展。

解释2 静态编译的话 exe文件运行的时候不会用到别的文件 动态编译 exe文件就要用到别的文件了

解释3 一个是租自行车,什么时候骑什么时候租,有新车就租新车,没新车就租旧车,有电动车就省点劲,碰上没车座子的就扎屁股,人家不出租了你就别用了。  一个是自己买个自行车天天扛着,进电梯上地铁也扛着。老子自己的 ...

解释4 用静态链接库编译,相当于你带着一个工具包到处跑(遇到有需要的地方不需要周围的环境提供相应的工具,自己用自己工具包的工具就行了,所以当环境发生变化可以尽可能的无视),当然,你本来不带任何东西走到哪是哪和工具包随身带的区别显然就是重量增加了,即程序的体积可能会比另一种方式来的大一点,看你的工具包有多大。

---转自:https://blog.csdn.net/molashaonian/article/details/53177064

原文地址:https://www.cnblogs.com/xyyou/p/11192278.html

时间: 2024-10-14 17:55:12

反射和new出来的类的区别的相关文章

hadoop中Text类 与 java中String类的区别

hadoop 中 的Text类与java中的String类感觉上用法是相似的,但两者在编码格式和访问方式上还是有些差别的,要说明这个问题,首先得了解几个概念: 字符集: 是一个系统支持的所有抽象字符的集合.字符是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等.例如 unicode就是一个字符集,它的目标是涵盖世界上所有国家的文字和符号: 字符编码:是一套法则,使用该法则能够对自然语言的字符的一个集合(如字母表或音节表),与其他东西的一个集合(如号码或电脉冲)进行配对.即在符号集

Python新式类和经典类的区别

@Python新式类和经典类的区别 class ClassicClass(): pass class NewStyleClass(object): pass x1 = ClassicClass() x2 = NewStyleClass() print x1.__class__, type(x1) print x2.__class__, type(x2) 输出结果: __main__.ClassicClass <type 'instance'> <class '__main__.NewSt

Unity3D普通类和继承自MonoBehaviour类的区别

欢迎来到unity学习.unity培训.unity企业培训教育专区,这里有很多U3D资源.U3D培训视频.U3D教程.U3D常见问题.U3D项目源码,我们致力于打造业内unity3d培训.学习第一品牌. Unity3D普通类和继承自MonoBehaviour类的区别.如果创建新的类时,使用的是在unity editor的project视图中右键,create javascript or c#方式,那么创建的类都是默认继承自MonoBehaviour, 生成后可以查看类文件,会发现c#类继承自Mo

结构和类的区别

本文转自:http://blog.csdn.net/lianchangshuai/article/details/5810249 1.结构用于小的数据类型,所有结构派生自System.ValueType类,不能再继承其它基类,同时也不能被继承. 而类一般用于大的数据类型如人类,动物类等,支持继承. 2.结构和类一样可以有成员方法,字段.3.结构中的成员字段不能被显式初始化,要通过默认无参构造器初始化,而类的字段可以显示初始化,默认由无参构造器初始化. 4.结构的无参构造器总是存在,无论是否手动添

C#中结构与类的区别

一.类与结构的示例比较: 结构示例: 1 public struct Person 2 { 3 string Name; 4 int height; 5 int weight 6 public bool overWeight() 7 { 8 //implement something 9 } 10 } 类示例: 1 public class TestTime 2 { 3 int hours; 4 int minutes; 5 int seconds; 6 7 public void passti

[转]C#中的结构体与类的区别

C#中的结构体与类的区别 经常听到有朋友在讨论C#中的结构与类有什么区别.正好这几日闲来无事,自己总结一下,希望大家指点. 1. 首先是语法定义上的区别啦,这个就不用多说了.定义类使用关键字class 定义结构使用关键字struct.在语法上其实类和结构有着很多相似的地方. 定义类的语法 1 class Person 2 { 3 private string name; 4 private int age; 5 6 public void SayHi() 7 { 8 Console.WriteL

phpcms加载系统类与加载应用类之区别详解

<?php 1. 加载系统类方法load_sys_class($classname, $path = ''", $initialize = 1)系统类文件所在的文件路径:/phpcms/libs/classes/文件夹下参数说明:@param string $classname 类名@param string $path 扩展地址@param intger $initialize 是否初始化 例子:如要调用系统Form类的生成验证码函数:checkcode() ,看下面例子pc_base:

javascript 类的区别

javascript 新式类与旧式类的区别: es6: //es6 'use strict' class User{ constructor(name,age){ this.name = name; this.age = age; } //静态方法 static getClassName(){ return 'User'; } changeName(name){ this.name = name; } changeAge(age){ this.age = age; } get info(){ r

面向对象之类的方法 私有属性(加俩下划线) 新式类 经典类的区别

@classmetod #!/usr/bin/env python # -*- coding:utf-8 -*- class Animal: def __init__(self,name): self.name = name hobbie = 'meat' @classmethod #类方法不能访问实例变量 加上后 self.name就无法访问了 def talk(self): #print("%s is talking" %self.name) print("%s is t