java静态工厂方法求解惑

看书上说,静态工厂方法不必在每次调用它们的时候都创建一个新对象,这个该怎么证明。

比如

public class User(){
private User(){};

public User getUser(){
    return new User();
}

}

public class test(){
public static void main(String[] args){
User u1 = User.getUser();
User u2 = User.getUser();
}
}

不知道上面main方法里创建的两个对象和直接new出来有什么不同·····刚学习java不久···有什么错误请帮纠正一下

2个回答

User类似乎应该是这样写的:

 class User{
    private User user=null;
    private User(){
    }
    public User getUser(){
        if(user==null){
            user = new User();
            return user;
        }
        return user;
    }
}

这样的话u1和u2得到的就是同一个对象,不过这样来看的话这貌似是单例模式啊

qq7294408
qq7294408 额····我是看effective java里面介绍的,不知道里面说的不用每次都创建新对象是什么意思
2 年多之前 回复
你给的代码不是你说的场景,从代码来看,的确是每次都新建对象的。
qq7294408
qq7294408 额····我是看effective java里面介绍的,不知道里面说的不用每次都创建新对象是什么意思,可以详细解释一下不
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java静态工厂方法
1.静态工厂是什么? 静态工厂说白了其实就是一个静态函数,函数中包括了此类的实例化对象,以及对对像的值进行初始化。下面就是最简单的静态工厂 class Student{ private int age = 10; private String name = “王五”; public static Student newStudent(int age, String name...
JAVA 静态工厂方法
静态工厂方法是一个类产生一个该类实例的静态方法,用于补充或取代类的构造器。 静态工厂方法的作用主要是产生一个自身或者子类的实例,从而完善自身的功能和描述。
求解惑求解惑
[code=c]rn#include rnusing namespace std;rnrnclass Arrayrnrn int num;rn int *p;rnpublic:rn void init() //初始化rn rn cout<<"请输入数组元素个数"<>num;rn p=new int[num];rn cout<>data;rn p[i]=data;rn rn sort(p,num);rn delete []p;rn rnrn void sort(int a[],int num)rn rn int index=num;rn bool flag=true;rn while(flag)rn rn flag=false;rn for(int i=1;ia[i])rn rn [color=#FF0000] swap(a[i-1],a[i]);[/color]rn flag=true;rn rn rn rn index--;rn rn for(int j=0;jb)rn rn temp=a;rn a=b;rn b=temp;rn rn rnrn;rnrnint main()rnrn Array *p=new Array;rn p->init();rn rn delete p;rn return 0;rnrn[/code]rn红色部分,调用swap的时候,通过单步调试,知道在swap内部a,b的值是交换了的。但是调用完之后,数组内的值并未发生交换,为何?如果一定要通过调用swap的方式,该如何修改?(不要说把swap内部代码直接写到for循环内部)。多谢!
java cas求解惑
最近接触到一个cas单点登录的项目,在网上查看了很多资料,总是感觉自己没有理解。所以跑过来请教下。rn疑问1:CAS必须要单独的配置一个服务器(tomcat)吗?如果放子系统中的某个集成可以吗?比如说一个登陆页进去后是A、B、C、D四个。然后我要单独配置一个CAS服务器,还是可以在其中一个导入cas-server.jar之类的,web.xml配置之后就可以当做认证服务器呢?rnrn疑问2:在认证服务器登录成功后,跳转回原来的action或者url-pattern,还需要登录吗?是怎么跳过验证的?rnrn疑问3:所有的子系统都需要做什么改动来配合?rnrn感谢各位大大来解答~
java 新手求解惑
我总觉得代码怪怪的,但是不知道问题在哪。有没有大神帮忙解惑,感激不尽!给成员变量A赋值,但是一直为null是为什么?rn[code=java]rnpublic class Aa rn private String a;//成员a是存放在堆内存的rn private void getData2()rn String b=getData();rn rn private String getData()rn new Thread(new Runnable() rn @Overridern public void run() rn a = "1";rn rn ).start();rn return a;//nullrn rnrnrn[/code]
JAVA菜鸟求解惑
先看代码:rnclass Personrnrn public String name;rn public int age;rn public Person(String name,int age)rn rn this.name =name ;rn this.age=age;rn rn public Person()rn rn rn public void getInfo()rn rn System.out.println(name);rn System.out.println(age);rn rnrnclass Student extends Personrnrn public void study()rn rn System.out.println("Studding");rn rn public static void main(String [] args)rn rn Person p= new Person();rn p.name ="小明";rn p.age=21;rn p.getInfo();rnrn Student s= new Student();rn s.name ="小李";rn s.age=21;rn s.getInfo();rn s.study();rn rnrnrn当我把父类的无参构造器 public Person() 注释掉,然后把子类的new Person()改成new Person("小明",21)后,编译器给出的错误是 无法将类Person中的构造器Person应用到给定类型。。。。求解惑rn
java小问题,求解惑
[code=java]rnpackage test_03;rnrnpublic class StringTest rnrn public static void main(String[] args) rn String s1="abc";rn String s2=s1;rn System.out.println(s1==s2);rn s1+="d";rn System.out.println(s1==s2);rn StringBuffer sb1=new StringBuffer("abc");rn StringBuffer sb2=sb1;rn System.out.println(sb1==sb2);rn sb1.append("d");rn System.out.println(sb1==sb2);rn rnrnrn[/code]rn以上代码的输出结果是rntruernfalserntruerntruern第二个false和最后一个true是为什么啊?
静态工厂方法
它只是一个简单的静态方法,返回类的一个实例. 1. 与构造函数不同,静态工厂方法具有名字.选用适当名字的静态工厂方法可以使一个类更易于使用,并且相应的客户代码更易于阅读. 2. 与构造函数不同,不要求非得创建一个新的对象.这使得一些非可变类可以使用一个预先构造好的实例,或者把已经构造好的实例缓冲起来.同时,静态工厂方法可以为重复的调用返回同一个对象,这也可以被用来控制&quot;在某一时刻哪些实...
静态工厂方法
静态工厂方法讲解 (1)构造方法的名字必须与类名相同。缺点是不能从名字上区分每个重载方法, 静态工厂方法的方法名可以是任意的,例如 getFemale()和getMale()。 (2)每次执行new语句时,不必每次都返回一个新对象 (3)new语句只能创建当前类的实例,而静态工厂方法可以返回当前类的子类的实例,这一特性可以在创建松耦合的系统接口时...
Java中静态工厂方法命名规则
静态工厂方法常见的命名方式: valueOf——不太严格的讲,该方法返回的实例与它的参数具有相同的值。这样的静态工厂方法实际上是类型转换方法。 of——valueOf的一种更为简洁的替代,在EnumSet中使用并流行起来。 getInstance——返回的实例是通过方法的参数来描述的,但是不能够说与参数具有同样的值。对Singleton来说,该方法没有参数,并返回唯一的实例。 newInsta...
Effective Java学习:静态工厂方法
最近在啃《Effective Java》这本神书。简单记录一下,方便以后温习。 静态工厂方法 静态工厂方法是什么?直接从字面应该就很好理解: 工厂方法:大家应该都知道,就是构建实例的方法呗。(比如:“江南皮革厂”就是创建“皮包”这个对象的工厂) 静态方法:这还有解释的必要么....... 合起来就是静态的构建对象的方法呗。。哦了,这就是静态工厂方法。本文到此结束,感谢大家观看! 哈哈,...
Java静态工厂方法与工厂模式
静态工厂方法和工厂模式很像,但是在java中还是有很大区别的。 (一)静态工厂方法vs工厂模式 对于一个类来说,为了让客户端获得一个自身的实例,最常用的方法就是提供一个公有的构造器。除了这种使用构造器的方法之外,对于单个类来说,我们可以定义静态工厂方法来获取自身的类的一个实例。静态工厂方法和工厂模式的不同也体现在此,静态工厂方法是获取这个类自身的一个实例,他的存在是为了更好的描述和处理这个类。...
Java 静态工厂方法详解
Java 静态工厂方法详解 本文章主要是对《Effective Java》对静态工厂方法的理解 第一次使用静态工厂方法是在HIT《Software Construction》课程的Lab2-P1的Graph.java中,对静态工厂方法的理解也相当有限,因此撰写此博客加深对静态工厂方法的理解。 Java 静态工厂方法在实际开发中经常使用,在《Effective Java》中第二章第一条即为:考虑...
一个java问题,求解惑
public class Arraytestrnrn public static void main( String[] args)rn rn String[] str1 = new String[3];rn str1[0] = new String("tian");rn str1[1] = new String("kong");rn str1[2] = new String("nan");rnrn String[] str2 = new String[3];rn System.arraycopy( str1, 0, str2, 0, str1.length); rn rn str2[2] = "fengyun"; //这一行rn System.out.println(str1[2]);rn System.out.println(str2[2]); rn rnrnrn刚学java, 学到了数组rn这个程序我是这样理解的, 见图rnrnrnrn[img]http://dl.iteye.com/upload/attachment/0084/0039/233bb34b-ced1-32f8-8756-0f42b8cd5187.png[/img]rnrnrn那么我觉得复制了之后str1[2]和str2[2]应该指向同一个位子nan那里呀,rn为什么改变了 str2[2]的值,str1[1]的值没有变呢 ,求帮忙解解惑,
java Nio 求大神解惑
给出一部分代码rn[code=Java][/code]rn ser = new ServerSocket(Integer.parseInt(port.getText()));rn while (true)rn System.out.println("服务器运行成功");rn soc = ser.accept(); rn Thread thread=new Thread(new EchoProtocal(soc));rn thread.start();rn rnrn这段代码是些 网络编程中服务器端 循环等待服务器端连接。rnrn 这句 soc=ser.accept();方法在没有客户机连接的时候线程会阻塞等待 ,有客户端连接后该线程被唤醒。rnrn下面 我想问一下关于 nio中非阻塞模型的问题,下面这段话来自一篇博客rnrn阻塞式网络 IO 的特点:多线程处理多个连接。每个线程拥有自己的栈空间并且占用一些 CPU 时间。每个线程遇到外部为准备好的时候,都会阻塞掉。阻塞的结果就是会带来大量的进程上下文切换。且大部分进程上下文切换可能是无意义的。比如假设一个线程监听一个端口,一天只会有几次请求进来,但是该 cpu 不得不为该线程不断做上下文切换尝试,大部分的切换以阻塞告终。 rnrnrn最后一句,比如假设一个线程监听一个端口,一天只会有几次请求进来,但是该 cpu 不得不为该线程不断做上下文切换尝试,大部分的切换以阻塞告终。 这句话 我有疑问,就是 阻塞的线程 ,cpu并不会对其进行上下文切换尝试,因为线程处于阻塞队列中,CPU 并不会尝试给阻塞队列中的线程分配运行时间。我理解错了???可是操作系统里这么学的啊。 如果我说的对 那非阻塞的提速主要反映在哪些方面?rnrn100分求助,答好了都是你的rnrn
Java方向跳槽求解惑。
本人自知能力有限,现在待遇也可以,但是感觉没技术上没发展前景,想跳槽到北京从事电子商务方面的开发工作,比如阿里、京东、去哪儿等等。rn从事Java3年,你说会什么吧,还真谈不上会什么。rn1、Java基础知识自认为还是比一般开发好这么一点rn2、对web开发的理解,和基本的Java框架使用基本没什么问题rn3、网络编程、多线程编程看看也是可以搞的,只是这方面的书看过一些。rn好像也没懂什么了,这也许就是三年“鸡肋”的知识吧,现在工作很是瓶颈,开发任务比较少,闲的发慌,有开发任务也学不到东西,人生就怕遇到瓶颈,狠下心,决定跳槽,去北京。父母都不怎么同意,哎,人生总不想禁锢。如今年岁以不小,再不行动,恐后悔莫急。人生总是要搏一搏,即便好坏难料。没有希望的日子,总比追求希望显得太过于平淡。rnCSDN的兄弟们,北京的阿里、京东、去哪儿(其他电商也可)像一般的Java开发人员3年经验的工资能给多少呢? 能力也就上面的东东了。打击也是前行的动力。rn备注:估计进阿里比较困难了,哎,这个不怕,努力总有回报。rn朋友们,给点其他工作思路也是可以的。 感激不尽。
JAVA中nextLine()求解惑
如下程序:rnimport java.util.*;rnrnpublic class TestInput1rnrn public static void main(String[] args)rn rn Scanner in = new Scanner(System.in);rnrn System.out.print("How much money will you contribute every year? ");rn double payment = in.nextDouble();rn rnrn System.out.print("Interest rate in %: ");rn double interestRate = in.nextDouble();rn rnrn double balance = 0;rn int year = 0;rn rn String input;rnrn // update account balance while user isn't ready to retirern dorn rn // add this year's payment and interestrn balance += payment;rn double interest = balance * interestRate / 100;rn balance += interest;rnrn year++;rnrn // print current balancern System.out.printf("After year %d, your balance is %,.2f%n", year, balance);rnrn // ask if ready to retire and get inputrn System.out.print("Ready to retire? (Y/N) ");rn input = in.nextLine();rn rn while (input.equalsIgnoreCase("N") || (input.length()==0));rn rnrn运行后,为什么在第一个Ready to retire? (Y/N) 之后紧接着的是After year 2, your balance is 146,363.00,而不是空格呢?rnHow much money will you contribute every year? 70000rnInterest rate in %: 3rnAfter year 1, your balance is 72,100.00rnReady to retire? (Y/N) After year 2, your balance is 146,363.00rnReady to retire? (Y/N)rn
java静态工厂方法与工厂模式
静态工厂方法和工厂模式很像,但是在java中还是有很大区别的。(一)静态工厂方法vs工厂模式对于一个类来说,为了让客户端获得一个自身的实例,最常用的方法就是提供一个公有的构造器。除了这种使用构造器的方法之外,对于单个类来说,我们可以定义静态工厂方法来获取自身的类的一个实例。静态工厂方法和工厂模式的不同也体现在此,静态工厂方法是获取这个类自身的一个实例,他的存在是为了更好的描述和处理这个类。而工厂模式
java正则疑问求解惑
1.^[a-z0-9_-]3,15$rn 在网上看到说^是行开始,$是行结尾。请问^和$在这里都有什么作用了?不写的话貌似也没问题啊。rnrn2. (?=.*[a-z])rn 必须包含一个小写字符。---怎么会有这种写法了。怎么看出这个正则所要表达的意思了?rnrn3.(?i)]+)>(.+?)rn 资料上说(?i)表示所有的检查区分大小写。但我也看过说(?i)是不区分大小写的,到底哪个正确了?rnrn4.<.+?>rn 匹配html标签。+后面跟个?是什么意思了?rnrn5. (.+?) rn 匹配所有.这里匹配所有是什么意思了?java正则里还有那些代表特种意思的东西了?rnrn6. confirm\\((['\"])([^'\"]+)\\1\\)rn ([^'\"]+)是什么意思?为什么要分为两个组了?\\1反向引用。看不懂,什么事反向引用,有什么用了?类似\\1这样的还有些什么了?rnrn本人刚学java正则,基础的懂了一点,可看别人的正则表达式就是看不懂,求高手帮忙指教,谢谢了。rn
求解惑:java方向选择
打算以后从事java的工作了,但是接触之后发现有点混乱。java的分支太混乱了,具体到工作中还是很乱。rn想问下java主要的就业方向。我知道j2se,j2ee,j2me。但是总感觉太空了。说白了 java就是做网站,手机开发?rn做网站这个方向也太大,我看到的很多都是java前端开发。jsp,Structs,spring,hibernate这些在工作中具体是属于那个方向呢。java的后台开发是指啥。rn针对java不同的就业方向,学习的路线是啥 那位高手给来个透彻的讲解呀!!不甚感激。
求解惑
As a rule, use the prototype scope for all state-full beans and the singleton scope for stateless beans.
求解惑??
情况是这样子的,接收客户上传过来的txt文件,把里面的内容读取出来,格式如下:rnrnH 204 REMA SOUTH SAM FISHER 1,000.00 测试rnL U-00001978 促销返利 状元古法汤圆 1,000.00rnL U-00001978 促销返利 状元古法汤圆 1,000.00rnL U-00001978 促销返利 状元古法汤圆 1,000.00rnL U-00001978 促销返利 状元古法汤圆 1,000.00rnL U-00001978 促销返利 状元古法汤圆 1,000.00rnrn首先读取出来每一行的头(没有出现乱码),但出现一个诡异的问题:当把txt文件的字符集修改为UTF-8时上传rnheader.equals("H")居然为false,但header.equals("L")为true,保存为其他字符集没有出现这个问题。rn跪求高人解惑......
求解惑》》》》》》》》》》》》》》》》》》》》。
我大二那年开始接触嵌入式,那是流行linux,学了一年,刚刚入们,现在又开始流行安卓了,求后路
求解惑!!!!
1. 请问SQLServer 2008里面的MSSQLServer引擎和SQLServer引擎可以同时启动吗?? rnrn 昨天遇到一变态错误,不知道什么原因,请看如下代码:rnpackage com.servlet;rnimport javax.servlet.http.*;rnimport java.io.*;rnimport java.sql.*;rnimport java.util.*;rnpublic class LoginCl extends HttpServlet rn public void doGet(HttpServletRequest req,HttpServletResponse res)rn rn Connection conn=null;rn Statement stm=null;rn ResultSet rs=null;rn try rn //------加载JDBC-ODBC驱动------rn //Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");rn Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");rn //------得到连接对象------rn //String connStr="jdbc:odbc:test";rn String connStr="jdbc:sqlserver://localhost:1433;DatabaseName=test1";rn conn=DriverManager.getConnection(connStr,"sa","08062129");rn rn //接受用户名和密码rn String user=req.getParameter("username");rn String pwd=req.getParameter("passwd");rn rn //创建statementrn stm=conn.createStatement();rn rs=stm.executeQuery("select top 1 passwd from tb_users where username='"+user+"'");rn rn //说明用户是存在的rn if(rs.next())rn String dbPasswd=rs.getString(1);rn System.out.print(dbPasswd); //得到的值是adminrn System.out.print(pwd);//得到的值是adminrn boolean b=dbPasswd.equals(pwd);rn System.out.print(b);//得到的却是falsernrn//这段代码的变态就是我必须写 " !dbPasswd.equals(pwd) " 才会运行得到正常的结果,不知道是不是SQLServer 2008的原因??? 求解惑!rn if(dbPasswd.equals(pwd)) rn //将验证成功的信息写入session,并得到sessionrn HttpSession hs=req.getSession(true);rn //修改session存在的时间rn hs.setMaxInactiveInterval(20);rn hs.setAttribute("pass","ok");rn res.sendRedirect("welcome?uname="+user+"&passwd="+pwd);rn elsern res.sendRedirect("login");rn rn rn rn rn catch (Exception ex) rn ex.printStackTrace();rn finallyrn try rn if(rs!=null)rn rs.close(); rn rn if(stm!=null)rn stm.close(); rn rn if(conn!=null)rn conn.close(); rn rn rn catch (Exception ex) rn ex.printStackTrace();rn rn rn rn rn public void doPost(HttpServletRequest req,HttpServletResponse res)rn this.doGet(req,res);rn rnrn
求解惑..
小弟自学js中,下面这个书上的跑马灯效果实在不理解rn请问第二个循环中的rnfor(c=0;crnrnrn rn 跑马灯效果rn rnrnrnrnrnrn
求解惑?
rn rn rn rn rn为什么我不调用document.getElementById()方法得到对象的引用,用id直接调用也可以rn两者之间有什么区别呢?
求解惑!!
各位大侠好,我想问个问题,如果我用BCB来启动telnet,并由程序自动输入用户名和密码,怎么弄呢?启动telnet后黑屏窗口要一直存在,我要看telnet窗口里的数据。。。用system或createprocess启动telnet后就不能再操作BCB的主界面了,用shellexecute启动后可以操作BCB主界面,但不知道如何输入用户名和密码。。。求解惑。。谢谢!
求解惑!!!
代码如下:rn String j_user_name,j_user_passrn Long is_numrn j_user_name=sle_1.textrn j_user_pass=sle_2.textrn if j_user_name='' thenrn MessageBox("提示","用户名为空,请重新输入!")rn sle_2.SetFocus()rn returnrn end ifrn SELECT count(*) rnINTO :is_numrn FROM usersrn WHERE User_Name= :j_user_name and User_Pass= :j_user_pass using sqlca;rn if is_num>0 then rn open(w_main)rn close(parent)rn elsern messageBox("口令有误","请重新输入!")rn end ifrn 问题是,连接数据库成功,在界面里输入数据表里的用户名和密码时总是“口令有误”,“请重新输入”。但是如果用户名和密码都为空(不填,直接确定)时却打开了主窗口,关闭了登录窗口。。。。为什么啊??? 小弟是新手,望各位指教啊,不胜感激!!!
求解惑!
#include "stdio.h"rnvoid main()rnrndouble a,b; //*这里定义double,运行后显示错误结果,如果定义float,则结果正常*//rnscanf("%f",&a);rnb=a*0.01;rnprintf("%f\n",b);rnrnrn疑问如上,double和float不是都可以用%f吗,为什么定义double就不显示正确结果,定义float就正常呢?搞不懂!rn我用的是turbo C3.0
郁闷求,求解惑
起泡法按小到大排序,郁闷,如果a[10]在定义的时候直接赋初值,那么可以输出正确的结果,如果用scanf输入进去的话,结果就是输出一堆负值!搞不懂,求解惑rnrn#include "stdio.h"rnrnvoid main()rnrn int a[10],i,j,t; //如果a[10]在这里赋初值,并且删掉以下4句代码,正常运行rnprintf("输入10个数字:\n");rnfor(i=0;i<10;i++);rnscanf("%d",&a[i]); //rnprintf("\n");rnfor(j=0;j<9;j++)rn for(i=0;i<9-j;i++)rn if(a[i]>a[i+1])rn rn t=a[i];rn a[i]=a[i+1];rn a[i+1]=t;rn rnfor(i=0;i<10;i++)rnprintf("%d",a[i]);rnprintf("\n");rn
java 解惑
NULL 博文链接:https://goyourauntie.iteye.com/blog/1179204
Java 解惑
见解Java 中的一些陷阱的好资料
Effective Java 学习笔记《一》 静态工厂方法
Effective Java 学习笔记《一》 静态工厂方法感觉之前从来没有听说过静态工厂方法,书上夸它各种好,不明觉厉,就找了些资料学习一下。 参考了书和http://www.xuebuyuan.com/1913991.html静态工厂方法是做什么的利用new语句调用类的构造方法可以实例化一个对象,但是每new一次都会占用java虚拟机中堆的内存。静态工厂方法是实例化的另一种方式,有自己的一些优点
Effective Java:【1】 使用静态工厂方法
这是 Effective Java 的第一节的标题。本文更多的是摘译该节的内容。 什么是静态工厂方法(static factory methods) static factory methods 翻译过来就是静态工厂方法。它并不是 GOF 提的设计模式中的一个设计模式。我们看下面的例子(摘自JDK 1.7)。 publicfinalclassBooleanimplements java.i...
Java PUZZLE Java 解惑
Java PUZZLE Java 解惑 Java PUZZLE Java 解惑 Java PUZZLE Java 解惑Java PUZZLE Java 解惑 Java PUZZLE Java 解惑 Java PUZZLE Java 解惑
相关热词 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图 c# 验证码图片生成类 c# 再次尝试 连接失败 c#开发编写规范 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数