想去另一个世界.|

ywwwik

园龄:2年5个月粉丝:1关注:4

Java中static关键字

摘要:

static关键字是很多朋友在编写和阅读代码时比较难理解的一个关键字,但也是面试尤其笔试的考点。下面就从

  1. static关键字的用途
  2. 常见面试题

两个方面来描述以下我对static关键字的理解

原文链接:http://www.cnblogs.com/dolphin0520/p/3799052.html

一.static关键字用途

在《java编程思想》里有这么一段话:

"static就是没有this的方法,在static方法内部不能调用非静态方法,反过来可以。而且可以在不创建类对象的情况下,仅通过类本身来调用static方法。这实际上就是static方法的主要用途。"
这句话说明了static方法的基本用途,即:

在没有创建对象的情况下完成方法的调用
显然staitc关键字修饰的方法或变量不需要依赖对象去访问,只要类被加载,就可以通过类名进行访问。

static可以修饰成员变量和成员方法,通过编写static代码块也可优化程序性能。

1.static方法

static方法被称为静态方法,由于静态方法不依赖对象即可完成访问,以此对于static方法来说是不存在this的,因为他不依赖于对象,并且由于这个特性,静态方法中无法访问非静态成员方法和非静态成员变量。要注意,反之可以,这也是笔试经常考的东西。
2.static变量

static变量又叫静态变量,静态于非静态变量的区别是:静态变量能被所有对象共享,在内存中只有一个副本,当且仅当类初次加载时会被初始化。而非静态资源在创建对象后能拥有多个副本,各个对象互不影响。

3.static代码块

static关键作用就是优化程序性能,因为他只会在类加载时执行一次。static代码块可以置于类任何地方,类中可以有一个或多个static代码块,在类被加载时,会自上而下顺序依次执行每个static代码块

二.常见笔试题

1.这段代码输出结果是什么?

复制代码
 1 public class Test extends Base{
 2  
 3     static{
 4         System.out.println("test static");
 5     }
 6      
 7     public Test(){
 8         System.out.println("test constructor");
 9     }
10      
11     public static void main(String[] args) {
12         new Test();
13     }
14 }
15  
16 class Base{
17      
18     static{
19         System.out.println("base static");
20     }
21      
22     public Base(){
23         System.out.println("base constructor");
24     }
25 }
复制代码
复制代码
base static
test static
base constructor
test constructor
View Code
复制代码

结果解释:首先我们找到主函数在Test类中,而Test类继承Base类,我们可以把Base类内容拼接到Test类内容上面,所以当Test类加载时,会先执行Base类的static代码块,然后执行Tets代码块,类加载时代码块执行分析完毕,我们发现主函数内创建了Test方法,我们用拼接的思想,Test类创建或顺序执行Test内的构造方法,即父类Base构造方法和Test构造方法。解释完毕。

2.这段代码输出结果是什么?

复制代码
public class Test {
    Person person = new Person("Test");
    static{
        System.out.println("test static");
    }
     
    public Test() {
        System.out.println("test constructor");
    }
     
    public static void main(String[] args) {
        new MyClass();
    }
}
 
class Person{
    static{
        System.out.println("person static");
    }
    public Person(String str) {
        System.out.println("person "+str);
    }
}
 
 
class MyClass extends Test {
    Person person = new Person("MyClass");
    static{
        System.out.println("myclass static");
    }
     
    public MyClass() {
        System.out.println("myclass constructor");
    }
}
复制代码
复制代码
test static
myclass static
person static
person Test
test constructor
person MyClass
myclass constructor
View Code
复制代码

结果解释:我们先找程序的入口主函数,发现在Test类中,当程序运行先执行Test类中的静态代码块,然后发现主函数创建了MyClass的对象,MyClass类被执行,由于MyClass类继承Test类,我们用拼接的思想把Test类的内容放到MyClass内容上方,当MyClass类执行,Test静态代码块执行,然后MyClass静态代码块执行,Test内容中创建了Person的对象,所以执行Person的静态代码块,三个类中静态代码块均执行一次,可以无视静态代码块的执行,看构造方法,Test中用“Test”为参数创建了Person的对象,故执行Person的构造方法,按顺序分别执行Test构造方法,Person以“MyClass为参数的构造方法,MyClass的无参构造“

主要参考:Java中的static关键字解析 - Matrix海子 - 博客园 (cnblogs.com)

 

本文作者:ywwwik

本文链接:https://www.cnblogs.com/ywwwik/p/17658498.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   ywwwik  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.

作曲 : Reol

作词 : Reol

fade away...do over again...

fade away...do over again...

歌い始めの一文字目 いつも迷ってる

歌い始めの一文字目 いつも迷ってる

どうせとりとめのないことだけど

伝わらなきゃもっと意味がない

どうしたってこんなに複雑なのに

どうしたってこんなに複雑なのに

噛み砕いてやらなきゃ伝わらない

ほら結局歌詞なんかどうだっていい

僕の音楽なんかこの世になくたっていいんだよ

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

僕は気にしない 君は気付かない

何処にももういないいない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

忘れていく 忘れられていく

We don't know,We don't know.

目の前 広がる現実世界がまた歪んだ

目の前 広がる現実世界がまた歪んだ

何度リセットしても

僕は僕以外の誰かには生まれ変われない

「そんなの知ってるよ」

気になるあの子の噂話も

シニカル標的は次の速報

麻痺しちゃってるこっからエスケープ

麻痺しちゃってるこっからエスケープ

遠く遠くまで行けるよ

安定なんてない 不安定な世界

安定なんてない 不安定な世界

安定なんてない きっと明日には忘れるよ

fade away...do over again...

fade away...do over again...

そうだ世界はどこかがいつも嘘くさい

そうだ世界はどこかがいつも嘘くさい

綺麗事だけじゃ大事な人たちすら守れない

くだらない 僕らみんなどこか狂ってるみたい

本当のことなんか全部神様も知らない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

僕は気にしない 君は気付かない

何処にももういないいない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

忘れていく 忘れられていく

We don't know,We don't know.