类既不可以是private也不可以是protected(内部类除外),所以它只有两种权限:包访问权限或public,如果不希望任何人访问,就把所有的构造器都指定为private,从而阻止任何人都创建对象。有了这一点,你会发现有趣的事情,那就是我们可以掌握创建对象的数量,考虑下面一段代码:
text2.java文件:
package cantellow.text2;
public class text2
{
final public static int maxNumber = 5;
private static int i;
private int text;
{
text = 10;
System.out.println("在执行构造器之前,首先进行非静态字段的初始化:text="+text+"!");
}
static
{
i = 0;
System.out.println("第一次访问此类,生成一个CALSS对象,初始化静态成员i!");
}
private text2()
{
System.out.println("执行构造器!");
}
public static text2 makeText2()
{
if (i < maxNumber)
{
i++;
return new text2();
}
else
{
return null;
}
}
public int getI()
{
return i;
}
}
interface Foo {
public int x=0;
public void setNumber(int x);
}
text1.java文件:
package cantellow.text1;
import cantellow.text2.*;
public class text1 {
/**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
while(true)
{
text2 otext2 = text2.makeText2();
if (otext2 == null)
{
System.out.println("text2的对象已经达到"+text2.maxNumber+"个了!");
break;
}
else
{
System.out.println("已创建text2对象:"+otext2.getI());
}
}
}
}
可以直接复制运行,运行结果:
第一次访问此类,生成一个CALSS对象,初始化静态成员i!
在执行构造器之前,首先进行非静态字段的初始化:text=10!
执行构造器!
已创建text2对象:1
在执行构造器之前,首先进行非静态字段的初始化:text=10!
执行构造器!
已创建text2对象:2
在执行构造器之前,首先进行非静态字段的初始化:text=10!
执行构造器!
已创建text2对象:3
在执行构造器之前,首先进行非静态字段的初始化:text=10!
执行构造器!
已创建text2对象:4
在执行构造器之前,首先进行非静态字段的初始化:text=10!
执行构造器!
已创建text2对象:5
text2的对象已经达到5个了!
看到没,我们想让它生成几个对象就生成了几个对象,因为创建text2对象只有一种途径,那就是调用makeText2()方法,而我们在调用这个方法创建text2对象之前还做了额外的工作,那就是判断已经创建text2对象的数量是否已经达到一定的数量,如果条件成立就继续创建,否则就返回null。
我们还可以只创建一个对象,考虑下面代码:
class Soup
{
private Soup(){}
private static Soup ps1 = new Soup();
public static Soup access()
{
return ps1;
}
}
当我们访问Soup的静态方法Soup.access()时:Soup pri3 = Soup.access();Soup类就开始被加载,加载之后就开始初始化静态字段:private static Soup ps1 = new Soup();在这个过程中,并没有创建Soup对象,它只是返回了一个静态的对象ps1,而在这之后,无论用什么方法都不可能再创建另外一个Soup类对象,除非修改底层代码。
分享到:
相关推荐
手动编写每个实体类不仅耗时,而且容易出错,尤其是在字段数量庞大的情况下。为了解决这一问题,开发者们经常使用代码生成工具,如本案例中的"在.net项目中的实体类生成器"。这个工具能够自动化创建带注释的实体类,...
在VB.NET编程环境中,Guid(全局唯一标识符)是一种用于创建独特标识的128位数值,常用于数据库记录、对象实例或者网络通信中的唯一识别。Guid生成器是专门用于生成这种唯一标识的工具。本项目提供的“VB.NET Guid...
生成的实体类通常包含字段属性,与数据库表中的列一一对应,同时还可能包含一些基本的getter和setter方法,方便进行对象的操作和数据的存取。 C#和Java作为两种广泛使用的编程语言,它们的实体类生成是该工具的重点...
5. **数据长度**:用户可以决定生成的正弦波数据序列的长度,这可能是固定数量的样本点或持续一定的时间。 6. **输出格式**:生成的正弦波数据可以导出为不同的文件格式,如CSV、MAT或二进制文件,以便于在其他软件...
这样可以限制栈对象的生成,同时也允许使用new来产生堆对象。 例如: ```cpp class NoStackObject{ protected: ~NoStackObject(){}; public: void destroy(){ delete this; } }; ``` 在上面的代码中,将析构函数...
3. **优化性能**:通过限制生成数量,减少服务器的计算负担,从而提高游戏的运行效率。 4. **动态调整**:可能允许开发者或游戏管理员动态地调整生成器的生成限制,根据服务器负载或游戏活动进行优化。 5. **事件...
"没有数量限制"的描述表明,无论处理多少个PDF文件,这个解决方案都能有效运作,且不受文件数量约束。"亲测可用"则证实了这个方法已经被验证过,可以成功地在实际操作中应用。 关于"Spire.pdf",这可能是指由E-...
这通常涉及到选择一个字符集(如ASCII或Unicode中的字母、数字),然后使用随机数生成器从中选取一定数量的字符。例如,一个常见的4位数字验证码可能从0000到9999之间随机选择。 2. **图像创建**:验证码的可视化...
类的设计要考虑其实例化后对象的数量、类的属性和方法,以及对象间的交互方式。 总之,面向对象编程提供了一种模型化的编程方式,使程序更接近现实世界的逻辑,提高了代码的可读性和可维护性。在PHP中,尽管不是纯...
在实际项目中,你可能还需要考虑更多因素,如道具生成的数量限制、碰撞检测、动画控制等。此外,还可以扩展这个脚本,添加更多的逻辑,比如根据玩家行为动态调整生成频率,或者实现道具的随机属性。 111.html文件...
同时,可能会有特定的条件来限制骨料的重叠,比如通过检查每个新生成的骨料与其他骨料之间的距离。 7. **数据存储和读取**:如果需要保存骨料的属性(如位置、大小等)以便后续分析,可以使用MATLAB的数据存储函数...
例如,可以设置不同难度级别的试题权重,再根据权重和数量限制进行随机抽取,确保试卷的难度适中且分布均匀。 5. 试卷模板设计 Delphi提供了丰富的控件,如Label、Memo、RadioGroup等,可以方便地创建出各种类型的...
例如,在C++中,我们可以使用`fseek`和`fwrite`函数定位并写入数据,Python中则可以使用`io`模块的`BytesIO`对象配合`random`模块生成随机字节流。 再者,“随机内容”则更为复杂。内容可以是纯文本、二进制数据...
•静态内部类的对象寄存在外部类里,非静态内部类的对象寄存在外部类实例里 使用内部类 •1.在外部类内部使用内部类-不要在外部类的静态成员中使用非静态内部类,因为静态成员不能访问非静态成 员。 ...
- 考虑到文件大小限制,如果图片数量过多或尺寸过大,可能会导致生成的GIF文件过于庞大,影响用户体验。 综上所述,Gif.js 提供了一个强大且灵活的前端解决方案,用于在浏览器环境中生成动态GIF,结合Ajax技术,还...
- 二维码的内容有限制,根据错误纠正级别不同,最大字符数量会有所变化。 - 二维码的尺寸应适中,过大或过小都可能导致识别困难。 - 错误纠正级别对二维码的容错能力有很大影响,L级别提供最高错误修复能力,但...
【标题】"试题自动生成系统(vb类)"是一个基于Visual Basic(VB)开发的应用程序,主要用于自动化创建考试试卷。这种系统通常包含了多种功能,旨在提高教育工作者或培训机构准备考试材料的效率。VB是一种面向对象的...
v-for指令基于一个数组生成对应数量的DOM结构,这意味着可以预先设置一个基本的表单模板,然后通过数组来控制模板的复制次数,最终实现动态添加表单的需求。 知识点四:表单验证方法 在Vue.js中,Element UI支持了...
在实践中,应考虑对象间的协同工作,例如,使用Session和Application对象管理用户状态,结合Request和Response对象实现动态网页生成。同时,理解各种对象的生命周期和局限性,也是优化代码和提升应用性能的关键。