Java对象被创建有两种方式:第一种是通过new XX();第二种是Class.forName("XX").newInstance().我现在对这个流程的认识有些混乱.
要生成一个类的对象,必须有两样东西被加载到内存,一种是Class对象;另一种是类,然后类对象才会被创建.由于Java是动态加载(类的静态成员被引用,类才会别加载),所以类加载的时候相对于上面的两种方式分别是在:第一种:new XX(),因为构造器方法也是静态方法,这种方式会调用构造器方法,所以此时类会被加载;第二种:Class.forName()首先会检查类有无被加载,没有则加载类.至此,两种方式的类都被加载.
我的疑问是Class对象是何时被加载的,是和类一样吗?(我现在知道的关于Class对象的知识就是它是在.java文件被创建,被编译后产生了和类名字一样的.class文件.)是在类被加载之前还是之后,还有Class对象是怎么和类配合生成类对象的...希望大家能多多发表自己的见解.
要生成一个类的对象,必须有两样东西被加载到内存,一种是Class对象;另一种是类,然后类对象才会被创建.由于Java是动态加载(类的静态成员被引用,类才会别加载),所以类加载的时候相对于上面的两种方式分别是在:第一种:new XX(),因为构造器方法也是静态方法,这种方式会调用构造器方法,所以此时类会被加载;第二种:Class.forName()首先会检查类有无被加载,没有则加载类.至此,两种方式的类都被加载.
我的疑问是Class对象是何时被加载的,是和类一样吗?(我现在知道的关于Class对象的知识就是它是在.java文件被创建,被编译后产生了和类名字一样的.class文件.)是在类被加载之前还是之后,还有Class对象是怎么和类配合生成类对象的...希望大家能多多发表自己的见解.
解决方案 »
- 关于org.apache.commons.net.telnet.TelnetClient 问题请教
- vector循环遍历导致程序退出
- 推荐个开源java项目研究一下源代码
- 问一个关于static的小白问题
- runtime调用sqlplus跑脚本不能正常退出,但是直接拿语句到cmd跑却正常
- 急求!!<FORM id=FORM1 name=fm_login action="j_security_check" method=post>
- swing的问题
- 多维数组定义问题!求人帮忙了!
- 谁知道:我用jdk生成的java程序字体显示不好,不管是中文还是英文都显示不好,怎么调?
- 请问哪儿有JDK1.3下载
- 如何修改文件名!
- java的equals和contains的区别
Class.forName("XX").newInstance();
这两种效果一样,加载方式也一样,毫无区别,newInstance()实际上也是调用默认构造器方法的。
只是在用的场合不一样,前面一种用的很普遍。后面一种一般都是结合工厂模式应用的比较多。
Class.forName("XX").newInstance();
两者都是调用构造函数
class。forname()就是一个以编译过的类,生成一个对象
区别1:Class.forName的方式能实现动态地载和创建Class 对象,而NEW指定生成某个类的对象
例:String str = 你定义的字符串
Class t = Class.forName(str);
t.newInstance();
区别2:JAVA的工厂模式中常使用Class.forName方式创建对象
}
还有一种方式,
Class<?> i=Test.class ;
i.newInstance();
不同之处:LZ列举上面2种都会伴随类的初始化,而这种不会伴随类的初始化。
然后就可以调用defineClass来在ClassLoader中生成Class
class A {
//
static {
System.out.println("haha");
}
}
这个东西类似常量的初始化。第一种调用方法,VM 启动的时候,会去找所有被 import 了的类,如果找到了,这段代码就会被调用。也就是一启动就会调用。
第二种方法,如果你一直没有 import 这个类,vm 一直等到 Class.forName("XX").newInstance() 才会调。如果 static initialization 里面写了很多代码,又不想在不需要的时候调用它们,就只有第二种方法来。
经过一天的了解.我对这个流程有了更多一点了解.首先是编译器生成.class文件.然后是类加载器加载.class文件,因为JVM处理类和处理基本类型是一模一样的方式.所以这里的.class文件时对一个类型的定义...至于后面的流程我还是要慢慢体会啊!
运行:类装载器 ->字节码验证器->....->通过JIT等生成存储在内存中的可执行代码...
首先是类装载器根据 类名.class 在文件中找到相应的 类名.class,然后加载该 类名.class,及将类名.class文件转化为java虚拟机中的类字节码。
Class.forName("XX") 返回值是一个Class类的实例对象,该Class对象封装了 XX.class的字节码数据,也就是生成存储在内存中的可执行代码。//Class类的作用
Class.forName("XX").newInstance() 返回的是XX.class类 中XX的一个实例对象。
举个例子:
public class classObjectTest{
public static void main(String args[])throws ClassNotFoundException{
Class c;
classObjectTest cot=new classObjectTest();
c=Class.forName("classObjectTest");//相当于c=cot.getClass();
System.out.println(cot);
System.out.println(c);
System.out.println(c.getName()); }
}
结果:D:\>java classObjectTest
classObjectTest@de6ced
class classObjectTest
classObjectTest
也不知道对不对,有点晕了
public class LoaderTest{
public static void main(String args[])throws ClassNotFoundException{
Class c;
LoaderTest lt=new LoaderTest();
c=Class.forName("LoaderTest");
System.out.println(c);
System.out.println(c.getName());
System.out.println(c.getClassLoader());
System.out.println(c.getClassLoader().getParent());
System.out.println(c.getClassLoader().getParent().getParent());
}
}
class LoaderTest
LoaderTest
sun.misc.Launcher$AppClassLoader@19821f
sun.misc.Launcher$ExtClassLoader@addbf1
null
首先对于编译后的LoaderTest.class,必须要知道哪个加载器来加载,(下面是一种委托模式,及子类加载器都先调用父类加载器加载)首先调用AppClassLoader来加载,但AppClassLoader会让他继承的父类加载器ExtClassLoader加载LoaderTest.class,ExtClassLoader没有父类加载器(返回值为null),将LoaderTest.class转交给虚拟内核中的Bootstrap,由于Bootstrap只能加载java核心包中的类,所以告诉ExtClassLoader自己不能加载,ExtClassLoader是用来加载%JAVA_HOME%/jre/lib/ext/中的jar包中类,自己也不能加载LoaderTest.class,于是就告诉AppClassLoader自己不能加载该LoaderTest.class。由于AppClassLoader可以加载应用程序的启动态,可以加载该LoaderTest.class,
然后就像上面说的那样,加载时生成了一个个Class类的实例对象,该Class对象封装了 LoaderTest.class的字节码数据,也就是生成存储在内存中的可执行代码。我们可以通过Class.forName("LoaderTest").getName()获得这个Class对象的名称,通过Class.forName("LoaderTest").newInstance()来获得 LoaderTest这个类的对象。
当全部类被加载后,可执行文件的记忆体格式被确定。这时,特定的内存地址被分配给符号引用并创建检索表格。由于记忆体格式在运行时出现,因而Java技术解释器增加了保护以防止对限制代码区的非法进入。网上找了些资料,有用的话就好了
使用new时,JVM同样先初始化类,然后再产生实例Class.forName("")是动态加载,并且被加载的类有一定的限制,它必须有一个默认的,有访问权限的无参构造器,否则会抛出异常(可以编译)
而new则相对必较灵活,它不需要默认的无参构造器,没有访问权限的话将无法编译
I CALL! RE 孔乙己!!!!
java.lang.Class类型的对象(暂且命名aCls).1)A.java编译后就可以抛弃了,jvm使用的是A.class.把A.java删除后,A.class可以正常使用,就证明了这点.
2)当第一次生成一个类的对象时,会有一个合适的ClassLoader去把A.class文件读取并加载入内存.
3)接着jvm生成一个描述该类的java.lang.Class类型的对象,可以通过 Class aCls = a.getClass();获得getClass()方法继承自java.lang.Object类.一个类无论被实例多少次,都只会有一个该类的Class类型的对象,就是第一次加载时产生的. 最后,我们所说的A类,不是指A.java或者A.class也不是aCls,而是指一种类型,A类型.前两者是文件,后者是对象.简单的说,鸟类就是鸟类,我也说不明白了,看来只可意会,不可言传啊.哈哈.
关于aCls的产生描述的不正确,当我们编译一个Java类就会同时产生一个与该类相对应的Class对象(保存在.class文件中),也就是.class文件被加载后,就已经在内存中存在一个对应该类的java.lang.Class类型的对象了,而不是生成.
加载这个类是指加载Class对象,根据Class对象初始化这个类,并为类中的静态方法和静态块跟配内存的过程。差不多吧这样子,真的也不是很清楚,具体真正什么过程只有计算机知道,先看着会用就行了。
是java关键字,最早由c++演变而来。Class.forName("XX").newInstance();
是一种反射方法,是java.lang.Class.class 这个类中的方法,位于jdk的rt.jar这个包中,是sun帮你编译好的。
所以完整的写法应该是:java.lang.Class.forName("XX").newInstance();
只不过java.lang.一般可以忽略不写罢了。由于"XX"是字符串,所以使程序有了运行时动态加载的能力,增加了灵活性,反之损失了效率,光看Class.class 里import的数量就知道了,四十多个 -_-!
注册公司需要有以下几个流程:
1.核准名称:
到工商局领取一张“企业(字号)名称预先核准申请表”,填入你准备取的公司名称(一共5个),工商局会检索是否有重名,如无重名,即可使用并核发“企业(字号)名称预先核准通知书”,费用是30元(可以检索5个名称)。 2.租房:
租写字楼的办公室,民用房屋不可以注册的(北京)。
签订租房合同,并让房屋的产权人提供房产证复印件,再到税务局买印花税。税率是年租金的千分之一,将印花税票贴在合同的首页。 3.编写公司章程:
可以找人代写,也可以从工商局的网站下载“公司章程”样本,修改后,由所有股东签名。 4.刻法人名章:
到刻章社,刻法人名章(方型)费用15-20元。 5.到银行开立公司验资户:
携带“公司章程”“工商局的核名通知”“法人名章”“身份证”到银行去开立公司帐户(是验资帐户,将各股东的资金存入帐户),银行出据“询征函”“股东缴款单”。 6.办理验资报告:
拿着“股东缴款单”“询征函”“公司章程”“核名通知书”“房租合同”“房产证复印件”到会计师事务所办理验资报告,费用500元。 7.注册公司:
到工商局领取公司设立登记的各种表格填好,然后将“核名通知”“公司章程”“房租合同”“房产证复印件”“验资报告”一起交给工商局,一般3个工作日后可以领取执照(各地时间略有差别)。 8.刻制公章:
凭营业执照,到公安局指定的刻章社,刻公章,财务专用章,费用120-180元。 9.办理企业组织机构代码证:
凭营业执照到技术监督局办理组织机构代码证,费用30元。 10.开基本户:
凭营业执照,组织机构代码证,去银行开立基本帐号(同时注销验资帐户)。 11.办理税务登记:
领取执照后的30日内到当地税务局申请领取税务登记证(国税,地税)费用分别是10元, 40元 。 12.领购发票:
服务性质的公司使用地税发票,销售商品的公司使用国税发票。
各地的费用会略有不同。
注册公司的流程所需要的材料和时间
一.公司查名所需材料如下:
①法定代表人、股东身份证或者法人的身份证;
②注册资本金额及各股东投资比例;
③公司名称字号五个以上;
④公司主要经营范围;
二.流程:
查名→验资→办理工商营业执照(含刻章)→办理组织机构代码证→办理税务登记证。
三.时间:
①查名:三个工作日;
②验资:三个工作日;
③营业执照:五个工作日;
④组织机构代码证:二个工作日;
⑤税务登记:十个工作日。
二.注册资本用完后在你公司的所开户的银行里做为你公司的流动资金用,是不交给工商局的,与他们无关.是存入银行的证明你们有这些资本实力进行公司运营.
三.具体程序:
企业名称预核准(工商局)--验资(会计师事务所)--办理相应的前置审批手续--申请营业执照(工商局)
要注册一个公司,首先想好经营什么,怎样经营好,再来注册。要不,注册了也没有用,注册了公司是需要很多成本的,不是一件“好玩”的事情。前期可行性分析调查,建议你自己认真的考虑一下。接下来谈谈如何注册公司,需要哪些手续、怎样操作。
一、选择公司的形式:
普通的有限责任公司,最低注册资金3万元,需要2个(或以上)股东 二、注册公司的步骤:
1.核名:到工商局去领取一张“企业(字号)名称预先核准申请表”,填写你准备取的公司名称,由工商局上网(工商局内部网)检索是否有重名,如果没有重名,就可以使用这个名称,就会核发一张“企业(字号)名称预先核准通知书”。
2.租房:
去专门的写字楼租一间办公室,如果你自己有厂房或者办公室也可以,有的地方不允许在居民楼里办公。
租房后要签订租房合同,并让房东提供房产证的复印件。
3.编写“公司章程”:
可以在工商局网站下载“公司章程”的样本,修改一下就可以了。章程的最后由所有股东签名。
4.刻私章:
去街上刻章的地方刻一个私章,给他们讲刻法人私章(方形的)。费用大概20元左右。
5.到会计师事务所领取“银行询征函”:
联系一家会计师事务所,领取一张“银行询征函”(必须是原件,会计师事务所盖鲜章)。如果你不清楚,可以看报纸上的分类广告,有很多会计师事务所的广告。
6.去银行开立公司验资户:
所有股东带上自己入股的那一部分钱到银行,带上公司章程、工商局发的核名通知、法人代表的私章、身份证、用于验资的钱、空白询征函表格,到银行去开立公司帐户,你要告诉银行是开验资户。开立好公司帐户后,各个股东按自己出资额向公司帐户中存入相应的钱。
银行会发给每个股东缴款单、并在询征函上盖银行的章。
7.办理验资报告:
拿着银行出具的股东缴款单、银行盖章后的询征函,以及公司章程、核名通知、房租合同、房产证复印件,到会计师事务所办理验资报告。一般费用500元左右(50万以下注册资金)。
8.注册公司:
到工商局领取公司设立登记的各种表格,包括设立登记申请表、股东(发起人)名单、董事经理监理情况、法人代表登记表、指定代表或委托代理人登记表。填好后,连同核名通知、公司章程、房租合同、房产证复印件、验资报告一起交给工商局。大概3个工作日后可领取执照.
9.凭营业执照,到公安局指定的刻章社,去刻公章、财务章。后面步骤中,均需要用到公章或财务章。
10.办理企业组织机构代码证:
凭营业执照到技术监督局办理组织机构代码证,费用是80元。办这个证需要半个月,技术监督局会首先发一个预先受理代码证明文件,凭这个文件就可以办理后面的税务登记证、银行基本户开户手续了。
11.去银行开基本户:
凭营业执照、组织机构代码证,去银行开立基本帐号。
12.办理税务登记:
领取执照后,30日内到当地税务局申请领取税务登记证。
13.申请领购发票:
如果你的公司是销售商品的,应该到国税去申请发票,如果是服务性质的公司,则到地税申领发票。
有二点你可能比较关心:
1.公司必须建立健全的会计制度,你可能担心自己不会,怎么办?刚开始成立的公司,业务少,对会计的工作量也非常小,你可以请一个兼职会计,每个月到你的公司帮你建帐,二、三天时间就够了,给他200-500左右的工资即可。
2.公司的税额:
营业税:销售商品的公司,按所开发票额的4%征收增殖税;提供服务的公司,按所开发票额的5%征收营业税。
所得税:对企业的纯利润征收18-33%的企业所得税。 小公司的利润不多,一般是18%。对企业所得税,做帐很关键,如果帐面上你的利润很多,那税率就高。所以,平常的购买设备都要开发票,你吃饭、坐车的票都留起来,可以做为你的企业运作成本。
本公司的服务网址:
1. 公司注册网 http://www.51zhuce.net
2.上海公司注册网 http://www.51gongsizhuce.com
3.外资公司注册网 http://www.zhucewaizi.com
4.代表处注册网 http://www.shdbc.com
5.上海企业注册网 http://www.shanghaizhuce.com
哈哈 new对象不好? 是看对性能的要求 和new的多少
即使用spring 有的时候该new还是要用的 不然就被框架约束死了
但是在不知道 类 地址,只能通过外部传入的时候
只能用 class。forName("ClassPath").newInstance()
class。forName("ClassPath") 是加载类 ,加载的时候类的
静待函数和变量会被加载到内存中,在需要类的静态函数但是不想
new对象的时候 会用。