Java方法

Posted zohnn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java方法相关的知识,希望对你有一定的参考价值。

  1. 类是某一类事物的描述,是抽象的、概念上的定义
  2. 类是创建Java对象的模板,定义着属性和方法,是向上抽取的产物,不可以直接使用
  3. 一个类里面可以包含以下变量:
  4. 局部变量:在方法、构造方法内部或语句块中定义的变量,随着方法生死而生死
  5. 成员变量:定义在类里面方法体外面的变量,在创建对象的时候实例化
  6. 类变量:也称静态变量,能用类名调用,被所有对象所共享,需要static修饰

对象

  1. 万事万物皆对象,所有这些对象都有自己的状态(属性)和行为(方法),是类的实例
  2. 创建了的对象都会在堆内存中,如果只声明了没new,栈指向null
  3. 对象是个动态的实体,每个对象都有属于自己的属性值和方法,能随着行为而发生改变

构造方法

  1. 创建对象时用的方法,而且仅执行一次,用于给new的对象赋初始值
  2. 构造方法没有返回值,因为他是来创建对象的,对象创建完方法就执行结束
  3. 一个类可以有多个构造方法
  4. 当构造方法被private修饰,代表其他程序无法创建类对象
  5. 在当前类的构造方法里调用另一个构造方法可以用this关键字,不能用构造方法名
  6. 在继承里,父类的构造方法会先执行,因为构造器第一行有默认super()语句

构造代码块

  1. 定义在类中成员位置的代码块
  2. 优先于构造方法执行,所以能用于执行所有对象均需要的初始化动作
  3. 每次new一个对象都会执行一次构造代码块

静态代码块

  1. 定义在成员位置,但是用static关键字修饰
  2. 静态代码块优先于构造代码块、主方法执行
  3. 不管创建多少对象,静态只执行一次
  4. 相比构造代码块,能给静态变量赋值
static:
  1. 静态内容存放于静态区,优先于对象存在,且不能使用this和super
  2. 同一个类中,静态成员只能访问静态成员,不管属性还是方法
  3. 用静态成员时,不需要创建对象,直接用类名访问即可
  4. 被static修饰的成员变量属于类,不属于这个类的某个对象了
  5. static修饰的成员变量被多个对象共享,修改同一个值
  6. 通常用public static final修饰一个变量变为静态常量,名字全用大写,以_连接

执行顺序:静态代码块 -> 构造代码块 -> 构造方法

内部类

1.写在别的类的内部的类,就叫内部类,那个别的类则叫外部类
2.在内部类可以直接访问外部类的所有成员,反之不行

成员内部类

  1. 定义在外部类中的成员位置
  2. 不能有static
    访问时:
    外名.内名  变量名  =  new 外名().new 内名();

方法内部类

  1. 定义在成员方法里面的位置

局部内部类

  1. 定义在外部类中的方法体中的局部位置
    访问时:
    外名  变量名  =  new  外名();
    变量名.方法名();

匿名内部类

  1. 临时定义某一指定类型的子类
  2. 创建匿名内部类时,会立即创建该类的实例,而定义会立即消失,所以不能重复使用
  3. 匿名内部类里不能定义构造函数
  4. 不能存在任何静态变量或方法
  5. 匿名内部类其实也就是匿名对象和局部内部类
  6. 匿名内部类不能是抽象的,所以必须要实现所有父类的抽象方法

匿名对象

  1. 创建对象时,没有把地址值赋给某个变量,只有创建对象的语句
  2. 匿名对象没有变量名,能直接使用,但只能使用一次
  3. 匿名对象也可以用在方法的参数里,或是返回值里

抽象类(abstract)

  1. 方法功能声明相同,但是功能主体不同,可以向上抽取方法声明,即变成抽象方法
  2. 抽象类要用abstract关键字修饰
  3. 抽象方法一定要定义在抽象类中
  4. 实例化抽象方法不安全,也不允许
  5. abstract不可以与private共存,也不可以跟final、static共存

接口类(implements)

  1. 接口是功能的向上抽取,是比抽象类更抽象的类
  2. 接口也是一种引用数据类型,因为有多态,有多个具体实现
  3. 接口里只有描述,没有实现的方法,具体要由子类完成,做到定义与实现分离
  4. 接口里的方法全都是公共访问的方法,实现类必须重写接口里的所有抽象方法
  5. 一个实现类可以实现多个接口,也可以继承父类的同时实现接口
  6. 在接口类里面可以用extends继承多个接口类
  7. 1.8后,接口可以有普通方法,但是要用default关键字修饰

接口的好处

  1. 使代码更简洁
  2. 用接口做引用类型,可以有多种多样实现,维护成本低
  3. 降低代码耦合度
  4. 解决了单继承的局限性

接口和抽象类的异同:

  • 相同:
    • 都不能直接实例化
    • 都包含抽象方法,用于描述能给子类提供哪些服务
    • 都是上层的抽象层
  • 区别:
    • 抽象类可以有非抽象方法,避免子类重复重写,提高代码复用性;接口一般而言,只能有抽象方法;
    • 抽象类只能继承一个父类;接口类可以继承多个父接口,因为接口只有抽象方法;
    • 抽象类可以有变量;接口类只能有final修饰的常量;
    • 抽象类主要是用来抽象类别,即根源本质;接口类主要用于抽象动作操作;
抽象类 接口
默认的方法实现 它可以有默认的方法实现 接口一般是完全是抽象的它一般不存在方法的实现
实现 子类使用 extends 关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。 子类使用关键字 implements 来实现接口它需要提供接口中所有声明的方法的实现
构造器 抽象类可以有构造器 接口不能有构造器
与正常Java类的区别 除了不能实例化抽象类之外它和普通Java类没有任何区别 接口是完全不同的类型
访问修饰符 抽象方法可以有 public、protected 和 default 这些修饰符 接口方法默认修饰符是 public,不可以使用其它修饰符。
main方法 抽象方法可以有 main 方法并且可以运行它 接口没有 main 方法,因此不能运行它
多继承 抽象方法可以继承一个类和实现多个接口 接口只可以继承一个或多个其它接口
速度 它比接口速度要快 接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。
添加新方法 如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码。 如果你往接口中添加方法,那么你必须改变实现该接口的类。

以上是关于Java方法的主要内容,如果未能解决你的问题,请参考以下文章

java执行方法一定执行类吗

java中静态方法和实例方法的区别

java方法和本地方法

Java_方法(函数)

java构造方法和方法的区别

java中构造方法和方法有啥区别