面向对象(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封装 ...
随机推荐
- erlang动态生成随机key
取随机数,举个例子: 获取动态随机key值16位(key的范围是由"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012345678 ...
- Nginx 经验小结
chmod 777 永远不要 使用 777,有时候可以懒惰的解决权限问题, 但是它同样也表示你没有线索去解决权限问题,你只是在碰运气. 你应该检查整个路径的权限,并思考发生了什么事情. 把 root ...
- 制作FAT12软盘以查看软盘的根目录条目+文件属性+文件内容
[-1]Before for specific info , please visit http://wiki.osdev.org/Loopback_Device [0]我们先上干货,看到效果后,我们 ...
- 【Java并发编程实战】—–“J.U.C”:ReentrantLock之二lock方法分析
前一篇博客简介了ReentrantLock的定义和与synchronized的差别,以下尾随LZ的笔记来扒扒ReentrantLock的lock方法.我们知道ReentrantLock有公平锁.非公平 ...
- Gradle 介绍
介绍:Gradle是一种构建工具,它抛弃了基于XML的构建脚本,取而代之的是采用一种基于Groovy的内部领域特定语言.Gradle的设计理念是,所有有用的特性都由Gradle插件提供,一个Gradl ...
- iOS开发 viewWillAppear:(BOOL)animated真机调试的时候不执行了怎么办
本文转载至http://blog.sina.com.cn/s/blog_a843a8850101e0g7.html 现在需要的.h文件里面加上. 然后,在需要的.m文件按里面加上关键代码:self ...
- PHP中的排序函数sort、asort、rsort、krsort、ksort区别分析(转)
sort() 函数用于对数组单元从低到高进行排序. rsort() 函数用于对数组单元从高到低进行排序. asort() 函数用于对数组单元从低到高进行排序并保持索引关系. arsort() 函数用于 ...
- CUDA: 常量内存与事件
常量内存: 常量内存用于保存在核函数执行期间不会发生变化的数据,在变量面前添加 __constant__ 修饰符: __constant__ Sphere s[SPHERES]; cudaMe ...
- Java7、Java8 安装卸载问题
win7 系统,同时安装了JDK7和JDK8,卸载了JDK8之后,cmd命令行输入:java -version ,本以为显示java版本1.7,结果弹错:has value '1.7',but '1. ...
- 深入理解JVM - 线程安全与锁优化 - 第十三章
线程安全 当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方法进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那么这个对 ...