黑马程序员 java _private static this关键字 main方法 单例设计模式

                           ------- android培训java培训、期待与您交流! ----------

 

 

1. private关键字

 

       private关键字:

             是一个权限修饰符。

             用于修饰成员(成员变量和成员函数)

             被私有化的成员只在本类中有效。

 

      常用之一:

 

           将成员变量私有化,对外提供对应的set get方法对其进行访问。提高对数据

           访问的安全性。

 

 

 

2. static关键字

 

       static表示静态,是一个修饰符,用于修饰累的成员(变量,方法)。当成员被static修饰后,

       成员除了 被对象调用外,还可以被类调用。

 

         格式为:类名.静态成员。

        黑马程序员 java _private static this关键字 main方法 单例设计模式

      要调用成员变量i时,不需要创建对象,可以通过类名直接调用:StaticTest.i。

 

    static的特点:

            a、随着类的加载而加载,随着类的消失而释放;

            b、优先于对象而存在;

            c、被所有对象共享;

            d、可以直接被类名调用;

 

 

    在类中普通成员变量可以被称为实例变量,静态修饰的成员变量称为类变量。

            类变量与实例变量的区别:

                     a、存放位置:类变量随着类的加载而存在方法区中;

                                       而实例变量时随着对象的建立而存在内存中。

                     b、生命周期:类变量生命周期最长,随着类的消失而消失;

                                       实例变量随着对象的消失而消失。

           另外static修饰的代码块即静态代码块也是随着类的加载而执行,只执行一次,

           用于给类进行初始化。静态方法不能访问非静态成员。

 

    静态有利有弊总结
             利处:对对象的共享数据进行单独空间的存储,节省空间。没有必要每一个对象中

                         都存储一份。
                         可以直接被类名调用。
             弊端:生命周期过长。
                         访问出现局限性。(静态虽好,只能访问静态。)

 

     使用注意

            静态方法只能访问静态成员

            静态方法中不可以写thissuper关键字

          主函数是静态的

   

 

 

3. this关键字

 

           特点:this代表其所在函数所属对象的引用。

           换言之:this代本类对象的引用。

 

           什么时候使用this关键字呢?

           当在函数内需要用到调用该函数的对象时,就用this

 

class Person
{
	private String name;
	private int age;
	Person(int age)
	{
		this.age = age;//将实参age的值赋予Person的成员age,this代表本类                                           //对象的引用,指向调用此构造方法的Person对象
	}
	Person(String name)
	{
		this.name = name;
	}
	Person(String name,int age)
	{
		this.name = name;
		this.age = age;
	}

	public void speak()
	{
		System.out.println("name="+this.name+"...age="+this.age);
		this.show();
	}
	public void show()
	{
		System.out.println(this.name);
	}

	/*
	需求:给人定义一个用于比较年龄是否相同的功能。也就是是否是同龄人。
	*/
	public boolean compare(Person p)
	{
		return this.age==p.age;

	}
}

 

 

 

4. main方法

 

          主函数:是一个特殊的函数。作为程序的入口,可以被jvm调用。

 

          主函数的定义:

                  public:代表着该函数访问权限是最大的。

                  static:代表主函数随着类的加载就已经存在了。

                  void:主函数没有具体的返回值。

                  main:不是关键字,但是是一个特殊的单词,可以被jvm识别。

               (String[] arr):函数的参数,参数类型是一个数组,该数组中的元素是字符串。

                                       字符串类型的数组。

         主函数是固定格式的:jvm识别。

 

         jvm在调用主函数时,传入的是new String[0];

class MainDemo 
{
	public static void main(String[] args)//new String[]
	{
		//打印0,说明jvm在调用主函数时,传入的是new String[0];
		
		System.out.println(args.length);
	}
}

 

       也可以自定义数组arr,然后出入main方法

class MainDemo 
{
	public static void main(String[] args)//new String[]
	{
		String[] arr = {"hah","hhe","heihei","xixi","hiahia"};
		//向MainTest的main方法中传入数组arr
		MainTest.main(arr);
	}
}

class MainTest
{
	public static void main(String[] args)
	{
		for(int x=0; x<args.length; x++)
			System.out.println(args[x]);
	}
}

 

         

5. 单例设计模式

            单例设计模式是static的一个扩展应用。

            设计模式:解决某一类问题最行之有效的方法。
            单例设计模式:解决一个类在内存只存在一个对象。

 

           想要保证对象唯一,必须执行下面三个步骤。

                   a,为了避免其他程序过多建立该类对象。先禁止其他程序建立该类对象
                   b,还为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象。
                   c,为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。

 

          这里介绍两个单例设计模式:饿汉式和懒汉式。

 

                  饿汉式

                  这个是先初始化对象。

                  Single类一进内存,就已经创建好了对象。

class Single
{
	private static Single s = new Single();
	private Single(){}
	public static Single getInstance()
	{
		return s;
	}
}

 
     

               懒汉式

               对象是方法被调用时,才初始化,也叫做对象的延时加载。
               Single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象。

class Single
{
	private static Single s = null;
	private Single(){}
	public static Single getInstance()
	{
		if(s==null)
		{
			synchronized(Single.class)
			{				
				if(s==null)
					s = new Single();
			}
		}
		return s;
	}
}

 在懒汉式中使用了同步锁,并且进行了双重判断,虽然能够保证线程安全,但是这样比较消耗资源,所以建议使用饿汉式。

   

 

 

 

                         ------- android培训java培训、期待与您交流! ----------