面向对象(static关键字)
static关键字:用于修饰成员(成员变量和成员函数)
被修饰后的成员具备以下特点:
随着类的加载而加载
优先于对象存在
被所有的对象共享
可以直接被类名调用
使用注意:
静态方法只能访问静态成员
静态方法中不可以写this,super关键字
主函数是静态的
static关键:
1、被static修饰的成员变量,被所有的对象所共享
2、静态随着类的加载而加载,随着类的消失而消失
3、优先于对象的存在
4、静态成员可以直接被类名所调用
static的使用注意事项:
1、静态方法只能调用静态成员,不能调用非静态成员,非静态方法可以调用静态成员也可以调用非静态成员
2、在静态方法中不允许出现this super关键字,this代表对象,而静态方法执行时还没有对象呢
3.主函数是静态的
4、静态是有访问局限性的,只能访问静态的内容
静态成员变量和非静态成员变量的区别:
1、非静态成员变量又称为实例变量,静态成员变量又称为类变量
2、非静态成员变量随着对象的创建而创建,随着对象的消失而消失,静态成员变量随着类的加载而存在,随着类的消失而消失
3、非静态变量存在于对象堆内存中,静态成员变量存在于方法区中
4、非静态变量只能被对象所调用,而静态变量可以被类名调用也可以被对象调用。
静态什么时候用:
1、成员变量是否需要static修饰呢?该成员变量的值如果每一个对象都相同的话就用static来修 饰,如果不是的话就不用static来修饰了,让这些不相同的存储到每个对象中。
2、成员函数是否需要被静态修饰呢?
当函数中访问到了对象中的特有属性时,该函数不能被静态修饰,如果函数中没有访问到对象的特有属性,就可以被静态修饰。如果方法没有访问过特有属性那么可以直接被静态化。简单的说,如果函数中访问了成员变量(实例变量),不能静态,否则可以静态,直接被类名所调用。如果一个类中定义的方法都是静态的,说明这个类是不需要对象的。
静态代码块:
随着类的加载而执行,而且只执行一次
优先于主函数执行
package com_package2; public class StaticCode
{
private String name;
private static String country;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static String getCountry() {
return country;
}
public static void setCountry(String country) {
StaticCode.country = country;
}
public void show()
{
System.out.println("name="+name);
System.out.println("country="+country); } }
package com_package2;
public class StaticCodeDemo {
public static void main(String[]args)
{
StaticCode p = new StaticCode();
p.setName("hejinjin");
p.setCountry("cn");
//StaticCode p1 = new StaticCode();
//p1.setCountry(country)
p.show();
}
}
package com_package2; public class StaticCode
{
private String name;
private static String country="cn";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static String getCountry() {
return country;
}
public static void setCountry(String country) {
StaticCode.country = country;
}
public void show()
{
System.out.println("name="+name);
System.out.println("country="+country); } }
package com_package2;
public class StaticCodeDemo {
public static void main(String[]args)
{
//StaticCode p = new StaticCode();
//p.setName("hejinjin");
//p.setCountry("cn");
//StaticCode p1 = new StaticCode();
//p1.setCountry(country)
//p.show();
System.out.println(StaticCode.getCountry());没有创建对象就可以调用静态的对象,由此可以看出,静态成员变量随着类的加载而存在。
}
}
package com_package2; public class StaticCode
{
private String name;
private static String country="cn";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static String getCountry() {
return country;
}
public static void setCountry(String country) {
StaticCode.country = country;
}
public static void show()
{
System.out.println("name="+name);//这样是不对的因为静态方法无法访问非静态变量
System.out.println("country="+country); } }
package com_package2; public class StaticCode
{
private String name="kakaka";
private static String country="cn";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static String getCountry() {
return country;
}
public static void setCountry(String country) {
StaticCode.country = country;
}
public void show()
{
System.out.println("name="+name);
System.out.println("country="+country); }
public static void function()
{ System.out.println("kokokookokok");
}
public static void guojia()
{
System.out.println("country"+country); } }
package com_package2;
public class StaticCodeDemo {
public static void main(String[]args)
{
//StaticCode p = new StaticCode();
//p.setName("hejinjin");
//p.setCountry("cn");
//StaticCode p1 = new StaticCode();
//p1.setCountry(country)
//p.show();
System.out.println(StaticCode.getCountry());
speak();
}
public static void speak()
{
StaticCode p = new StaticCode();
p.setName("hejinjinhaha");
System.out.println(p.getName());
StaticCode.function();//这两个方法没有访问到静态成员变量,所以直接静态化
StaticCode.guojia();//这两个方法没有访问到静态成员变量,所以直接静态化
}
}
静态代码块
package com_package2; public class StaticCode
{
static
{
System.out.println("A"); }
public void show()
{
System.out.println("run"); }
}
package com_package2;
public class StaticCodeDemo {
static
{
System.out.println("B");
}
public static void main(String[]args)
{
StaticCode p = new StaticCode();
p.show();
}
static
{
System.out.println("C");
}
}
B
C
A
run
注意执行顺序,先从带主函数的类进入,由于静态代码块随着类的创建而创建,所以优先于主函数执行,然后再执行主函数,在执行主函数的时候用到了StaticCode类,StaticCode类中也有静态代码块,而这个静态代码块也是随着类的建立而存在,所以比show()要执行的早。
静态代码块的特点就是:随着类的加载而执行并且只执行一次,优先于主函数执行
面向对象(static关键字)的更多相关文章
- Java面向对象-static关键字、静态方法与普通方法、静态成员变量
Java面向对象-static关键字.静态方法与普通方法 static关键字的基本作用:方便在没有创建对象的情况下来进行调用(方法/变量). 很显然,被static关键字修饰的方法或者变量不需要依赖于 ...
- 面向对象-static关键字实战案例
面向对象-static关键字实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.static关键字概述 1>.static的功能 static关键字用于修饰成员变量和 ...
- Java基础语法 - 面向对象 - static 关键字
使用static关键字修饰的变量.常量和方法分别被称作静态变量.静态常量和静态方法,也被称作类的静态成员 静态变量 使用static修饰过的类变量称为静态变量 该变量需要使用类名.变量名进行调用,不能 ...
- PHP面向对象static关键字
1.静态属性用于保存类的公有数据 2.静态方法里面只能访问静态属性 3.静态成员不需要实例化就可以访问 4.类的内部可以通过self或者static关键字访问自身的静态成员 5.可以通过parent关 ...
- Java面向对象--static关键字
- 2017.10.23 Java 面向对象深入学习---final 关键字、static关键字、匿名对象等
今日内容介绍 1.final 关键字 2.static 关键字 3.匿名对象 4.内部类 5.包的声明与访问 6.访问修饰符 7.代码块 第一节课 01(面向对象)final关键字概念.avi 02: ...
- Java第7次作业:造人类(用private封装,用static关键字自己造重载输出方法)什么是面向对象程序设计?什么是类和对象?什么是无参有参构造方法 ?什么是封装?
什么是面向对象程序设计? 我们称为OOP(Object Oriented Programming) 就是非结构化的程序设计 要使用类和对象的方法来进行编程 什么是类,什么是对象 类就是封装了属性和 ...
- 面向对象编程(二)封装--构造方法,this关键字,static关键字,方法重载
面向对象三大特点:封装.继承.多态 封装概念 ① 将东西包装在一起,然后以新的完整形式呈现出来: 将方法和字段一起包装到一个单元中,单元以类的形式实现; ② 信息隐藏,隐藏对象的实现细节,不让 ...
- Java学习笔记之面向对象、static关键字
一周Java学习总结 今天就总结理清一下关于面向对象和面向过程的程序设计的一些不同特点,以及讲下static关键字. 面向对象 现在接触的Java是面向对象的,现在的程序开发几乎都是以面向对象为基础的 ...
- 094 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 04 static关键字(续)
094 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
随机推荐
- springcloud和kubernetes对比
由于这两个都不熟,所以在考虑学哪个. 先说结论:都要学,但是重点学k8s,k8s是一个更加完善的解决方案,springcloud被淘汰只是时间的问题. 从自己的经历和网上的文章两方面分析 个人经历: ...
- EasyPlayerPro windows播放器之多窗口播放音量控制方法
EasyPlayerPro-win基础版本的音频播放为单一通道播放,即同一时间仅允许一个通道播放声音,现应客户需求,在基础版本上实现独立的音频播放,即每个通道可同时播放视频和音频; 设计思路 将音频播 ...
- 基于Darwin实现的分布式流媒体直播服务器系统
各位EasyDarwin开源项目的爱好者,您好,这篇博客的年限有点老了,目前EasyDarwin已经采用全新的云平台架构,详细可以参考博客:http://blog.csdn.net/xiejiashu ...
- consistence availability partition tolerance quit
理论证明
- POJ - 2031 Building a Space Station 【PRIME】
题目链接 http://poj.org/problem?id=2031 题意 给出N个球形的 个体 如果 两个个体 相互接触 或者 包含 那么 这两个个体之间就能够互相通达 现在给出若干个这样的个体 ...
- [egret+pomelo]实时游戏杂记(2)
[egret+pomelo]学习笔记(1) [egret+pomelo]学习笔记(2) [egret+pomelo]学习笔记(3) pomelo pomelo服务端介绍(game-server/con ...
- Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals)
题目链接:http://codeforces.com/contest/828 A. Restaurant Tables time limit per test 1 second memory limi ...
- 搭建LoadRunner中的场景(一) 创建场景
一.创建场景 1. 使用场景创建设置对话框 场景分类: 1. 人工场景:相比面向目标场景,人工场景在实际工作中的应用更为广泛. 2. 面向目标场景:预先定义了一个测试目标,LoadRunner将根据这 ...
- POJ 2503 Babelfish(map,字典树,快排+二分,hash)
题意:先构造一个词典,然后输入外文单词,输出相应的英语单词. 这道题有4种方法可以做: 1.map 2.字典树 3.快排+二分 4.hash表 参考博客:[解题报告]POJ_2503 字典树,MAP ...
- Java丨角色权限控制——数据库设计
相信各位读者对于角色权限管理这个需求并不陌生.那么是怎么实现的呢?今天小编来说道说道! 1.首先我们来进行数据库的设计,如何设计数据库是实现权限控制的关键: 1)用户表: id:主键.自增.int n ...