Java面向对象加强-----静态和非静态(知识点)

1、静态成员

       1)、 每一个类都有一个static池,池中统一存放该类的static变量,为所有对象共享,static变量在类装载之前就被初始化了(即:第一个对象被调用使用之前初始化一次)。

        2)、为什么静态方法中不可以访问非静态成员(变量或者是方法)

        是因为静态方法拿类名就可以直接调用,这是根本就没有类实例,所以无法访问非静态成员(需要通过类实例才可以调用)。

        

        static的基本规则

        1)、一个类的静态方法只能访问静态属性

        2)、一个类的静态方法不可以直接访问非静态方法

        3)、如访问权限允许,static属性和方法可以使用“对象名.”调用,当前页可以使用“实例.”调用。

        4)、静态中不存在当前对象昂视,不能使用this,也不能使用super。

        5)、构造方法不允许声明为static的

        6)、静态方法不可以被非静态方法覆盖:因为静态方法可以通过类的实例调用,如果静态方法被非静态方法覆盖,就会分不清究竟调用的是静态方法还是非静态方法。


       同一个类:

        1)、对于静态方法,其它的静态或非静态方法都可以调用它

        2)、对于非静态方法,其它非静态方法是可以直接调用它的,而其它静态的方法只有通过对象才可以调用它。

        3)、静态方法不可以被非静态方法覆盖

        不同类:无论是调用非静态还是静态,如果被调用其方法为:

        静态方法:通过类名和对象都可以调用(单是通过对象的方式不建议使用,因为非静态也可以通过对象调用到时候怕弄混)。

        非静态方法:只有通过类名才可以调用。


2、静态初始器--静态块

        静态初始器:是一个存在于内中方法之外的静态块。静态初始器仅仅在类加载(第一次使用该类)的时候执行一次。

        功能:通常用来初始化静态类的属性

        通常在进行数据的连接的时候就会需要使用静态块。先进行连接,并且只需要连接一次。

        {System.out.println("A成员。。。。。。");}//实例块
	 static{System.out.println("A静态块");}//静态块

3、静态的导入

  1)、当我们要获取一个随机数的时候,写法为:

double ran=Math.random();

2)、当使用静态导入之后

import static java.lang.Math.random;

可写为:

double ran2=random();

当需要使用到Math白的大量函数的时候可以将静态导入写成如下形式:

import static java.lang.Math.*;

注意:  静态导入不建议过多使用,因为这样容易和自定义函数弄混。



4、静态与非静态方法的覆盖

静态方法不能被非静态覆盖,反之也不行

覆盖方法:前(权限)不能小,后(非运行时)不能大。



5、静态方法与非静态的访问

  静态方法不存在this.和super

  静态方法不可访问非静态(类模板不能访问由其他类生成的类对象)但非静态可以访问静态。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值