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关键字)的更多相关文章

  1. Java面向对象-static关键字、静态方法与普通方法、静态成员变量

    Java面向对象-static关键字.静态方法与普通方法 static关键字的基本作用:方便在没有创建对象的情况下来进行调用(方法/变量). 很显然,被static关键字修饰的方法或者变量不需要依赖于 ...

  2. 面向对象-static关键字实战案例

    面向对象-static关键字实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.static关键字概述 1>.static的功能 static关键字用于修饰成员变量和 ...

  3. Java基础语法 - 面向对象 - static 关键字

    使用static关键字修饰的变量.常量和方法分别被称作静态变量.静态常量和静态方法,也被称作类的静态成员 静态变量 使用static修饰过的类变量称为静态变量 该变量需要使用类名.变量名进行调用,不能 ...

  4. PHP面向对象static关键字

    1.静态属性用于保存类的公有数据 2.静态方法里面只能访问静态属性 3.静态成员不需要实例化就可以访问 4.类的内部可以通过self或者static关键字访问自身的静态成员 5.可以通过parent关 ...

  5. Java面向对象--static关键字

  6. 2017.10.23 Java 面向对象深入学习---final 关键字、static关键字、匿名对象等

    今日内容介绍 1.final 关键字 2.static 关键字 3.匿名对象 4.内部类 5.包的声明与访问 6.访问修饰符 7.代码块 第一节课 01(面向对象)final关键字概念.avi 02: ...

  7. Java第7次作业:造人类(用private封装,用static关键字自己造重载输出方法)什么是面向对象程序设计?什么是类和对象?什么是无参有参构造方法 ?什么是封装?

    什么是面向对象程序设计? 我们称为OOP(Object  Oriented  Programming) 就是非结构化的程序设计 要使用类和对象的方法来进行编程 什么是类,什么是对象 类就是封装了属性和 ...

  8. 面向对象编程(二)封装--构造方法,this关键字,static关键字,方法重载

    面向对象三大特点:封装.继承.多态 封装概念 ①   将东西包装在一起,然后以新的完整形式呈现出来: 将方法和字段一起包装到一个单元中,单元以类的形式实现; ②   信息隐藏,隐藏对象的实现细节,不让 ...

  9. Java学习笔记之面向对象、static关键字

    一周Java学习总结 今天就总结理清一下关于面向对象和面向过程的程序设计的一些不同特点,以及讲下static关键字. 面向对象 现在接触的Java是面向对象的,现在的程序开发几乎都是以面向对象为基础的 ...

  10. 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封装 ...

随机推荐

  1. Appium python Uiautomator2 多进程问题

    appium更新uiautomator后可以获取tost了,大家都尝试,课程中也讲解了,但是这些跑的时候都在单机上,当我们多机并发的时候会出现一个端口问题,因为我们appium最后会调用uiautom ...

  2. leetCode 90.Subsets II(子集II) 解题思路和方法

    Given a collection of integers that might contain duplicates, nums, return all possible subsets. Not ...

  3. Windows下Nginx+Web.py+FastCGI服务搭建

    在搭建之前,有必要了解下什么是fastcgi,但鉴于我自己也不大了解,这里就不搬门弄斧了,请参考各种百科和官网资料. 1.资源下载 python下载地址:戳这里webpy下载地址:戳这里flup下载地 ...

  4. MySQL 优化1

    系统在应用时间很长的情况下会慢慢变得很慢,无论是人还是机器为了更好的工作和学习都需要适当学习.数据库也是一样的用久了, 自然就会产生空间碎片,需要我们都i数据库中的数据块进行维护和整理.下面以实例来说 ...

  5. MongoDB C#驱动:

    MongoDB C#驱动: http://xiaosheng.me/2016/09/15/article24 http://www.cnblogs.com/wuhuacong/p/5098348.ht ...

  6. 九度OJ 1014:排名 (排序)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:8267 解决:2469 题目描述:     今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完成的题数排序,没有考虑每题的分 ...

  7. Future 异步回调 大起底之 Java Future 与 Guava Future

    目录 写在前面 1. Future模式异步回调大起底 1.1. 从泡茶的案例说起 1.2. 何为异步回调 1.2.1. 同步.异步.阻塞.非阻塞 1.2.2. 阻塞模式的泡茶案例图解 1.2.3. 回 ...

  8. 性能测试--Jmeter随机生成/随机选取/csv读取关键字

    Jmeter随机生成/随机选取/csv读取关键字 一.随机生成关键字 随机生成关键字,需要组件:随机变量配置元件(Random Variable)  该组件的作用是生成字符+随机数字格式的字符串,并保 ...

  9. mooc课程mit 6.00.1x--problem set3解决方法

    RADIATION EXPOSURE 挺简单的一道题,计算函数和算法过程都已经给出,做一个迭代计算就行了. def radiationExposure(start, stop, step): ''' ...

  10. (图解)Description Resource Path Location Type Java compiler level does not match the version of

    Description Resource Path Location Type Java compiler level does not match the version of project 编译 ...