【Java】Class-类-知识点

一、外部类、内部类、局部内部类

1.类指外部类,最大的类,修饰符有public(表示该类在项目所有类中可以被导入),default(该类只能在同一个package中使用),abstract,final

2.内部类指位于类内部但不包括位于块、构造器、方法内,且有名称的类,修饰符有public,private,protected访问控制符,也可以用static,final关键字修饰,public和private比较简单,一个表示所有可以被所有类访问,一个表示只能被自身访问,protected修饰的成员类可以被同一个包中的类和子类访问。而default修饰的成员类只能被同一个包中的类访问。

3.局部内部类指位于块、构造器、方法内的有名称类,最多只能有final修饰

二、类之间的关系

useres-a: 依赖关系,A类会用到B类,这种关系具有偶然性,临时性。但B类的变化会影响A类。这种在代码中的体现为:A类方法中的参数包含了B类。

is-a 表示继承:Gadget is-a Widget就表示Gadget 继承 Widget;

has-a 表示从属:Gadget has-a Sprocket就表示Gadget中有Sprocket的引用,Sprocket是Gadget的组成部分;

like-a 表示组合:如果A like-a B,那么B就是A的接口

三、发生多态

Java多态有两种情况:重载和覆写

覆写中,运用的是动态单分配,是根据new的类型确定对象,从而确定调用的方法;

重载中,运用的是静态多分派,即根据静态类型确定对象,因此不是根据new的类型确定调用的方法

四、继承与实现

之间的关系为继承,只能单继承,但可以多层继承

接口之间的关系为实现,既可以单实现,也可以多实现

接口接口之间的关系为继承,既可以单继承,也可以多继承

五、类初始化顺序
  • 父类的静态代码块
  • 子类的静态代码块
  • 父类的普通代码块
  • 父类的构造方法
  • 子类的普通代码块
  • 子类的构造方法

类初始化顺序详细

类加载器详细

五、子类调用

1、子类构造函数调用父类构造函数用super
2、子类重写父类方法后,若想调用父类中被重写的方法,用super
3、未被重写的方法可以直接调用。

子类不可以继承父类的构造方法,只可以调用父类的构造方法。

super()表示子类在初始化时调用父类的空参数的构造函数来完成初始化。

六、静态类注意

1.静态内部类才可以声明静态方法
2.静态方法不可以使用非静态变量
3.抽象方法不可以有函数体

七、内部类

(1)把类定义在另一个类的内部,该类就被称为内部类
举例:把类B定义在类A中,类B就被称为内部类。

(2)内部类的访问规则
A:可以直接访问外部类的成员,包括私有
B:外部类要想访问内部类成员,必须创建对象

(3)内部类的分类
A:成员内部类
B:局部内部类
C:匿名内部类

(4)成员内部类访问规则
成员内部类不是静态的:
外部类名.内部类名 对象名 = new 外部类名().new 内部类名();
成员内部类是静态的:
外部类名.内部类名 对象名 = new 外部类名.内部类名();

(5)局部内部类
A:局部内部类访问局部变量必须加final修饰。
B:为什么呢?
因为局部变量使用完毕就消失,而堆内存的数据并不会立即消失。
所以,堆内存还是用该变量,而改变量已经没有了。
为了让该值还存在,就加final修饰。
通过反编译工具我们看到了,加入final后,堆内存直接存储的是值,而不是变量名。

(6)匿名内部类(掌握)
A:是局部内部类的简化形式
B:前提
存在一个类或者接口
C:格式:
new 类名或者接口名() {
重写方法;
}
D:本质:
其实是继承该类或者实现接口的子类匿名对象

八、匿名内部类

匿名内部类的创建格式为: new 父类构造器(参数列表)|实现接口(){
//匿名内部类的类体实现
}
使用匿名内部类时,必须继承一个类或实现一个接口
匿名内部类由于没有名字,因此不能定义构造函数
匿名内部类中不能含有静态成员变量和静态方法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java核心知识点整理 1.Java中没有多继承,而是用接口来代替多继承 2.运行一个已经编译的程序时,Java解释器总是从指定的main方法中的代码开始执行,因此,执行代码中必须有一个main函数。 3.Java是典型的强型语言,即必须声明变量的型,Java中有8种型,6种数值型(4个整数型和2个浮点型)、一个字符型和一个boolean型。 想学习java可以来这个群,首先是二二零,中间是一四二,最后是九零六,里面有大量的学习资料可以下载。 4.强制型转换: int nx = (int) x; // (语法:用圆括号将目标型括起来,后面跟上要转换的变量); 5.Java不能为单独的方法,如main方法,定义局部常量,而只能为定义常量,供该的所有方法使用,所以,通常称之为常量。如: class UsersConstants{ 2public static final double g = 32; public static final double main(String[] args){ System.out.println(g); } } 注意:常量定义于main方法的外边,而且必须有关键字 static final; 6.字符串的子串: String str = hello”“; String str1 = str.substring(0,4); //输出hell 7.不要用==运算符来测试两个字符串是否相等,该运算符只能判断两个字符串是否存在同一个位置。 用equals. String str = “hello”; str.equals(”hell”); // return false; 8.对象的行为、状态、标识 9.面向过程与OOP

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值