`
airfly2013
  • 浏览: 18579 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

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

 
阅读更多

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

 

 

1. private关键字

 

       private关键字:

             是一个权限修饰符。

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

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

 

      常用之一:

 

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

           访问的安全性。

 

 

 

2. static关键字

 

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

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

 

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

        

      要调用成员变量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培训、期待与您交流! ----------

分享到:
评论

相关推荐

    Javaw基础课程笔记.zip

    day06、Java 面向对象_类和对象_private关键字_this关键字。 day07、Java API概述_Scanner 概述和使用_Random使用_ArrayList集合用法。 day08:Java 字符串的基本操作_静态static关键字 day09:Java 类的继承_...

    java 设计模式 单例模式

    //单例模式,始终只产生一个对象 /*public class SingleTest { public static void main(String[] args) { SingleTon singleTon1=SingleTon.getInstance(); SingleTon singleTon2=SingleTon.getInstance(); ...

    浅谈java单例设计模式

    所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。 如果我们要让类在一个虚拟机中只能产生一个对象: 将类的构造器的访问...

    JAVA面向对象基础学习资料

    JAVA面向对象的基础学习资料,包括了以下学习内容和代码注释: 01_成员变量和局部变量的区别 ...05_this关键字 06_构造方法 07_成员方法 08_创建对象做了哪些事情 09_面向对象练习 10_static关键字

    java中public、protected、默认、private关键字

    java中public、protected、默认、private关键字

    JAVA单例模式的几种实现方法

    1 饿汉式单例类.在类初始化时,已经自行实例化 class EagerSingleton { private static final EagerSingleton m_instance = new EagerSingleton(); /** * 私有的默认构造子 */ private EagerSingleton() ...

    黑马程序员

    java的 private static void addSex() throws Exception{ DocumentBuilderFactory buiderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder buider = buiderFactory.newDocumentBuilder(); ...

    java的关键字及用法

    揽括了java中常见的关键字及用法,包括Abstract、instanceof、private、protected等等。

    Java关键字及其作用

    private 关键字是访问控制修饰符,可以应用于类、方法或字段(在类中声明的变量)。 只能在声明private(内部)类、方法或字段的类中引用这些类、方法或字段。在类的外部或者对于子类而言,它们是不可见的。 所有类...

    设计模式之单例模式程序

    设计模式里面的单例模式程序 package com.rrppff; public class Singleton { private static String name; public static String getName() { return name; } public static void setName(String name) { ...

    java private关键字用法实例

    主要介绍了java private关键字用法实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    JAVA_API1.6文档(中文)

    java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java....

    Java单例模式实现

    我们利用Java关键字static特性,在类初始化就被加载,并在以后的加载中不再加载。 /** * 饿汉模式,静态成员变量 * * @author justLym * @version 1.0.0 2020/3/13 18:58 **/ public class StaticInstance { ...

    Python中私有属性的定义方式

    Python没有类似于Java的private关键字, 但也可以为类定义私有属性. 只需将属性命名变为以__开头, 例如 __field. 示例代码: class Vector2D(object): def __init__(self, x, y): self.__x = float(x) self.__y = ...

    Java设计模式之单例模式及其应用

     Java中单例模式的定义是:一个类只有一个实例,而且自行实例化并且向整个系统提供这个实例。  优点:由于单例模式在内存中只有一个实例,减少了内存开支和系统的性能开销;单例模式可以避免对资源的多重占用。 ...

    设计模式—— 七 :单例模式

    单例模式的实现饿汉式懒汉式线程安全的懒汉式登记式单例模式的优缺点单例模式的优点单例模式的缺点 单例模式是23个模式中比较简单的模式,应用也非常广泛 什么是单例模式? 单例模式的定义: Ensure a class ...

    Java学习笔记---15.面向对象编程10-Java中final关键字,抽象类与接口

    在Java中, 可以使用final关键字修饰类、方法以及成员变量。 (1).final标记的类不能被继承; (2).final标记的方法不能被子类复写; (3).final标记的变量即成为常量,只能被赋值一次. 注意: 如果使用final来...

    ios_private.db

    ios_private.db https://github.com/NetEaseGame/iOS-private-api-checker iOS-private-api-checker 苹果iOS私有API检查工具 构建私有api库

    java必学必会之static关键字

    一、static关键字    原来一个类里面的成员变量,每new一个对象,这个对象就有一份自己的成员变量,因为这些成员变量都不是静态成员变量。对于static成员变量来说,这个成员变量只有一份,而且这一份是这个类所有...

Global site tag (gtag.js) - Google Analytics