javaSE基础07
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的更多相关文章
- 巩固JavaSE基础--IDEA完成实战项目
PS:学习完JavaSE基础后,需要有一个项目来测试自己的学习成果,并加以巩固.所以在这里,就让我们来学习下“一本糊涂账”项目吧.(此项目来源于Java自学网站) 项目完成效果图一览
- javaSE基础06
javaSE基础06 一.匿名对象 没有名字的对象,叫做匿名对象. 1.2匿名对象的使用注意点: 1.我们一般不会用匿名对象给属性赋值的,无法获取属性值(现阶段只能设置和拿到一个属性值.只能调用一次方 ...
- javaSE基础05
javaSE基础05:面向对象 一.数组 数组的内存管理 : 一块连续的空间来存储元素. Int [ ] arr = new int[ ]; 创建一个int类型的数组,arr只是一个变量,只是数组的一 ...
- javaSE基础04
javaSE基础04 一.三木运算符 <表达式1> ? <表达式2> : <表达式3> "?"运算符的含义是: 先求表达式1的值, 如果为真, ...
- javaSE基础03
javaSE基础03 生活中常见的进制:十进制(0-9).星期(七进制(0-6)).时间(十二进制(0-11)).二十四进制(0-23) 进制之间的转换: 十进制转为二进制: 将十进制除以2,直到商为 ...
- javaSE基础02
javaSE基础02 一.javac命令和java命令做什么事情? javac:负责编译,当执行javac时,会启动java的编译程序,对指定扩展名的.java文件进行编译,生成了jvm可以识别的字节 ...
- JavaSE基础01
JavaSE基础篇01 ------从今天开始,我就学习正式java了,O(∩_∩)O哈哈~,请大家多指教哦 一.Windows常见的dos命令 操作dos命令: win7 --->开始 --- ...
- javase基础复习攻略《十》
按照计划本篇为大家总结JAVA的网络编程,什么叫网络编程呢?网络编程!=网站编程,对于这一点大家一定要注意,很多小朋友都曾经这么认为.既然谈到网络编程,咱们先了解一下网络的基础知识,什么是计算机网络? ...
- javase基础复习攻略《二》
今天就开始的真正走进JAVASE的世界,本篇介绍的是:JAVASE基础语法,大家如果有C语言的基础,对于本节内容一定感觉非常轻松,编程语言之间的都是相通的,只不过C语言属于面向过程编程,而JAVA语言 ...
随机推荐
- 函数返回多个值(c/c++)
当我们在处理一个数组的时候常常会碰到这样的问题:输入一个数组,和数组的一个元素,返回该元素所在行数和列数.这样就需要返回多组两个值,且组数不定.上述类型的函数在c语言程序里面存在两个问题.第一,函数只 ...
- 为不同分辨率单独做样式文件,在页面头部用js判断分辨率后动态加载定义好的样式文件
为不同分辨率单独做样式文件,在页面头部用js判断分辨率后动态加载定义好的样式文件.样式文件命名格式如:forms[_屏幕宽度].css,样式文件中只需重新定义文本框和下拉框的宽度即可. 在包含的头文件 ...
- JMeter 分布式部署
Jmeter 是java 应用,对于CPU和内存的消耗比较大,使用单台机器模拟以千计的并发用户就有些力不从心,甚至会引起JAVA内存溢出错误. 为了让jmeter工具提供更大的负载能力,jmeter短 ...
- js事件(Event)知识整理
事件(Event)知识整理,本文由网上资料整理而来,需要的朋友可以参考下 鼠标事件 鼠标移动到目标元素上的那一刻,首先触发mouseover 之后如果光标继续在元素上移动,则不断触发mousemo ...
- JDK Collection 源码分析(3)—— Queue
@(JDK)[Queue] JDK Queue Queue:队列接口,对于数据的存取,提供了两种方式,一种失败会抛出异常,另一种则返回null或者false. 抛出异常的接口:add,remove ...
- remove name="ProxyModule“会导致重复执行
<?xml version="1.0" encoding="utf-8"?> <!-- 有关如何配置 ASP.NET 应用程序的详细信息,请访 ...
- 命令查询网站是否开启CDN加速
1.使用ping命令 不一定准确 运行-CMD 直接输入ping 域名 C:\Users\6503>ping www.netnic.com.cn 正在 Ping u999.v.qingcdn ...
- 表单元素的submit()方法和onsubmit事件
1.表单元素中出现了name="submit"的元素 2.elemForm.submit();不会触发表单的onsubmit事件 3.动态创建表单时遇到的问题 表单元素拥有subm ...
- 【UWP】解析GB2312、GBK编码网页乱码问题
在WebHttpRequest请求网页后,获取到的中文是乱码,类似这样: <title>˹ŵ��Ϸ���������� - ��̳������ - ˹ŵ��Ϸ����</title ...
- 12.Linux软件安装 (一步一步学习大数据系列之 Linux)
1.如何上传安装包到服务器 有三种方式: 1.1使用图形化工具,如: filezilla 如何使用FileZilla上传和下载文件 1.2使用 sftp 工具: 在 windows下使用CRT 软件 ...