三沣开发知识 购物 网址 游戏 小说 歌词 地图 快照 开发 股票 美女 新闻 笑话 | 汉字 软件 日历 阅读 下载 图书馆 编程 租车 短信 China
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题
autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程 CSS/HTML/Xhtml
html5 CSS XML/XSLT Dreamweaver教程 经验交流 开发者乐园 Android开发资料
站长资讯 .NET新手 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA VisualStudio ASP.NET-MVC .NET控件开发 EntityFramework WinRT-Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动 Html-Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP OracleERP DynamicsCRM K2 BPM 信息安全 企业信息 Android开发 iOS开发 WindowsPhone WindowsMobile 其他手机 敏捷开发 项目管理 软件工程 SQLServer Oracle MySQL NoSQL 其它数据库 Windows7 WindowsServer Linux
  IT知识库 -> Java -> java学习中,static 修饰符使用、static方法、静态代码块、主函数为何如此写、单例设计模式(java 学习中的小记录) -> 正文阅读
 

[Java]java学习中,static 修饰符使用、static方法、静态代码块、主函数为何如此写、单例设计模式(java 学习中的小记录)

java学习中,static 修饰符使用、static方法、静态代码块、主函数为何如此写、单例设计模式(java 学习中的小记录) java学习中,static 修饰符使用、static方法、静态代码块、主函数为何如此写、单例设计模式(java 学习中的小记录)
作者:王可利(Star·星星)
static (静态修饰符)
1.用来修饰成员变量
    成员变量被static修饰 就叫静态成员变量,如果没有修饰叫非静态成员变量。
     静态成员变量的访问方式:
            1.用对象进行访问,直接点语法拿到。如:对象名.变量名
            2.通过类名来直接访问。 如:类名.变量名
      注意:不要认为方便把所有的变量都用static修饰,只有当数据真正需要共享是才需要用static修饰。
               只有静态变量才能用类来访问,非静态变量只能用对象来访问,类是不能访问的。
静态变量和非静态变量的区别:
    1.作用上来看:
        a.静态变量是用来共享的,所有的对象都可以访问到
        b.非静态变量就是用来描述同一类事物的公共属性。
    2.数量和存储的位置上:
        a.静态变量存在静态方法区(数据共享区),并且只有一份数据。
        b.非静态变量存在堆区中,对象有N个,数据就有N个。
    3.生命周期:
        a.静态变量是在随着类文件的加载而加载,随着类文件消失而消失。
        b.非静态变量是随着对象创建而创建,随着对象的消失而消失。
2.修饰方法 
    static 修饰的方法和OC中的类方法有点相似,OC中类方法只能用类名来调用,类是不允许访问属性的。
     而java中static修饰的方法是可以用对象名来调用的,也可以用类名来调用,不过推荐使用类名调用。(这样的话就可以知道是直接知道是静态方法)。
     如: public static void study(){
                     静态方法
            }
      调用:类名.方法名();  /  对象名.方法名();
      结构上就是在普通方法 public 后面多加了一个static,用static修饰的方法是静态方法,不叫类方法。
     static 修饰的方法使用需要注意的点:
     1.静态方法可以用对象和类名调用。非静态方法只能用对象来调用。
     2.静态方法是可以访问静态成员变量的,但是不能够访问非静态的成员变量。非静态方法可以访问任何的成员变量。
        原因:有可能静态方法被调用了,但是对象还没有被创建出来,自然就没有成员变量。
     3.静态方法中可以直接访问静态方法,但是不能访问非静态方法。非静态方法是可以访问静态方法。
        原因:有可能静态方法被调用了,但是对象还没有被创建出来,又因为非静态方法只能由对象来调用,所以调用不了。
                  如果对象被创建出来,静态方法早就存在内存中了。
     4.静态方法中是不允许出现this关键字 或者 super关键字的。
        this:表示一个方法调用者对象。
特点:静态的数据在就存在于非静态的数据存在内存中。
什么时候使用static来修饰方法?
     当一个方法不需要直接访问非静态数据,这个时候就可以用static来修饰(定于工具类 如:arrays)
静态代码块
大括号{}前面加一个static就是静态代码块。
格式:
     static{
   
     }
编译java.class文件被使用的时候就执行了。使用到这个类的时候就使用了。
权限修饰符:
1.public :公共的,公开的,权限是最大的,在任何的情况下都可以调用。
2.private:私有的,权限是最小的,只能自己本类中访问。
3.protected:受保护的。
主函数为什么要这样来定义?
public static void main(String[] args){}
1.为什么使用 public:
    main 主方法是由jvm(java虚拟机)来调用的,jvm实际也是一个程序,所以是为了保证jvm能够在任何情况下来调用主函数。
2.为什么使用 static:
    如果没有static 这个时候调用主方法就需要通过对象来调用,jvm如果创建对象不知道该传递什么参数(如:构造方法有无参的,或者N个参数的),所以为了避免麻烦,就将方法定义成了静态的方法,这个时候就不需要考虑对象了,直接用类名就可以调用。
3.为什么返回值是void :
    main 是由jvm调用,返回值是给jvm ,jvm接收返回值是没有任何意义的,所以就不需要返回值。
4. main:
    main 不是一个关键字,没有特别的含义,因为很多语言都以main 作为函数的入口,所以main 已经约定好了的,这个就叫入口。
5.args:
   用来接收程序运行的时候传进来的参数。
    如:额外知识:
    Object-c 中遍历数组有一个是 for in 的方法,在java中 for循环增强是 foreach 方法,括号里面用的是 冒号 :不是分号;
    代码如下:

 1 public class Star_static {
 2 
 3     public static void main(String[] args) {
 4         
 5         //增强for循环, java 叫 foreach循环 这里args传的就是一个参数。
 6         for(String s : args){
 7             System.out.println(s);
 8         }
 9     }
10 } 


可以这样在Demo6 后面写参数,控制台传递参数,不过这样不方便,一般使用 Scanner会比较多。这个用的比较少。
单例设计模式
单例设计模式:一个类只能够创建一个对象出来,不管在哪里使用都是这个类。
软件行业中设计模式大概有23种:
可能在java学习中会讲到下面的设计模式:
1.单例设计模式
2.观察者设计模式
3.模块设计模式(mvc)
4.装饰设计模式
5.工厂设计模式
设计模式:用来解决同一个问题的解决方案。
如何实现单例设计模式?(目的:阻止别人用new来多次创建对象)
详见一下代码注释分析:

 1 class  SingleDog{
 2     
 3     String name;
 4     
 5     //阻止让别人用 new 来对次创建对象 (保证对象唯一)
 6     //private 私有方法只能在本类使用,如果使用public的话,外面的类就可以通过点语法拿到然后创建多个,就不唯一了。这样就相当于是成员变量了。
 7     private static SingleDog s = new SingleDog();
 8     
 9     //私有化构造方法,防止通过new来创建对象
10     private SingleDog(){}
11     
12     //提供一个静态的方法(不用创建对象就可以调用)来接收唯一的对象
13     public static SingleDog getInstance(){
14         return s;//返回之前new的那个对象
15     }
16 }
17 
18 public class Star_dlsjmm {
19 
20     public static void main(String[] args) {
21         SingleDog star1 = SingleDog.getInstance();//调用类中无参数的构造方法
22         star1.name = "星星";
23         SingleDog star2 = SingleDog.getInstance();
24         SingleDog star3 = SingleDog.getInstance();    
25         //如果打印的结果 star2 ,star3    不是空的 就是单例了
26         System.out.println(star1.name);
27         System.out.println(star2.name);
28         System.out.println(star3.name);
29     }
30 }


经过测试发现,单例设计模式是成功的。打印的三个对象都一样,没有出现null。
总结:
    饿汉单例设计模式:
      步骤:
         1.定义一个私有的静态成员变量来引用对象(私有的静态对象),设置对象唯一。
         2.私有化构造方法,防止new对象。
         3.创建一个公开的静态方法,返回上面的对象。
    懒汉单例设计模式(要用的时候才创建对象):
      步骤:
          1.定于一个私有的静态成员变量,不要赋值。
          2.私有化构造方法,防止new对象。
          3.创建一个公开的静态方法,判断是否存在对象,如果不存在就创建一个,如果存在就直接返回。
  Java 最新文章
初入山门,需记门规
java 操作本地数据库 mysql
spring boot 整合 mybatis
单表(SSM、SpringBoot、SpringCloud、Free
Mybatis框架中Mapper动态代理方式
IDEA报错:Error starting ApplicationCont
Activiti工作流学习
文件的上传Commons FileUpload(web基础学习
POI读取EXCEL(2007以上)
atitit.词法分析原理 词法分析器 (Lex
上一篇文章      下一篇文章      查看所有文章
加:2016-12-02 03:29:05  更:2017-05-15 21:01:14 
 
技术频道: 站长资讯 .NET新手区 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA Visual Studio ASP.NET MVC .NET控件开发 Entity Framework WinRT/Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动设计 Html/Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP Oracle ERP Dynamics CRM K2 BPM 信息安全 企业信息化其他 Android开发 iOS开发 Windows Phone Windows Mobile 其他手机开发 敏捷开发 项目与团队管理 软件工程其他 SQL Server Oracle MySQL NoSQL 其它数据库 Windows 7 Windows Server Linux
脚本语言: vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程
网站开发: CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流 开发者乐园 Android开发资料
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2018年1日历
2018-1-17 1:17:35
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT知识库