Java中的static关键字深入理解

在学习Java以来很长一段时间,我都不能理解为什么修饰一个方法的关键字各不相同,为什么有的方法可以直接调用,而有的方法需要用对象才能调用。毫不夸张的说,最近一次让我决定去整理清楚static关键字,是因为在写jdbc工具类时,其中通过静态代码块来实现加载驱动才让我对它有了新的认识。

通俗来讲,归为几点:

  • 由static关键字修饰的方法或成员变量,不需依赖对象,就可直接访问。(通过 类名.方法名() 或 类名.属性 直接调用)
  • static关键字不会影响到变量或方法的作用域
  • static关键字不允许修饰局部变量
  • 静态方法中不能使用this
  • 无论方法还是变量:由static修饰的静态方法不能访问非静态的方法或成员变量,但是反之,非静态的方法可以访问静态的或非静态的。
  • static 关键字避免了先要new出对象的繁琐和资源消耗,因此常被用在工具类中。

下面来仔细介绍以下static关键字的作用,主要为以下四个方面:

修饰成员变量

static关键字修饰的成员变量称为静态成员变量,也称静态变量。有了静态变量与之对应的就是非静态变量

  • 静态变量:被所有对象共享,内存中只有一个副本,当且仅当类被初次加载时被初始化一次
  • 非静态变量:是对象拥有的,当对象被创建时被初始化,内存中存在多个副本且互不影响
public class Test{
	public static void main(String[] args) {
		System.out.println(Person.name);
		System.out.println(new Person().age);
	}
}
class Person{
	static String name;
	int age;
}

修饰方法

static修饰的方法称为静态方法。静态方法可以直接调用类的静态变量和其他静态方法,不能直接调用成员变量和非静态方法(除非通过对象调用)。

class A {
	static {
		System.out.println("静态代码块");
	}
	static final int i;
	int j;
	static void method() {
		System.out.println(i);//直接访问静态变量
		System.out.println(new D().j);//静态方法中访问非静态变量需要通过对象调用

		method1();//直接调用静态方法
		new D().method2();//静态方法中访问非静态方法需要通过对象调用
	}

	static void method1() {
		System.out.println(i);//静态方法中直接访问静态变量
	}
	void method2() {
		System.out.println(i);//非静态方法中可以直接访问静态变量
	}
}

静态代码块

static修饰的代码块叫做静态代码块。当类初次被加载时,会按照代码块顺序执行一次。用来优化程序。
例如在开头提到的用在JDBC工具类中,使用静态代码块来加载资源,当类被初始化时只执行一次。
注:构造方法用于对象的初始化,静态代码块用于类的初始化操作。

静态导包

相比于以上三种,第四种是我之前没有接触过的。
在用import导入包或者类时,可以用static修饰包名或者类,表示静态导入。不同于非static导入,采用static导入包后,在不与当前类的方法名冲突的情况下,无需使用“类名.方法名”的方法去调用类方法了,直接可以采用"方法名"去调用类方法,就好像是该类自己的方法一样使用即可。

public class Test {
	static void method1() {
		System.out.println("static method1");
	}

	static void method2() {
		System.out.println("static method2");
	}
}

静态导入之后:

import static com.liu.stuatic.Test.method1;

public class Client {
	public static void main(String[] args) {
		method1(); // 通过静态导入的方法不需类名直接调用
		StaticTest.method2();
	}
}

到此这篇关于Java中的static关键字深入理解的文章就介绍到这了,更多相关Java中的static关键字内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • InterlliJ IDEA2020新建java web项目找不到Static Web的解决

    由于IDEA版本更新,在新建工程的时候找不到Static Web,而且在插件里也找不到,没法下载. 如图:没有Static Web 新建项目的方法如下: File-->Project-->Java Enterprise-->Web Application--next 项目命名-->选择文件存放路径--Finish 在那个窗口新建由自己选择. 新建项目结构 运行效果 到这里就创建好了,根据自己的需求建文件就可以了. 到此这篇关于InterlliJ IDEA2020新建java web

  • JAVA面试题 static关键字详解

    问题 面试官Q1:请说说static关键字,你在项目中是怎么使用的? static 关键字可以用来修饰:属性.方法.内部类.代码块: static 修饰的资源属于类级别,是全体对象实例共享的资源: 使用 static 修饰的属性,静态属性是在类的加载期间初始化的,使用类名.属性访问 案例说明 ①修饰成员变量 package com.ant.param; public class StaticFieldDemo { public static void main(String[] args) {

  • Java static方法用法实战案例总结

    本文实例讲述了Java static方法用法.分享给大家供大家参考,具体如下: 一 点睛 用static可以声明一个静态属性变量,其实,也可以用来声明方法,用它声明方法时也称为"类方法".使用static定义的方法可以由类名直接调用. static的main方法可以接收一个String类型的数组参数,该数组中保存执行Java命令时传递给所运行的类的参数.格式如下: java 类名称 参数1 参数2 参数3 二 实战--静态方法的声明 1 代码 class Person { String

  • Java中的static关键字深入理解

    在学习Java以来很长一段时间,我都不能理解为什么修饰一个方法的关键字各不相同,为什么有的方法可以直接调用,而有的方法需要用对象才能调用.毫不夸张的说,最近一次让我决定去整理清楚static关键字,是因为在写jdbc工具类时,其中通过静态代码块来实现加载驱动才让我对它有了新的认识. 通俗来讲,归为几点: 由static关键字修饰的方法或成员变量,不需依赖对象,就可直接访问.(通过 类名.方法名() 或 类名.属性 直接调用) static关键字不会影响到变量或方法的作用域 static关键字不允

  • Java中的static关键字全面解析

    static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列举了一些面试笔试中常见的关于static的考题.以下是本文的目录大纲: 一.static关键字的用途 二.static关键字的误区 三.常见的笔试面试题 若有不正之处,希望谅解并欢迎批评指正. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.com/dolphin05

  • 详解java中的static关键字

    Java中的static关键字可以用于修饰变量.方法.代码块和类,还可以与import关键字联合使用,使用的方式不同赋予了static关键字不同的作用,且在开发中使用广泛,这里做一下深入了解. 静态资源(静态变量与静态方法) 被static关键字修饰的变量和方法统一属于类的静态资源,是类实例之间共享的.被static关键字修饰的变量.方法属于类变量.类方法,可以通过[类名.变量名].[类名.方法名]直接引用,而不需要派生一个类实例出来. 静态资源分类存放的好处 JDK把不同的静态资源放在了不同的

  • 解析Java中的static关键字

    一.static关键字使用场景 static关键字主要有以下5个使用场景: 1.1.静态变量 把一个变量声明为静态变量通常基于以下三个目的: 作为共享变量使用 减少对象的创建 保留唯一副本 第一种比较容易理解,由于static变量在内存中只会存在一个副本,所以其可以作为共享变量使用,比如要定义一个全局配置.进行全局计数.如: public class CarConstants { // 全局配置,一般全局配置会和final一起配合使用, 作为共享变量 public static final in

  • Java中的static关键字你了解多少

    目录 一.static关键字的用途 1)static方法 2)static变量 3)static代码块 二.static关键字的误区 1.static关键字会改变类中成员的访问权限吗? 2.能通过this访问静态成员变量吗? 3.static能作用于局部变量么? 三.常见的笔试面试题 1.下面这段代码的输出结果是什么? 2.这段代码的输出结果是什么? 3.这段代码的输出结果是什么? 总结 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: “static方法就是没有th

  • Java中的static关键字修饰属性和方法(推荐)

    目录 static关键字 1.static修饰属性(静态属性) 1.1.哪些成员属性可以被static修饰. 1.2.静态属性的访问. 2.static关键字修饰方法 1.那些方法可以使用static修饰 2.常见的问题 static关键字 static关键词与对象无关.static关键字主要修饰四个部分的内容 这里我们主要介绍static修饰属性和修饰方法. 1.static修饰属性(静态属性) 1.1.哪些成员属性可以被static修饰. 我们把static修饰的属性称为静态属性,又叫类属性

  • 深入了解Java中的static关键字

    目录 static修饰成员变量 static修饰成员方法 static成员变量初始化 static修饰成员变量 static修饰的成员变量,称为静态成员变量,静态成员变量最大的特性:不属于某个具体的对象,是所有对象所共 享的 public class Student{ public String name; public String gender; public int age; public double score; public static String classRoom = "Bi

  • Java中的final关键字深入理解

     java final关键字详解: 前言: Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用final关键字的实例.final经常和static一起使用来声明常量,你也会看到final是如何改善应用性能的. final关键字的含义? final在Java中是一个保留的关键字,可以声明成员变量.方法.类以及本地变量.一旦你将引用声明作final,

  • java 中的static关键字和final关键字的不同之处

    static 1.在类中,用static修饰的属性,称为静态属性.为这个类的所有对象所共有,存放在静态存储区,所有该类的对象都可以访问且访问的都是同一变量.可以用作计数器,来统计总共创建了多少个各类的对象. 2.在类中,用static 修饰的方法为静态方法,在静态方法中不可以访问非静态的属性和方法,但在非静态方法中可以访问静态方法和属性:且static方法多态失效,不能使用this. 3.由于静态属性和方法是属于该类的所有对象的,所以可以用类名.静态属性/方法名---来访问. 4.static

  • 深入理解Java中的final关键字_动力节点Java学院整理

    Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用final关键字的实例.final经常和static一起使用来声明常量,你也会看到final是如何改善应用性能的. final关键字的含义? final在Java中是一个保留的关键字,可以声明成员变量.方法.类以及本地变量.一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如

随机推荐