1. 什么是Static 关键字?

Static 能够与变量,方法和类一起使用,称为静态变量,静态方法。如果在一个类中使用static修饰变量或者方法的话,它们可以直接通过类访问,不需要创建一个类的对象来访问成员。

实例:

package com.java.JavaStatic;
/**
* Understand Java Static
* @author Jeff
* @date 2016/03/17
* http://www.weixueyuan.net/view/6003.html
*/ public class demo01 {
//定义静态变量a
public static int a=1; //定义变量b
int b=2; //创建静态方法 sum()
public static int sum (int x,int y) {
return x+y;
} public static void main (String[] args) {
//通过类访问变量a
System.out.println("a= "+demo01.a); //实例化对象myDemo访问变量b
demo01 myDemo =new demo01();
System.out.println("b= "+myDemo.b); //通过类访问方法sum
System.out.println("x+y: "+sum(3,5));
}
}

结果:
a= 1
b= 2
x+y: 8

2. Static 内存分配

静态变量属于类,不属于任何独立的对象,所以无需创建类的实例就可以访问静态变量。之所以会产生这样的结果,是因为编译器只为整个类创建了一个静态变量的副本,也就是只分配一个内存空间,虽然有多个实例,但这些实例共享该内存。实例变量则不同,每创建一个对象,都会分配一次内存空间,不同变量的内存相互独立,互不影响,改变 a 对象的实例变量不会影响 b 对象。

实例:

package com.java.JavaStatic;

/**
* Static内存分配
* @author Jeff
* 2016/4/3
* http://www.weixueyuan.net/view/6003.html
*/ public class demo02 {
static int i;
int j; public static void main(String[] args) {
demo02 obj1 = new demo02();
obj1.i = 10;
obj1.j = 20;
demo02 obj2 = new demo02();
System.out.println("obj1.i=" + obj1.i + ", obj1.j=" + obj1.j);
System.out.println("obj2.i=" + obj2.i + ", obj2.j=" + obj2.j);
}
}

结果:
obj1.i=10, obj1.j=20
obj2.i=10, obj2.j=0

3. 什么情况使用静态方法和静态变量

  • 需要通过类访问静态方法和静态变量
  • 需要在静态方法中访问静态变量
  • 静态方法的类型不是对象型

3. 关于静态变量和静态方法的总结:

  • 结论1.构造方法不允许声明为 static 的;
  • 结论2.1.静态方法只能访问静态变量
  • 结论2.2.静态方法不能访问实例变量
  • 结论3.1.静态方法只能够调用静态方法;
  • 结论3.2.静态方法不能够调用非静态方法;
  • 结论4.静态方法中不存在当前对象,因而不能使用 this,当然也不能使用 super
  • 结论5.局部变量不能使用static修饰
  • 结论6.1.静态方法能被静态方法重载
  • 结论6.2.静态方法能被非静态方法重载
  • 结论7.1 静态方法,可以声明object类型,一般不推荐使用静态方法,因为不能通过类访问
  • 结论7.2 非静态方法,可以声明object类型,一般推荐使用,因为可以使用实例访问
  • 结论8. 静态方法只能在静态类中使用
  • 结论9.1.静态方法不能被非静态方法覆盖
  • 结论9.2 静态方法能被静态方法覆盖
  • 结论10 静态方法直接通过类访问
  • 结论11 如访问控制权限允许,静态变量和静态方法也可以通过对象来访问,但是不被推荐
  • 结论12 静态方法且类型对象,不能通过类访问

实例:

package com.java.JavaStatic;

/**
* 静态方法和静态方法总结
* @author Jeff
* 2016/04/03
*/ public class demo03 { public static int a=1;
int b=2; //结论1.构造方法不允许声明为 static 的;
// public static demo03 ()
// {
// System.out.println("我是构造方法");
// } public int sum (int x,int y) {
return x+y;
} //静态方法sum2, int类型 public static int sum2 (int x,int y) {
//结论2.1.静态方法只能访问静态变量
a=3;
x=x+a; //结论2.2.静态方法不能访问实例变量;
//b=3; //结论3.1.静态方法只能够调用静态方法;
demo03.sum3(1, 2); //结论3.2.静态方法不能够调用非静态方法;
//demo03.sum(1,2); //结论4.静态方法中不存在当前对象,因而不能使用 this,当然也不能使用 super
//this.sum3(1, 2); return x+y;
} //静态方法sum3,int类型
public static int sum3 (int x,int y) {
//结论5.局部变量不能使用static修饰
//static int c;
return x+y;
} //结论6.1.静态方法能被静态方法重载
public static int sum3 (int x) {
return x;
} //结论6.2.静态方法能被非静态方法重载
public int sum3 (int x, int y, int z) {
return x+y+z;
}
//结论7.1 静态方法,可以声明object类型,一般不推荐使用静态方法,因为不能通过类访问
public static demo03 object () {
demo03 d=new demo03();
d.b=3;
return d;
} //结论7.2 非静态方法,可以声明object类型,一般推荐使用,因为可以使用实例访问
public demo03 object2 () {
demo03 d=new demo03();
d.b=3;
return d;
} //结论8. 静态方法只能在静态类中使用
public static class superClass {
public static int getAge (int age) {
return age;
} public static String getName (String name) {
return name;
}
} public static class childClass extends superClass { //结论9.1.静态方法不能被非静态方法覆盖
// public String getName (String name) {
// return name;
// } //结论9.2 静态方法能被静态方法覆盖
public static String getName (String name) {
return name;
}
}
public static void main (String[] args) {
//结论10 静态方法直接通过类访问
System.out.println("x+y: "+demo03.sum2(3,5)); //结论11 如访问控制权限允许,静态变量和静态方法也可以通过对象来访问,但是不被推荐
demo03 de=new demo03();
de.sum2(1,2);
de.a=4; //结论12 静态方法且类型对象,不能通过类访问
//demo03.object;
}
}

4.静态导入

对于使用频繁的静态变量和静态方法,可以将其静态导入.
实例:

package com.java.JavaStatic;

//1.通过 import static java.lang.System.*; 将其导入,下次直接调用 out.println() 就可以了
import static java.lang.System.*; //2.导入类中的Math.random
import static java.lang.Math.random; /**
* 静态导入. 对于使用频繁的静态变量和静态方法,可以将其静态导入
* @author Jeff
* @date:2016/4/4
* http://www.weixueyuan.net/view/6003.html
*/ public class demo04 {
public static void main(String[] args) {
//输出语句 System.out.println(); 中的 out 就是 System 类的静态变量,
out.println("产生的一个随机数:" + random());
}
}

Java继承和多态-Static关键字的更多相关文章

  1. Java 继承和多态

                                                        Java  继承和多态 Java 继承 继承的概念 继承是java面向对象编程技术的一块基石,因 ...

  2. “全栈2019”Java第四十一章:static关键字

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  3. C++ 类的继承五(类继承中的static关键字)

    //类继承中的static关键字 #include<iostream> using namespace std; /* 派生类中的静态成员 基类定义的静态成员,将被所有派生类共享 根据静态 ...

  4. 四. Java继承和多态7. Java static关键字

    static 修饰符能够与变量.方法一起使用,表示是“静态”的. 静态变量和静态方法能够通过类名来访问,不需要创建一个类的对象来访问该类的静态成员,所以static修饰的成员又称作类变量和类方法.静态 ...

  5. 四. Java继承和多态8.Java final关键字:阻止继承和多态

    在 Java 中,声明类.变量和方法时,可使用关键字 final 来修饰.final 所修饰的数据具有“终态”的特征,表示“最终的”意思.具体规定如下: final 修饰的类不能被继承. final ...

  6. Java继承和多态实例

    我们知道面向对象的三大特性是封装.继承和多态.然而我们有时候总是搞不清楚这些概念.下面对这些概念进行整理, 为以后面向抽象的编程打下坚实的基础. 封装的概念还是很容易理解的.如果你会定义类,那么相信你 ...

  7. Java继承与多态

    感慨一下,到了现在感觉Java里面很多东西都是模模糊糊,不能这样了,一点点解决吧.今天看了继承与多态的一些内容,感觉看得很浅,先写下来,算是巩固,如果后面看到更好的内容,再慢慢加上去. 继承与多态,他 ...

  8. Java 继承、多态与类的复用

    摘要: 本文结合Java的类的复用对面向对象两大特征继承和多态进行了全面的介绍. 首先,我们介绍了继承的实质和意义,并探讨了继承,组合和代理在类的复用方面的异同.紧接着,我们依据继承引入了多态.介绍了 ...

  9. Java:final、static关键字 详解+两者结合使用

    一  final关键字 1) 关于final的重要知识点 final关键字可以用于成员变量.本地变量.方法以及类. final成员变量必须在声明的时候初始化或者在构造器中初始化,否则就会报编译错误. ...

随机推荐

  1. [Git] 018 冲突在所难免,需要巧妙化解

    0. 回顾 [Git] 005 初识 Git 与 GitHub 之分支 中"4.2 情形二"的 9 提及了"解决冲突" 当时没有展开,这回详谈 我这回反其道而行 ...

  2. Oracle 修改数据文件路径的方法

      1. 关闭数据库,然后启动至mount状态 sqlplus / as sysdba shutdown immediate startup mount 2. 修改物理文件: 我这边将: c:\cwd ...

  3. servlet3.0文件上传与下载

    描述:文件上传与下载是在JavaEE中常见的功能,实现文件上传与下载的方式有多种,其中文件上传的方式有: (1)commons-fileupload: (2)Servlet 3.0 实现文件上传 (3 ...

  4. SELECT 与 SET给标量赋值

    本文转自 :https://blog.csdn.net/perddy/article/details/4033406 SQL Server推荐使用 SET 而不是 SELECT 对变量进行赋值.当表达 ...

  5. 字符串中的replace方法

    String.prototype.replace() 该方法作为字符串中非常常用的方法, 今天我们具体介绍一下它的用法 语法格式 someString.replace(regxp | substr, ...

  6. PDFObject的使用(转)

    1.pdfobject.js官网:https://pdfobject.com/ 2.在html文件中引入这个文件,以pdfobject.min.js为例 1 <script type=" ...

  7. 自定义UICollectionLayout

    #import "AppDelegate.h"#import "CircleLayout.h"#import "CollectionViewDataS ...

  8. nsswitch.conf - 系统数据库及名字服务开关配置文件

    DESCRIPTION C 程序库里很多函数都需要配置以便能在本地环境正常工作, 习惯上是使用文件(例如`/etc/passwd') 来完成这一任务. 但别的名字服务, 如网络信息服务NIS, 还有域 ...

  9. PHP7搭建项目遇到的坑

    报错一:该网页无法正常运作情况原因记录 code 500 原因:由于php.ini配置文件中错误显示关闭导致 解决方法: 修改php.ini配置文件 display_errors = On displ ...

  10. Linux之目录与路径

    特殊的目录: “.”,代表此层目录 “..”,代表上一层目录 “-”,代表前一个工作目录 “~”,代表“目前用户身份”所在的主文件夹 “~account”,代表account这个用户的主文件夹(acc ...