javaSE基础07

一、static静态修饰符

用了static修饰的变量就会变成共享的属性,只会初始化一次,在内存中只存在一个,并且每个对象都可以访问,存放在方法区(数据共享区)

1.1 static用来修饰成员变量

一个成员变量被static修饰了叫静态成员变量,如果没有修饰叫非静态成员变量

静态成员变量的访问方式:

  1.用对象进行访问:对象.变量名

  2.还可以通过类名来访问:类名.变量名

使用注意点:

  1.不要认为方便就将所有的变量用static修饰,只有当这个数据真正需要共享的时候才用static修饰

  2.只有静态变量才能用类名访问,非静态变量只能用对象访问

  3.局部变量不允许被static修饰

1.1.1静态变量和非静态变量的区别:

1.作用上看:

  a) 静态变量是用来共享的,所有的对象都可以访问到

  b) 非静态变量就是用来描述同一类事物的公共属性

2.数量和存储位置

  a) 静态变量在方法区(数据共享区),并且只有一份数据

  b) 非静态变量存在堆区中,对象有n个那么数据就有n个

3.生命周期:

  a) 静态变量是随着类文件的加载而加载,随着类文件的消失而消失

  b) 非静态变量是随着对象创建而创建的,随着对象的消失而消失

1.2用来修饰方法

类似OC中的类方法:

   1.只能用类名来调用

  2.类中是不允许访问属性

访问方式:

  1.可以通过对象来访问

    a) 对象.方法名

  2.也可以通过类名来访问(推荐使用类名调用,为了与普通方法进行区分)

    a) 类.方法名

  结构上就是在public后面多了一个static,叫做静态方法:

    Public static void eat(){

    }

1.3 Static修饰方法的使用注意点:

 1.静态方法可以用对象和类名调用非静态方法只能用对象调用

  2.静态方法可以访问静态的成员变量,不能访问非静态的成员变量,非静态方法中可以访问任何成员变量(原因:因为有时候我的静态方法被调用了对象还没被创建,以为静态方法可以被类名调用)

  3.静态方法中可以直接访问静态方法,但是不能访问非静态方法,但是非静态方法可以访问静态方法 (原因:有时候我的静态方法被调用了对象还没被创建,非静态方法只能由对象调用;如果对象被创建出来,静态方法已经存在内存中,就可以访问)

  4.静态方法中不允许出现this和super关键字(原因:可能对象还没被创建出来)

    a) this:表示一个方法调用者对象

特点:静态的数据是会早于非静态的数据存在内存中

  静态代码块:在编译java.class文件被使用的时候就执行了

什么情况下使用static修饰方法:

  当一个方法不需要直接访问非静态数据时,就可以用static修饰(定义成一个工具)

二、单例设计模式

 2.1概念:一个类只能够创建一个对象出来

软件行业中有23中设计模式,但是在java中只会讲5种:

  1.单例设计模式

  2.观察者模式

  3.模块设计模式(MVC)

  4.装饰设计模式

  5.工厂模式

设计模式:用来解决一类问题的解决方案(固定的步骤)

2.2单例设置步骤:

  1.创建一个对象把他设置为一个私有的静态成员变量,保证对象唯一

  2.把构造方法设置为私有的,防止new一个对象

  3.定义一个公开的静态方法,返回值为上面的对象

2.3两种设计模式

1. 饿汉设计模式

Class SingleDog {

//保证对象唯一

//声明本类的引用变量,并且把对象创建出来

private static SingleDog s = new SingleDog();

//私有化构造方法,防止通过new来创建对象

private SingleDog(){ }

//提供一个静态方法来接收唯一的对象

public static SingleDog getInstance(){

return s;

} }

2.懒汉单例设计模式( 要用时才创建对象,不建议使用,因线程不安全)

Class SingleDog2 {

//声明本类的引用变量,但不创建对象

Private static SingleDog2 s;

//私有化构造方法

Private SingleDog2 ();

//提供一个静态的法来接收唯一的对象

public static SingleDog2 getInstance(){

If(s == null){

S == new SongleDog2();

}

return s;

}

}

OC中的单例:

 

+(SingleDog *)default {

//保证对象唯一

static SingleDog s;

If ( s == null){

s = [[SingleDog  alloc] init];

}

return s;

}

三、封装

3.1权限修饰符:

public:公共的 修饰的变量和方法任何人都可以进行访问

Private:私有的 修饰的变量和方法只能在本类中访问

3.2封装的步骤:

  1.使用private修饰需要封装的成员变量

  2.提供一个公开的方法设置或者访问私有的属性

    设置:通过set方法:

        命名规范:

          set属性名();属性的首字母要大写

    访问:通过get方法

        命名规范:

          get属性名();属性的首字母要大写

  代码书写规范:java开发中一般类成员变量(属性),都是封装起来的

封装用于

  1.框架

  2.工具类

封装的好处

  1.提高了数据是安全性

  2.操作简单

  3.隐藏了方法的实现

javaSE基础07的更多相关文章

  1. 巩固JavaSE基础--IDEA完成实战项目

    PS:学习完JavaSE基础后,需要有一个项目来测试自己的学习成果,并加以巩固.所以在这里,就让我们来学习下“一本糊涂账”项目吧.(此项目来源于Java自学网站) 项目完成效果图一览

  2. javaSE基础06

    javaSE基础06 一.匿名对象 没有名字的对象,叫做匿名对象. 1.2匿名对象的使用注意点: 1.我们一般不会用匿名对象给属性赋值的,无法获取属性值(现阶段只能设置和拿到一个属性值.只能调用一次方 ...

  3. javaSE基础05

    javaSE基础05:面向对象 一.数组 数组的内存管理 : 一块连续的空间来存储元素. Int [ ] arr = new int[ ]; 创建一个int类型的数组,arr只是一个变量,只是数组的一 ...

  4. javaSE基础04

    javaSE基础04 一.三木运算符 <表达式1> ? <表达式2> : <表达式3> "?"运算符的含义是: 先求表达式1的值, 如果为真, ...

  5. javaSE基础03

    javaSE基础03 生活中常见的进制:十进制(0-9).星期(七进制(0-6)).时间(十二进制(0-11)).二十四进制(0-23) 进制之间的转换: 十进制转为二进制: 将十进制除以2,直到商为 ...

  6. javaSE基础02

    javaSE基础02 一.javac命令和java命令做什么事情? javac:负责编译,当执行javac时,会启动java的编译程序,对指定扩展名的.java文件进行编译,生成了jvm可以识别的字节 ...

  7. JavaSE基础01

    JavaSE基础篇01 ------从今天开始,我就学习正式java了,O(∩_∩)O哈哈~,请大家多指教哦 一.Windows常见的dos命令 操作dos命令: win7 --->开始 --- ...

  8. javase基础复习攻略《十》

    按照计划本篇为大家总结JAVA的网络编程,什么叫网络编程呢?网络编程!=网站编程,对于这一点大家一定要注意,很多小朋友都曾经这么认为.既然谈到网络编程,咱们先了解一下网络的基础知识,什么是计算机网络? ...

  9. javase基础复习攻略《二》

    今天就开始的真正走进JAVASE的世界,本篇介绍的是:JAVASE基础语法,大家如果有C语言的基础,对于本节内容一定感觉非常轻松,编程语言之间的都是相通的,只不过C语言属于面向过程编程,而JAVA语言 ...

随机推荐

  1. Android基础总结(十)

    内容提供者(掌握) 应用的数据库是不允许其他应用访问的 内容提供者的作用就是让别的应用访问到你的私有数据 自定义内容提供者,继承ContentProvider类,重写增删改查方法,在方法中写增删改查数 ...

  2. Java分页需求

    近期在实现项目接口时,经常需要分页功能.有时返回“String”,有时是“Object”格式的分页List.针对这种情况,本人用java实现对List分页. 第一版 package org.sun.j ...

  3. Oracle存储过程由例子到理论

    1.基础环境 oracle HR环境添加新表 CREATE TABLE "HR"."cus_test" ( "id" BYTE) NOT N ...

  4. 【BZOJ-4726】Sabota? 树形DP

    4726: [POI2017]Sabota? Time Limit: 20 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 128  Solved ...

  5. Codeforces 710F String Set Quries

    题意 维护一个字符串的集合\(D\), 支持3种操作: 插入一个字符串\(s\) 删除一个字符串\(s\) 查询一个字符串\(s\)在\(D\)中作为子串出现的次数 强制在线 解法 AC自动机+二进制 ...

  6. 【JavaWeb】Spring+SpringMVC+MyBatis+SpringSecurity+EhCache+JCaptcha 完整Web基础框架(五)

    SpringSecurity(2) 好久没有写了,之前只写了一半,我是一边开发一边写Blog一边上班,所以真心没有那么多时间来维护Blog,项目已经开发到编写逻辑及页面部分了,框架基本上已经搭建好不会 ...

  7. nodejs URL解析

    说到URL就需要提一下URI,一个网址就是一个URL,是一个具体的符号,说明了要通过什么协议来访问某种资源,URI是一个字符格式规范,URL是URI的一个子集,URL肯定是URI,但URI却不一定是U ...

  8. Html中自定义鼠标的形状

    Html中自定义鼠标的形状 <html> <head> <title>自定义的鼠标形状</title> <meta http-equiv=&quo ...

  9. windows 下的sleep 命令

    方法一 ping -n 3 127.0.0.1 > nul 其中3是需要sleep的秒数 方法二 timeout /t 3 /nobreak > nul 其中3是需要sleep的秒数

  10. jquery缓存使用jquery.cookies.2.2.0.min.js

    $.cookies.set(key, obj, { hoursToLive: 2}); key标识的键 , obj存入的值可以缓存json对象, hoursToLive 缓存小时数 $.cookies ...