Java 基础入门随笔(8) JavaSE版——静态static
面向对象(2)
this:代表对象。代表哪个对象呢?当前对象。
当成员变量和局部变量重名,可以用关键字this来区分。
this就是所在函数所属对象的引用。(简单说:哪个对象调用了this所在的函数,this就代表哪个对象。)
this也可以用于在构造函数中调用其他构造函数。注意:只能定义在构造函数的第一行。因为初始化动作要先执行。
例如:person(String name){this.name = name;}
person(String name,int age){this(name);this.age = age;}
一般在本类对象中用到了本类的对象,通常都是用this。
static:
特点:1.static是一个修饰符,用于修饰成员。
2.static修饰的成员为所有的对象所共享的。
3. static优先于对象存在,因为static的成员随着类的加载就已经存在了。
4.static修饰的成员多了一种调用方式,就是可以直接被类名所调用,如:类名.成员变量。
5.static修饰的数据是共享数据,对象中的存储的时特有数据。
注意:成员变量也称实例变量;static修饰的变量称为静态变量或叫类变量。
成员变量与静态变量的区别:
1.两个变量的生命周期不同。
成员变量随着对象的创建而存在,随着对象的回收而被回收释放;
静态变量随着类的加载而存在,随着类的消失而消失。
2.调用方式不同。
成员变量只能被对象调用;
静态变量可以被对象调用,还可以被类名调用(推荐)。
3.别名不同。
成员变量称为实例变量;
静态变量称为类变量。
4.数据存储位置不同。
成员变量数据存储在堆内存的对象中,所以也叫对象的特有数据。
静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。
静态使用的注意事项:
1.静态方法只能访问静态成员。(非静态既可以访问静态,又可以访问非静态)(说明:注意此处针对同一个类的环境下,静态方法只能调用本类中的静态成员)
2.静态方法中不可以使用this或者super关键字。
3.主函数是静态的。
静态什么时候用?
1.静态变量。
当分析对象中所具备的成员变量都是相同的,这时这个成员变量可以被静态修饰。
只要数据在对象中都是不同的,那就是对象的特有数据,必须存储在对象中,是非静态的。
如果是相同的数据,对象不需要做修改,只需要使用即可,不需要存储在对象中,定义成静态的。
2.静态函数。
函数是否用静态修饰,只要参考一点,就是该函数功能是否有访问到对象中的特有数据。
简单点说,从源代码看,该功能是否需要访问非静态的成员变量,如果需要,该功能就是非静态的,如果不需要,就可以将功能定义为静态的。
当然,也可以将该功能定义成非静态,但是非静态需要被对象调用,而仅创建对象调用非静态的没有访问特有数据的方法,该对象的创建时没有意义的。
主函数特殊之处:
1.格式是固定的;2.被jvm所识别和调用。
public:因为权限必须是最大的。
static:不需要对象的,直接用主函数所属类名调用即可。
void:主函数没有具体的返回值。
main:函数名,不是关键字,只是一个jvm识别的固定的名字。
String[] args:这是主函数的参数列表,是一个数组类型的参数,而且元素都是字符串类型。(可在调用主函数时传入,例如:java mainDemo xx yy zz 即为传入了3个元素的字符串数组)
静态代码块\构造代码块\局部代码块:
静态代码块:随着类的加载而执行。而且只执行一次。作用:用于给类进行初始化。
构造代码块:随着对象的创建而执行,对象创建几次即调用几次。作用:可以给所有对象进行初始化的。(与构造函数的区别:构造函数是给对应的对象进行针对性的初始化。而构造代码块对象初始化的通用性。)
局部代码块的作用:限定局部变量的生命周期。
三者的调用顺序如下:
class StaticCode
{
static int num ;
//静态代码块 (首先执行)
static
{
num = 10;
// num *=3;
System.out.println("hahahah");
}
StaticCode(){} static void show()
{
System.out.println(num);
}
} class Person
{
private String name; {//构造代码块。可以给所有对象进行初始化的。(如有调用对象,即其次调用,与局部代码块视情况而定) System.out.println("constructor code ");
// cry();
} static
{
System.out.println("static code");
} Person()//是给对应的对象进行针对性的初始化。
{
name = "baby";
// cry();
}
Person(String name)
{
this.name = name;
// cry();
}
public void cry()
{
System.out.println("哇哇"); } public void speak()
{
System.out.println("name:"+name);
} static void show()
{
System.out.println("show run");
}
} class StaticCodeDemo
{
static
{
// System.out.println("a"); //先执行
}
public static void main(String[] args)
{ // Person p = null;
// p.speak(); // Person.show();
// Person p1 = new Person();
// p1.speak();
// Person p2 = new Person("旺财");
// p2.speak();
// new Person(); // new StaticCode().show();
// new StaticCode().show();
// StaticCode.show();
// System.out.println("b"); //后执行
}
}
Java 基础入门随笔(8) JavaSE版——静态static的更多相关文章
- 黑马程序员——JAVA基础之主函数main和静态static,静态代码块
------- android培训.java培训.期待与您交流! ---------- 主函数:是一个特殊的函数.作为程序的入口,可以被jvm调用. 主函数的定义: public:代表着该函数访问权限 ...
- Java 基础入门随笔(1) JavaSE版——java语言三种技术架构
1.java语言的三种技术架构: J2SE(java 2 Platform Standard Edition):标准版,是为开发普通桌面和商务应用程序提供的解决方案.该技术体系是其他两者的基础,可以完 ...
- Java 基础入门随笔(11) JavaSE版——继承、覆盖、抽象类
1.面向对象的特征二:继承 定义: 指一个对象直接使用另一对象的属性和方法. 继承好处: 1.提供代码的复用性. 2.让类与类直接产生了关系,给第三个特征多态提供了前提. java中支持单继承.不直接 ...
- Java 基础入门随笔(9) JavaSE版——文档注释
上节中写了一些static变量以及静态的方法的定义使用以及与非静态的差别,这节补充下: 如果在一个类中所有方法都为静态的,且无成员变量,这时候需要对对应的类进行限制该类无法创建对象,具体操作如下: p ...
- Java 基础入门随笔(7) JavaSE版——面向对象定义、特征:封装、构造函数
面向对象 面向过程:对于面向过程思想,强调的是过程(动作). 面向对象:对于面向对象思想,强调的是对象(实体). 特点: 1,面向对象就是一种常见的思想.符合人们的思考习惯.2,面向对象的出现,将复杂 ...
- Java 基础入门随笔(6) JavaSE版——数组操作
1.数组 概念:同一种类型数据的集合.其实就是数组就是一个容器. 好处:可以自动给数组中的元素从0开始编号,方便操作这些元素. 格式: ①. 元素类型[] 数组名 = new 元素类型[元素个数或数组 ...
- Java 基础入门随笔(2) JavaSE版——关键字、进制转换、类型转换
1.Java语言-关键字 关键字:被java语言赋予了特殊含义的词,特点是所有的字母都为小写. java涉及到的关键字整理: 用于定义数据类型的关键字 class interface byte sho ...
- Java 基础入门随笔(10) JavaSE版——单例设计模式
设计模式:对问题行之有效的解决方式.其实它是一种思想. 1.单例设计模式. 解决的问题:就是可以保证一个类在内存中的对象唯一性.(单个实例) 使用单例设计模式需求:必须对于多个程序使用同一个配置信息对 ...
- Java 基础入门随笔(5) JavaSE版——函数重载
1.函数 函数就是定义在类中具有特定功能的一段独立小程序,也称为方法. 定义函数的格式: 修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,...) { ...
随机推荐
- Python随机播放电脑里的音乐
就是找到硬盘中全部的MP3文件和wma文件.再随机打开当中的一个. import os,random disk=['D','E','F','G','H'] def search_file(filena ...
- js图片懒加载(滚动加载)判断是否生效
一.什么是懒加载? 对未出现在视野范围内的图片先不进行加载,等到出现在视野范围才去加载. 二.为什么使用懒加载? 懒加载的主要目的是作为服务器前端的优化,减少请求数或延迟请求数. 理论性知识大家都有自 ...
- #pragma pack (n) 惹的祸
今天遇到了一个问题,使用数据流传输的数据在解析的时候数据错位.想了非常久,发现是#pragma pack (n)惹的祸. 首先.解析方使用了编译字节设置,可是在发送方没有使用,于是用相同的结构体解析数 ...
- 2.eclipse 插件安装烦死人(1)
嫌公司用的eclipse不爽,准备自己弄一个,diy的,没想到装插得烦死人. 诱惑人的“常用插件”: (1) AmaterasUML 介绍:Eclipse的UML插件,支持UML活 ...
- Yaf的性能
http://www.laruence.com/manual/yaf.bench.html 之前团队代码在ip的根下 http://192.168.6.212:83/js/common.js ; cd ...
- Ubuntu新版中javascript-common.conf害死人啊
自动把javascript目录映射到系统的/usr/share 下面了,删掉对应的软链接再重启就好了
- 【NOIP 2016】初赛-完善程序 & 参考答案
参考答案 感觉这两题目都挺好的~~ T1 交朋友 简单描述:有n个人依次进入教室,每个人进入会找一个身高绝对值相差最小的人交朋友(相同时更想和高的交朋友),求每个人交的朋友. Solution: So ...
- brew安装PHP7 swoole
环境: 系统:mac os High Sierra 10.13.3 php版本:7.0.27_19 1.安装homebrew brew 又叫Homebrew,是Mac OSX上的软件包管理工具,能在M ...
- Final关键字解析
final 在 Java 中是一个保留的关键字,可以声明变量.方法.类. 什么是final变量 / 类 / 方法? 任何变量前被 final 修饰就是 final 变量,定义的类前被 final 修饰 ...
- SQL Server触发器创建、删除、修改、查看示例步骤
一﹕ 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约`束. 二﹕ SQL Server为每个触发 ...