Static关键字的使用

static关键字的作用:

用来修饰成员变量和方法,被修饰的成员是属于类的,而不单单是属于某个对象的,也就是说,可以不靠对象来调用。

首先我们来介绍类变量

当static修饰成员变量时,该变量称为类变量,该类的每个对象都共享同一个类变量的值,任何

对象都可以更改该变量的值,但也可以在不创建该类对象的情况下,通过类名对类变量进行操作

命名格式

static 数据类型 变量名;

static int age;

下面我们来举个例子,让大家体会体会类变量的作用

就比如梁山有108位好汉我们给这108位好汉按照次序每人一个编号,这就需要使用到类变量

定义一个Person类

public class Person {
private int age;
private String name;
private int id;
private static int count=1;
public int getId() {
return id;
} @Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
", id=" + id +
'}';
} public void setId(int id) {
this.id=count;
count++;
} public Person(int age, String name) {
this.age = age;
this.name = name;
this.id=count;
count++;
} public Person() {
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}

主函数

public class Test {
public static void main(String[] args) {
Person one = new Person(18, "及时雨宋江");
System.out.println(one);
Person two = new Person(18, "卢俊义");
System.out.println(two); }
}

结果

我们看到id的数值在不断的+1,这是因为他们的id都等于了一个公共的类变量

接下来我们来介绍静态方法

静态方法即类中使用static修饰的方法,该方法使用类名可以直接调用,不需要创建类的对象

定义格式

修饰符 static 返回置类型 方法名 (参数列表){

//执行语句

}

示例

public static void eat(){
System.out.println("吃饭了");
}

使用静态方法的注意事项

静态方法只可以直接访问类变量与静态方法

静态方法不能访问普通成员变量或成员方法

静态方法中不可以使用this关键字(因为this代表的是使用该方法的对象,而静态方法是属于类的,this无从指向,所以不可以使用)

下面我们写一段代码来使用一下静态方法

public class Person2 {
public static void test(){
System.out.println("这是静态方法" );
}
}
public class Test {
public static void main(String[] args) {
System.out.println("这是使用类名调用的:");
Person2.test();
Person2 person2 = new Person2();
System.out.println("这是使用对象调用的:");
person2.test(); }
}

运行结果

下面我们从内存的角度来讲讲静态的原理

先上代码

public class Teacher {
private int age;
private String name;
private static String subject="math";
public Teacher(int age, String name) {
this.age = age;
this.name = name;
} public Teacher() {
} @Override
public String toString() {
return "Teacher{" +
"age=" + age +
", name='" + name + '\'' +
'}';
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public static String getSubject() {
return subject;
} public static void setSubject(String subject) {
Teacher.subject = subject;
}
}
public class Test {
public static void main(String[] args) {
Teacher wang = new Teacher(18, "wang");
Teacher li = new Teacher(19, "li");
}
}

小结:普通成员变量操作各自空间,静态变量操作共享空间

静态代码块,敲重点!!!这个在我们后面学习中会经常使用到

什么是静态代码块呢?

定义在成员位置,使用static修饰的代码块{}

位置:类中方法外

执行随着类的加载而执行且只执行一次,优先于main方法和构造方法的执行

格式

 public class Person {
static { }
}

这里就不深究了后面的文章我找几乎再说说

以上就是static关键字的一些基础知识,如有错误请各位批评指正

Static关键字的使用的更多相关文章

  1. 浅谈Static关键字

    1.使用static关键字声明的属性为全局属性 未使用static关键字指定city之前,如果需要将Tom,Jack,Mary三人的城市均改成Beijing,需要再次声明三次对象的city为Beiji ...

  2. (转)Java中的static关键字解析

    转载: http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: &q ...

  3. PHP的final关键字、static关键字、const关键字

    在PHP5中新增加了final关键字,它可以加载类或类中方法前.但不能使用final标识成员属性,虽然final有常量的意思,但在php中定义常量是使用define()函数来完成的. final关键字 ...

  4. Java Static关键字详解

    提起static关键字,相信大家绝对不会陌生,但是,想要完全说明白,猛的一想,发现自己好像又说不太明白... ...比方说,昨天被一个同学问起的时候... ... 当然,不是所有人都像我一样学艺不精的 ...

  5. 关于Java中的static关键字

    Java中的 static 关键字,确实是一个关键的字(key word),今天就来总结一下它的用法,说说为什么关键. Java中的 static 关键字主要是用来做内存管理的.理解了这句话才能够比较 ...

  6. Java中的static关键字解析

    Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...

  7. c++中static关键字的用法总结

    类中的静态成员真是个让人爱恨交加的特性.我决定好好总结一下静态类成员的知识点,以便自己在以后面试中,在此类问题上不在被动. 静态类成员包括静态数据成员和静态函数成员两部分. 一 静态数据成员: 类体中 ...

  8. static关键字

    static关键字 static是静态修饰符,一般修饰成员.被static修饰的成员属于类,不属于单个这个类的某个对象. 1.static关键字的特点 a:随着类的加载而加载 b:优先于对象存在 (还 ...

  9. C++中的static关键字的总结

    C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用. 1.面向过程设计中的st ...

  10. (转)Java中的static关键字解析

    转自http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: “sta ...

随机推荐

  1. UWP实现第二字幕并且跟随系统的设置

    话不多说,先看一下最终效果 系统设置默认 在系统设置里面更改字幕的显示效果 需求 要求播放器可以显示第二字幕,类似旁白的文字解释.比如片中出现了一个专业术语,这个时候观众可能有些疑惑.所以需要在屏幕上 ...

  2. django xadmin 配置过程

    1.拷贝xadmin的一个下的一个xadmin文件夹放到项目里

  3. 高性能IO —— Reactor(反应器)模式

    讲到高性能IO绕不开Reactor模式,它是大多数IO相关组件如Netty.Redis在使用的IO模式, 为什么需要这种模式,它是如何设计来解决高性能并发的呢? 最最原始的网络编程思路就是服务器用一个 ...

  4. 黎活明8天快速掌握android视频教程--23_网络通信之网络图片查看器

    1.首先新建立一个java web项目的工程.使用的是myeclipe开发软件 图片的下载路径是http://192.168.1.103:8080/lihuoming_23/3.png 当前手机和电脑 ...

  5. 关于idea的一些快捷键

    最近在用idea写代码,熟悉一些快捷键的使用能够让写代码的速度提高,以下快捷键是默认idea的快捷键,当然我们可以自己修改的: 自动补全代码快捷键:CTRL+alt+V 自动格式化代码:CTRL+al ...

  6. egret Exml自定义组件

    有个需求,在A组件里面包裹 B组件: 碰到了一些奇怪的问题,这些问题是由于编辑器bug引起的.创建了皮肤后并没有在default.thm.json直接添加进去,造成拖动组件莫名其妙的bug,这里忘记保 ...

  7. fatal error C1189: #error : This file requires _WIN32_WINNT to be #defined at least to 0x0403. Value 0x0501 or higher is recommended.

    说了原因,下面是修改方法,就是在stdafx.h文件中修改相关的定义,修改完后的效果应该如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #ifndef WINVER ...

  8. EFCore-一对一配置外键小记2

    前后两次遇到这样的错误: The property 'xx' on entity type 'xxxx' has a temporary value. Either set a permanent v ...

  9. Nginx配置upstream并且实现负载均衡

    感谢看过这一些列博文和评论的小伙伴, 我把自己所看到的学到的拿到这里来分享是想和大家一起学习进步, 想听听园友给出的意见, 也是对自己学习过程的一个总结. 技术无止境, 我们仍需努力! 1,话不多说, ...

  10. STL初步学习(queue,deque)

    4.queue queue就是队列,平时用得非常多.栈的操作是只能是先进先出,与栈不同,是先进后出,与之后的deque也有区别.个人感觉手写队列有点麻烦,有什么head和tail什么的,所以说 STL ...