java通过反射获取属性值 java中非静态方法能调用静态方法吗?
java中非静态方法能调用静态方法吗?
首先直接回答你,在java非静态方法可以调用静态方法。
这个结论可以引伸为在非静态方法中能访问静态方法、静态成员变量和非静态成员,而在静态方法中只能访问静态成员,即静态方法和静态成员变量。
在java的基本概念中,类和对象是两个截然不同又相互关联的概念,类相当于模板,是抽象的,对象相当于实例,是具体的,所以两者的联系就是类实例化之后成为对象。静态成员本身是归属于类的,也称类成员,而实例成员归属于对象。在java的机制中,当类被加载的时候,实际上加载的是它的模板,就是这个类文件,这个时候只有它的静态成员。而只有通过new关键字或反射方法调用了类的构造方法之后,才会生成类的实例对象,这个时候内存里才有了实例成员。
综上,在内存里总是先有静态成员,然后才有实例成员,所以在实例方法里调用静态方法才有可能,反之上哪调用去?而且,实例方法归属于对象,想在静态方法里调用的话也得先把对象实例化了才能调用呀,直接调用是取无根之水,不行吧。唠叨这么多,希望对你有所帮助,助你知其然且知其所以然!
Java DAO中数据库的各种操作方法是否可以设为static?
不可以!
数据库连接池是需要实例化的,而在java中静态方法是不能访问非静态对象的,这是其一,但不重要,重要的一点是,如果你想到办法让DAO中的方法都变成了静态的,你就会失去对事务控制,因为事务肯定是基于实例的。
我估计题主提这个问题,应该是因为每个对象都对应着一类DAO操作,相对繁琐,有这种想法是好的,但目前JAVA体系的架构在这里摆着吧,暂时还挣脱不了这个束缚,有可能到了JAVA V20可能实现(纯属玩笑)。
好啦,这里是TechStar,做过几年的java开发,略知一二,有什么说的不对的地方还请各位海涵~~~
java通过反射获取属性值 java反射调用静态方法 java反射实现接口
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。