单例设计模式
实现思路——没有办法调用构造器创建对象,创建对象在类里面创建(new)了,也在里边的方法中返回了对象实体。所以类中的方法必须是public的。
饿汉式——立即加载,随着类的加载,当前的唯一就创建了。线程安全,写法简单,更快更方便。但是内存占用时间较长
public class Main {
public static void main(String[] args) {
bank b1=bank.getB1();
bank b2=bank.getB1();
System.out.println(b1==b2);
}
}
class bank{
private bank()
{}
private static bank bank1 =new bank();
public static bank getB1()
{//方法谁来调用,方法要对象来调,对象要在类内中获取,类外没有办法new对象,返回值必须为对象
return bank1;
}
}
懒汉式——延迟加载,在需要时使用创建。线程不安全,占用内存时间较短,节省空间。
public class WFriend {
public static void main(String args[])
{
Friend F1=Friend.getInstance();
Friend F2=Friend.getInstance();
System.out.println(F1==F2);
}
}
class Friend {
private Friend() {
}
private static Friend instance = null;
public static Friend getInstance() {
if (instance == null) {
instance = new Friend();
return instance;
}
return instance;
}
}
对main的理解
public class Main {
public static void main(String[] args) {//程序的入口
String[] arr=new String[]{"aa","bb","cc"};
test.main(arr); //打印aa,bb,cc
}
}
class test {
public static void main(String[] args) {
System.out.println("Main的main()的调用");
for (int i=0;i<args.length;i++)
{
System.out.println(args[i]);
}
}
}
public class Main {
public static void main(String[] args) {//程序的入口
String[] arr=new String[]{"aa","bb","cc"};
Main.main(arr); //栈溢出——Exception in thread "main" java.lang.StackOverflowError
}
}
class test {
public static void main(String[] args) {
System.out.println("Main的main()的调用");
for (int i=0;i<args.length;i++)
{
System.out.println(args[i]);
}
}
}
main的剖析 方法一:普通的静态方法
代码块
类中属性赋值及其位置
构造器初始化是最严格最推荐的,最后把关。代码块和显示都是过一遍而已
public class Main {
public static void main(String[] args) {
Order o1=new Order();
System.out.println(o1.orderid); //3
//System.out.println(o1.a);a没有办法访问,出了代码块就出栈了
}
}
class Order
{
public Order()
{
super();
orderid=3;
}
{
int a=10;
orderid=2;
}
int orderid =1;
}
关于字节码文件中的的简单说明。由父及子,静态先行 (通过插件jclasslib bytecode viewer查看字节码) 方法在字节码文件中可以看到。每个方法都对应着一个类的构造器(声明了几个构造器就会有多少个init)
代码块先于构造器