Java学习十一之面向对象中的关键字

一、权限修饰符

限定 类方法、属性、构造方法的使用范围

修饰符同包不同包子类不同包非子类
publicYYYY
protectedYYYN
(默认的)YYNN
privateYNNN

外部类只能使用public和默认的权限修饰符修饰
内部类可以使用所有的权限修饰符

二、abstract,final

final是最终的
可修饰
1、变量 属性就会变成常量
2、类 最终类,不能作为父类
3、方法 最终方法,不能被子类重写
abstract和final功能是冲突的,不能同时使用

final变量:这个变量就不能被修改,常量 , 接口里面: public static final double PI = 3.1415;
final类:这个类就不能被继承
final方法:这个方法就不能被重写

三、this、super

3.1this

两种方式:
1)this()/this(参数列表)
只能出现构造方法中,必须是构造方法的第一行
调用当前类的其它构造方法
2)this.属性/方法名
调用当前对象的属性
在构造方法中,this代表当前被创建的对象
在普通方法中,this就是调用当前方法的对象

3.2super

两种使用方式
1)super()
只能用在构造方法中,必须是第一行
调用父类的构造方法
2)super.属性/方法名
在子类中,调用父类的属性和方法

四、static

static 静态的
使用static修饰的东西都是静态的
都是直属于类的,不需要依赖于对象
类的所有对象都会共享他的静态资源

4.1、属性

1)静态属性:类属性
使用了static修饰的属性
使用:类名.静态属性 /对象名.静态属性
静态属性是不依赖于对象的
2)非静态属性:对象属性,实例属性
没使用static修饰的属性
使用:对象名.非静态属性

4.2方法

1)静态方法:类方法
2)非静态方法:对象方法,实例方法

注意:
1)静态方法中只能调用静态方法,要调用非静态方法,要先生成一个对象再调用,再调用
2)静态方法中只能访问静态属性,非静态属性先生成对象。

4.3类

static 只能修饰内部类

4.4块

块:类中的花括号{};

static{
//这就是一个静态块
}
{
//这就是一个块
}

五、JVM加载类的流程

从上往下依次执行

①使用类时
1.JVM加载类,加载到方法区
2.声明类中的静态资源
3.从上往下一步步执行静态代码
——如果一个静态属性没有初始化,给它一个类0的默认值
②创建对象时
1.定义非静态属性
2、执行非静态代码
——如果一个非静态属性没有初始化,给它一个类0的默认值
3.执行构造方法

继承时
1、加载子类前,必须先加载父类
2、创建子类的对象,先创建出父类的对象

举例(重点)
class  C{
  public C(){System.out.println("c1");}
  public void test(){System.out.println("c2");}
  {System.out.println("c3");}
  static{System.out.println("c4");}
}
class D extends C{
   public D(){System.out.println("d1");}
   public void test(){System.out.println("d2");}
   {System.out.println("d3");}
    static{System.out.println("d4");}
}
public class TestStatic6{
  public static void main(String[] args) {
    C cd=new D();
    cd.test();  //上转型对象
  }
}

在这里插入图片描述
输出结果:
c4 d4 c3 c1 d3 d1 d2
在这里插入图片描述

六、静态属性、静态方法

静态属性、静态方法:
小区里面业主的房子可以看成一个一个的对象,这些都是属于特定的业主所独有。
但是小区里面也有一些公共设施(健身器材、绿地),这些公共设施是属于这个小区的。
但是是可以被所有的业主对象所使用的。

java类里面定义的静态变量和静态方法是属于这个类的,不属于new出来的Student对象,但是可以被所有的对象所使用,当类加载到内存,静态属性和静态方法就可以调用,这个时候没有new任何对象。

使用时候:
1、静态的方法只能访问静态的方法和静态的属性(因为当前对象的实例可以没有创建,
所以静态的方法是没办法调用非静态的方法和属性的)
2、静态的方法中不能写this、super关键字(因为当前的对象实例可能还没有创建,
代表当前类对象的this还有代表父类对象的super可能都还没有创建)

非静态的属性和方法(实例属性和方法)必须通过new对象访问,而静态的属性和方法
是属于类的,在类加载到内存中就可以访问,被所有对象所共享。

七、最终类和抽象类区别

抽象类
1,抽象类中可以有抽象方法,也可以没有抽象方法。
2,抽象类当然可以被继承,因为它就是用来继承的,
3,继承抽象类,若有抽象方法,则子类必须将其抽象方法实现,
4,抽象类中的非抽象方法可以被重写。

最终类和抽象类正好相反
1.,加上final的类就叫最终类,加上final的方法就叫最终方法,
2.,最终类中可以有最终方法也可以没有
3.,最终类不能有子类,最终方法不能被重写
最终类就是被final修饰的类,最终方法就是被final修饰的方法。最终类不能被继承,最终方法不能被重写。

八、类方法和实例方法区别

在类方法中调用本类的类方法可直接调用。 实例方法也叫做对象方法。
类方法是属于整个类的,而实例方法是属于类的某个对象的。
由于类方法是属于整个类的,并不属于类的哪个对象,所以类方法的方法体中不能有与类的对象有关的内容。即类方法体有如下限制:
(1) 类方法中不能引用对象变量;
(2) 类方法中不能调用类的对象方法;
(3) 在类方法中不能使用super、this关键字。
(4)类方法不能被覆盖。
如果违反这些限制,就会导致程序编译错误。
与类方法相比,对象方法几乎没有什么限制:
(1) 对象方法中可以引用对象变量,也可以引用类变量;
(2) 对象方法中可以调用类方法;
(3) 对象方法中可以使用super、this关键字。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_不知名小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值