二、Java面向对象(5)_static修饰符

2018-04-29

树欲静而风不止

static修饰符

static修饰符表示静态的,该修饰符可以修饰字段、方法、内部类。使用该关键字修饰的内容,在面向对象中static修饰的内容是隶属于类,而不是直接隶属于对象的,所以static修饰的成员变量一般称作类成员变量,而static修饰的方法一般称作类方法。

static修饰符的特点:

  1)static修饰的成员(字段/方法),随着所在类的加载而加载。

    当JVM把字节码加载进JVM的时候,static修饰的成员已经在内存中存在了。

  2)优先于对象的存在。

    对象是我们手动通过new关键字创建出来的。

  3)satic修饰的成员被该类型的所有对象所共享。

    根据该类创建出来的任何对象,都可以访问static成员。

      分析:表面上通过对象去访问static成员,其本质依然使用类名访问,和对象没有任何关系(通过反编译可以看到)。

  4)直接使用类名访问static成员 。

    因为static修饰的成员直接属于类,不属于对象,所以可以直接使用类名访问static成员。

类成员和实例成员的访问

  1)类成员:使用static修饰的成员,直接属于类,可以通过类来访问static字段和static方法。

  2)实例成员:没有使用static修饰的成员,只属于对象,通过对象来访问非static字段和非static方法(对象其实可以访问类成员,但是底层依然使用类名访问的)。

  3)static方法中:只能调用static成员。

  4)非static方法:可以访问静态成员,也可以访问实例成员。

静态与非静态的区别:

(1)

非静态成员变量又称为实例变量。

静态成员变量又称为类变量。

(2)

非静态成员变量,随着对象的创建而存在,随着对象的消失而消失。

静态成员变量,随着类的加载而存在,随着类的消失而消失。

(3)

非静态变量存在于对象堆内存中。

静态变量存在于方法区中。

(4)

非静态变量只能被对象所调用。

静态变量可以被类名调用,也可以被对象调用。

什么时候定义成static的字段和方法:

  如果这个一个状态或行为属于整个事物(类),就直接使用static修饰,被所有对象所共享。 在开发中,往往把工具方法使用static修饰。如果不使用static修饰,则这些方法属于该类的对象,我们得先创建对象再调用方法,在开发中工具对象只需要一份即可,可能创建N个对象,此时我们往往把该类设计为单例的,但还是有点麻烦。所以,一般在开发中设计工具方法,为了调用简单,我们使用static修饰。

static成员在JVM中的存储:

代码举例:

 1 class Person
 2     {
 3         String name;//名字
 4         int age;//年纪
 5
 6         static int totalNum = 5;//人类总人数5
 7
 8         //构造函数
 9         Person(String n, int a){
10             name = n;//将n赋给name
11             age = a;//将a赋给age
12             totalNum++;
13         }
14
15         void die(){
16             totalNum--;
17             System.out.println("死亡");
18         }
19
20         //只有人类才有毁灭
21         static void destory(){
22             totalNum = 0;
23             System.out.println("人类毁灭");
24         }
25     }
26
27
28 //演示static修饰符
29 class PersonDemo2
30 {
31
32         public static void main(String[] args)
33         {
34             System.out.println(Person.totalNum);
35             Person p1 = new Person("张三",10);
36             Person p2 = new Person("李四",5);
37             System.out.println(Person.totalNum);//使用类调用对象
38
39             p2.die();//p2死亡
40             System.out.println(Person.totalNum);
41
42             Person.destory();
43             System.out.println(Person.totalNum);
44     }
45 }

输出结果:

原文地址:https://www.cnblogs.com/sunNoI/p/8972457.html

时间: 2024-11-09 00:46:20

二、Java面向对象(5)_static修饰符的相关文章

java面向对象之static修饰符

在摆实例之前,先搞一些总结上去.... static(静态\修饰符) 1. static修饰成员变量 :如果有数据需要被共享给所有对象使用时,那么就可以使用static修饰. 静态成员变量的访问方式: 方式1: 可以使用对象进行访问. 格式: 对象.变量名. 方式二: 可以使用类名进行访问. 格式: 类名.变量名; 注意: 1. 非静态的成员变量只能使用对象进行访问,不能使用类名进行访问. 2. 千万不要为了方便访问数据而使用static修饰成员变量,只有成员变量的数据是真正需要被共享的时候 才

关于Java语言中那些修饰符

一.在java中提供的一些修饰符,这些修饰符可以修饰类.变量和方法,在java中常见的修饰符有:abstract(抽象的).static(静态的).public(公共的).protected(受保护的).private(私有的).synchronized(同步的).native(本地的).transient(暂时的).volatile(易失的).final(不可改变的) 二.修饰顶层类的修饰符包括abstract.public和final,而static.protected和private不能修

(转) java中的访问修饰符

对Java中的修饰符一直记不住,现在结合网上的一些资料进行总结,并重点说明一下protected修饰符. 一. Java中的访问修饰符 Java面向对象的基本思想之一是封装细节并且公开接口.Java语言采用访问控制修饰符来控制类及类的方法和变量的访问权限,从而向使用者暴露接口,但隐藏实现细节.访问控制分为四种级别: (1)public: 用public修饰的类.类属变量及方法,包内及包外的任何类(包括子类和普通类)均可以访问: (2)protected: 用protected修饰的类.类属变量及

详解Java中的访问控制修饰符(public, protected, default, private)

Java中的访问控制修饰符已经困惑笔者多时,其中较复杂的情况一直不能理解透彻.今天下定决心,系统.全面地研究Java中的访问控制修饰符的所有方面,并整理成这篇文章,希望有同样疑惑的读者读完后能有所收获.如果文章中出现错误,欢迎评论指出,共同交流~ 说在前面:这篇文章只研究Java中访问控制修饰符声明类的变量/方法的情况. 先抛出结论: * 成员变量/方法的访问权限 *                                        private        default  

Java面向对象编程之Java语言中的修饰符

近日,读了孙卫琴老师的<Java面向对象编程>一书,心中颇有些感悟,想着将其记录下来. Java中的修饰符 在Java语言中,有这样一些单词(说得再准确点儿,应该是形容词):abstract(抽象的).static(静态的).public(公共的).protected(受保护的).private(私有的).synchronized(同步的).native(本地的).transient(暂时的).volatile(易失的)和final(不可改变的),它们被成为修饰符,这些修饰符可以修饰类.变量和

java中4种修饰符访问权限的区别及详解全过程

java中4种修饰符访问权限的区别及详解全过程 http://jingyan.baidu.com/article/fedf0737700b3335ac8977ca.html java中4中修饰符分别为public.protect.default.private,他们这就说明了面向对象的封装性,所以我们要适用他们尽可能的让权限降到最低,从而安全性提高. 下面详细讲述下它们的访问权限问题.(同一个类中除内部类外所有修饰符都是可以访问的,所以下面排除这种情况.) 首先在这里把它们的访问权限表示出来:

java 中的 final修饰符

修饰符final:是常量,不允许改变 ,可以修饰 变量,方法 ,类 final修饰变量:被final修饰的变量就会变成常量,一旦赋值不能改变 常量可以在初始化时直接赋值,也可以在构造方法里赋值,只能在这两种方法里二选一,不能不为常量赋值 常量不会有默认初始值 锁定栈,使栈中的数据不可以改变 静态常量只能在初始化时直接赋值 final修饰方法:被final修饰的方法将不能被其子类覆盖,保持方法的稳定不能被覆盖 final修饰类:被final修饰的类将不能被继承          final类中的方

1.27 Java基础总结 ①访问修饰符访问权限②类和方法的基本声明和使用1.27 Java基础总结 ①访问修饰符访问权限②类和方法的基本声明和使用

1.27 Java基础总结 ①访问修饰符访问权限②类和方法的基本声明和使用 成员变量(属性)①类中添加成员变量 访问修饰符 类型 变量名 private String name ②实例化对象调用类的构造方法类构造对象,Teacher one = new Teacher(): 有static的可以直接调用,因为static是类级别的 ③JavaBean里边一般规则应该有公共的无参构造应该有符合命名规范的get/set方法 ④对象的回收:没有任何引用指向该对象时,GC会回收 主动回收:对象 = nu

20135234马启扬 实验二 Java面向对象程序设计

北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1352  姓名:马启扬  学号:20135234 成绩:             指导教师:娄嘉鹏    实验日期:2015.5.7 实验密级:         预习程度:         实验时间:15:50--22:50 仪器组次:34         必修/选修: 选修            实验序号:02 实验名称:实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和T

Java语言中的修饰符

类.方法.成员变量和局部变量的可用修饰符 修饰符 类 成员方法 构造方法 成员变量 局部变量 abstract Y Y _ _ _ static _ Y _ Y _ public Y Y Y Y _ protected _ Y Y Y _ private _ Y Y Y _ synchronized _ Y _ _ _ native _ Y _ _ _ transient _ _ _ Y _ volatile _ _ _ Y _ final Y Y _ Y Y 1.访问控制修饰符: Java语言