Java语法中规定,静态方法的访问方式为类名.方法名。
相对于普通方法而言,调用起来更加的方便,那么,我有这样的想法,把所有的方法都改写成静态的,那使用起来不就很方便了嘛,干嘛还要写成普通方法,每次必须new对象才能使用。我这里指的所有方法,主要可以针对于系统里的dao层,即所有的业务逻辑处理的方法,比如各种数据的查询,把所有的这些业务逻辑处理的方法都改成静态的。我觉得这样做应该是不好的,要不然早就这么做了,那么,静态方法是有什么缺陷吗?所以才不能这样做。系统里很多的工具类的方法,一般都写成静态的,不也是为了使用方便吗?
为什么不能把逻辑处理的方法都改成静态的呢?新手求解惑
相对于普通方法而言,调用起来更加的方便,那么,我有这样的想法,把所有的方法都改写成静态的,那使用起来不就很方便了嘛,干嘛还要写成普通方法,每次必须new对象才能使用。我这里指的所有方法,主要可以针对于系统里的dao层,即所有的业务逻辑处理的方法,比如各种数据的查询,把所有的这些业务逻辑处理的方法都改成静态的。我觉得这样做应该是不好的,要不然早就这么做了,那么,静态方法是有什么缺陷吗?所以才不能这样做。系统里很多的工具类的方法,一般都写成静态的,不也是为了使用方便吗?
为什么不能把逻辑处理的方法都改成静态的呢?新手求解惑
int i = 0; static void printClass() {
System.out.println("I'm Class A~");
} void printI() {
System.out.println("i=" + i);
} static void sPrintI(A a) {
System.out.println("i=" + a.i);
} public static void main(String... args) {
A.printClass();
A a = new A();
a.printI();
A.sPrintI(a);
}
}其中 A.printCLass() 执行过程和实例无关。哪怕这个类没有任何实例产生,都可以正确的执行
而 A a = new A(); a.printI(); 这个执行过程,必须依赖于实例才可以理论上来讲,一般的非静态方法都可以写成静态方法,如上面代码中的 printI()和sPrintI(A a)这样对于2个方法,要打印A实例a的变脸i的值,可以执行 a.printI() 或者 A.sPrintI(a)
另外定义成static方法跟变量在多线程的时候,需要考虑好里面变量跟方法的同步问题。
不如每次都是新对象独立操作安全稳定。“我这里指的所有方法,主要可以针对于系统里的dao层”,dao层都是数据库相关的,如果对效率跟准确性要求很高,你写成静态的首先你不能保证方法多线程什么的考虑的很好,查询结果很安全跟稳定,另外效率不高这样,为了并发的安全都要加锁,但是这就限制了效率。所以除非有必要一般不要把方法写成静态的。
那么,是不是如果一个方法没有使用类属性,比如仅仅是做一个数据库的操作,是不是就可以写成静态的呢?如果把出现脏数据,那么,仅仅是select 语句的操作方法, 我写成静态的,OK吗?
1.static方法在多线程的时候,需要考虑同步问题。增加代码复杂度
2.“我这里指的所有方法,主要可以针对于系统里的dao层”,dao层都是数据库相关的,对效率跟准确性要求很高,你写成静态的多线程的时候就要考虑是否加锁才能保证数据安全跟正确,这样效率就会很差。
一般除非有必要,不要声明静态的方法跟变量。
另外也请你放心的是,NIO并非Java原创,它早就广泛应用于各种操作系统。
大并发系统基本上没有不采用非阻塞IO机制的。