重新认识Java(7)————面向对象(2)(构造方法,static关键字,单例设计模式)

构造方法:

         是一个特殊的方法。

         普通方法格式:

                   修饰符   返回值类型   方法名(参数列表){

                            执行语句;

                            return  返回值;

}

         构造方法格式:

                   修饰符   类名(参数列表){

                            执行语句;

}

构造方法支持方法重载

 普通方法需要调用,才会执行

 构造方法创建对象时自动调用,且仅调用一次

 

如果类中没有定义构造器,那么系统会提供一个构造器

                   public  类名(){},以便能成功建立对象。

如果类中提供了构造器,那么系统不再提供。

特别注意,假如类中一旦提供了无论什么参数类型的构造器,系统都不会提供

class Person{
	private String name;
	private  int age;
	
	public Person(){
//		this("aa",19);
	}
	
	public Person(int a){
		this();
		age = a;
	}
	
	public Person(String n,int a){
		this(a); //调用构造器
		name = n;
//		age = 20;
	}
	
	//set/get方法
	
	public void show(){
		System.out.println(name+"...."+age);
	}

 

构造方法的主要作用是用于给对象的属性进行初始化。
 

Person   p  =  new Person(“张三”,20);实例化过程:

  1. 在堆中开辟空间,并分配内存地址值
  2. 将对象的属性存储到该空间,并赋予默认值
  3. 找到对应的构造方法,并进栈执行
  4. 将“张三”,20两个数据值存储到堆中的那个空间里,构造方法执行完毕,出栈;

对象建立完毕。

     5.将堆中空间引用地址值赋值给p引用。

 

 

注意:

  1. 如果构造方法用private修饰,那么只能在本类中创建对象,外部其他不可以创建
  2. 构造方法可以调用其他普通方法
  3. 普通方法不能调用构造方法

构造方法间的调用:

         this关键字用法:

  1. 可以调用重载构造器

             this(参数列表),必须放在构造器的第一行。

            但是不能交叉使用,就是不能循环使用,向下面这样。

 

class Person{
	private String name;
	private  int age;
	
	public Person(){
		this("aa",19);
	}
	
	public Person(int a){
		this();
		age = a;
	}
	
	public Person(String n,int a){
		this(a); //调用构造器
		name = n;
//		age = 20;
	}

 

     2.解决局部位置和成员位置变量名重名问题           

         谁调用this所在的方法,那么该this就代表谁

static关键字

静态的意思,成员修饰符,用于类中的成员。

一。静态方法(类方法):

所以,如果不用创建对象,就能直接调用方法,这样就不会出现空间浪费了。

当加载一个class文件到内存时,首先会在内存中查找是否有该文件,如果有直接用;如没有到硬盘中找该文件,再加载。将静态成员存放到方法区的静态区域,将非静态成员存放到非静态区域。 比如:构造方法就存放到非静态区域。

注意:

  1. 静态方法不能访问非静态成员(方法或者是变量)。
  2. 非静态方法可以访问静态方法(静态成员)也可以访问非静态方法。
  3. 静态方法中不能出现this或者super关键字

静态成员变量(类变量):

         是被所有对象所共享,一旦被修改,对其他对象都有影响。

         有两种访问方式:类名.静态变量名(推荐); 对象名.静态变量名;

静态成员是随着类的加载而加载,随着类的消失而消失----声明周期长。

如果变量存的值是共享数据建议用static修饰;

如果是工具类,建议类中的方法用static修饰,例如Arrays,Collections,Matchs(一般喜欢结尾加个s)…

 

设计模式:

         对通用问题的解决方案。一共有23种。

 

单例设计模式:

         目的:保证对象在内存中的唯一性。

         步骤:

  1. 私有化构造器
  2. 创建本类实例对象
  3. 提供公共访问,用于返回本类实例对象
    class Single{
    	//饿汉式单例设计模式
    	/*int sum;
    	private static Single s = new Single();
    	private Single(){
    		
    	}
    	public static Single getInstance(){
    		return s ; 
    	}*/
    	
    	
    	//懒汉式单例设计模式
    	int sum ; 
    	private static Single s = null;
    	private Single(){
    		
    	}
    	public static Single getInstance() {
    		if(s== null)
    			s = new Single();
    		return s ;
    	}
    	
    	
    }
    

    单例设计模式分为:饿汉式 和 懒汉式

饿汉式:

                    弊端:类加载时在堆中开辟了空间,该类如果不需要使用对象,就会造成浪费。

懒汉式(对象延时加载):什么时候用对象,什么时候才在堆中开辟空间。
                                           弊端:多线程访问时,存在安全问题。

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值