java学习总结
萧禾财 Lv4

Java开发入门

Java概述

Java开发环境搭建

Java运行机制

Java程序运行时,要经过编译和运行两个步骤

  • 首先采用通用的java编译器将java源程序编译成为与平台无关的字节码文件(class文件)
  • 然后由java虚拟机(JVM)对字节码文件解释执行。

编译后的.class文件可以通过不同版本的JVM,直接在相应的操作系统中运行。

Java编程基础

Java程序的组成要素

标识符

关键字

注释

数据类型

常量

变量

数据的标准输入、输出

通过键盘输入数据

通过Scanner类来实现键盘的数据输入

  1. 引用Scanner所在的包:import java.util.Scanner;

  2. 定义Scanner对象:Scanner input =new Scanner(System.in);
    其中对象名(input)由程序员自定义,systeam.in 表示输入设备——键盘

  3. 通过输入对象调用相应的方法接受相应类型的数据。

    格式 接受数据类型
    input.nextByte() 接受一个byte型数据
    input.nextInt() 接受一个int型数据
    input.nextShort() 接受一个short型数据
    input.nextLong() 接受一个long型数据
    input.nextFloat() 接受一个float型数据
    input.nextDouble() 接受一个double型数据
    input.nextLine() 接受一个string型数据

代码演示:

1
2
Scanner input =new Scanner(Systen.in);
int a =input.newInt();

显示屏输出数据

常见方法:

方法 特点
Systeam.ou.print(字符串) 显示字符串内容 不换行
Systeam.out.println(字符串) 显示字符串内容,有换行
Systeam.ou.printf(“字符串”,变量列表) 与C语言相同,按格式显示字符串内容

字符串可以是单个字符串,可以是其他变量,也可以是字符串和其他变量通过加号“+”拼接成的字符串。

运算符和表达式

选择结构语句

if语句

switch语句

循环结构语句

while循环

do…while循环

for循环

循环嵌套

跳转语句

方法

方法的定义

Java中的方法类似于C语言中的函数 但方法又有不同的含义。

Java中的方法是类的动态属性,表示类具有的功能和行为,用来进行对象之间的信息传递。并且所有的方法必须再类中定义。

方法定义格式:

1
2
3
4
[修饰符]返回值类型 方法名(形参 1 ,形参 2,....){
//方法体
return 返回值
}

修饰符有俩种:

  • 访问权限:
    public protected private (默认)

  • 描述方法:

    static:静态修饰符
    abstract:抽象修饰符
    final:最终修饰符

方法的调用

方法调用时,注意:

  1. 形参和实参特征匹配:参数个数 参数的数据类型
  2. 参数的传递包括传值的传址
    传值时:形参的变化不改变实参
    传址时:形参的值会改变实参的值
  3. 如果方法有返回值利用return,获取方法的返回值

方法的重载

方法重载的定义:

​ 在同一个作用于内,方法名相同,参数特征不同(参数的个数或参数的类型不同)的一系列方法

方法重载的调用机制

  1. 匹配方法名
  2. 匹配参数特征

数组

一维数组

数组的声明
  1. 数组类型 数组名称 [ ]
  2. 数组类型 [ ] 数组名称

数组类型可以是 基本数据类型或引用数据类型

[ ] 是数组的标志 可以放在数组名称后面 以可以放在前面

创建数组

声明数组只是定义一个数组,并没有开辟储存空间,需通过创建数组才能为数组开辟指定长度的储存空间。

  • 数组名称 = new 数组类型 [数组长度]
数组访问

数组初始化

二维数组

类与对象

类的定义

类是对象的抽象,它用于描述一组对象的共同特征和行为。

类中可以定义成员变量和成员方法。

  • 成员变量用于描述对象的特征,也被称作属性
  • 成员方法用于描述对象的行为,可简称为方法

类的定义格式为

1
2
3
4
5
6
7
8
[类修饰符] class ClassName{

//成员变量定义

//成员方法定义

}

类修饰符有:public abstract final (默认空)

注意:

  1. 当类修饰符为public时,表示该类为公共类,类名必须于文件名相同,且一个Java文件中只能包含一个公共类,但可包含多个非公共类。
  2. 类名的各个单词首字母都要大写;成员变量名,成员方法名称第一个字母小写,其他单词首字母都大写。

成员变量

定义格式:

  • [修饰符] 数据类型 成员变量名称

赋初始值:

  1. 声明时直接给定初始值
  2. 如果没有明确指定变量初始值,由系统给定默认的初始变量
  3. 通过构造方法给成员变量赋值

系统不会为局部变量设置初始值

成员方法

定义格式:

1
2
3
[修饰符] 返回数据类型 方法名(形参列表){
//方法体
}

与普通方法基本相同

对象的声明、实例化

程序要完成具体的功能,需要通过实例化对象调用类成员来实现。

在使用对象前,需声明对象,然后为该对象创建创建储存空间,为成员变量给定初始值。

具体格式为:

  • 类名 对象名称;
    对象名称 = new 类名(实参列表);

简化版:

  • 类名 对象名称 = new 类名(实参列表);

类成员的访问

在类内自身的成员变量和成员方法可以直接访问,而在类外一般通过类对象来访问。

具体格式为:

  • 对象名.成员变量;
  • 对象名.成员方法;

类的封装性

image-20220720152717679

  • public 允许在类外且项目内任何地方访问
  • 默认 允许在类外且包内的任何地方访问
  • protected 允许在类外且子类内的任何地方访问
  • private 只允许在类内访问

构造方法

构造方法的定义

构造方法是类的一种特殊方法,主要作用是在创建对象的同时,初始化类的实例对象。

构造方法必须满足如下两个条件:

  1. 构造方法的方法名必须与类名相同
  2. 构造方法没有返回值,因此方法同定义不需要返回类型修饰符,void也不需要,且方法体中不能用return。

image-20220720161131877

构造方法具有方法的共性,但也有特殊之处:

  1. 构造方法的方法名必须与类名相同
  2. 构造方法没有返回值,因此方法头定义不需要返回类型修饰符
  3. 构造方法的一般作用是对对象成员的初始化
  4. 构造方法在用户创建对象时,由系统自动调用进行初始化
  5. 构造方法的修饰符只能为访问修饰符

类中系统默认给定无参构造方法

构造方法的重载

This关键字

具体用法:

  • 在类方法中调用对象成员时,系统默认在对象成员前加上this,表示访问的是当前对象成员 即成员变量或对象方法
  • 通过this关键字可以明确访问类成员,解决于局部变量名称冲突问题
  • 当需要在构造方法中调用另一个构造方法时,可以通过执行“this([实参1 实参2 …])”来实现

对象数组

对象数组的声明和创建

  1. 声明和创建数组
    类名 [] 数组名 =new 类名[n];
  2. 创建对象储存空间
    数组名[i] =new 类名([实参列表])

数组对象的访问

格式为:

数组名[i].成员;

子对象

子对象定义:

所谓子对象,就是一个类对象作为另一个类的成员

类与类之间利用关系

类与类之间的关系有:

  1. 包含关系
  2. 利用关系
  3. 继承关系

static关键字

静态成员变量

使用static关键字修饰得成员变量,称之为静态成员变量

格式为:

  • [修饰符] static 数据类型 变量名;

静态成员变量和一般成员变量区别:

  1. 归属及内存分配空间不同
    一般成员变量是属于对象得,即只有创建了对象后,一般成员变量才存在,且其内存分配空间于各自得对象相关。
    静态成员变量是属于类的,即在装载类定义代码时,系统为静态成员变量分配得独立得储存空间,所有属于这个类得对象都共享这个储存空间

  2. 调用方法不同
    静态成员变量时属于类得,但也可以看作对象得成员变量,所以静态成员变量除了可以作为一般成员变量通过对象调用外,还可以通过类名来调用
    类名.成员变量名
    对象名.成员变量名

静态成员方法

使用static修饰的成员方法,就是静态成员方法。

静态成员方法也属于类,在装载了类定义代码后,就可以通过类来调用静态成员方法。同样,也可以利用对象来调用静态成员方法

调用格式:
类名.成员方法([实参列表])

对象名.成员方法([实参列表])

静态代码块

载Java类中,使用一大对大括号括起来的若干行代码称之为一个代码块,用static关键字修饰的代码块被称之为静态代码块。

当类被加载时,静态代码块会被执行。由于类只加载一次,因此静态代码块只被执行一次。

静态代码块常用于进行初始化。

继承和多态

类的继承

继承的概念

在Java中类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类称之为子类(派生类),现有类称之为父类(超类、基类)。

类的继承具有传递性,即子类还可以派生子类,最终形成一个类层次结构。

按照继承的方式的不同,继承可以分为直接继承和间接继承。

直接继承是由父类直接派生出子类,间接继承是由父类派生出的子类的子类。

继承的定义

想声明一个类继承另一个类,需要使用extends关键字

具体格式为:

1
2
3
4
5
[修饰符]class 子类名 extends 父类名{

//类体

}

java中 一个子类只能继承一个父类,即单继承。

子类自动继承父类中除了构造方法外的所有属性和方法。

方法的重载和覆盖(重写)

在继承关系中,当子类中的声明的成员方法与父类中某个成员方法名字相同但参数特征不同时,也称方法重载。

当子类中声明的成员方法与父类中某个成员方法原型相同时,子类方法会覆盖父类方法,也称子类重写了父类方法。

super关键字

当子类重写了父类方法后,子类方法会覆盖子类父类的相应方法,使得无法访问父类被重写的方法。

super关键字就可以解决这个问题。

可以通过super关键字来访问父类的成员变量,成员方法,构造方法。

super关键字的具体格式为:

super.成员变量

super.成员方法([实参 1 ,实参 2 …])

构造方法

在继承关系中,当创建子类对象时,不但会调用子类构造方法,还会调用父类构造方法。

调用机制:

  1. 创建子类对象时,系统自动调用父类后,在调用子类构造方法。
  2. 调用顺序是,首先在子类中找到匹配的构造方法,并进入方法体,调用父类构造方法,然后返回执行子类构造方法后续语句。
  3. 调用父类构造方法时,如果子类构造方法中没有显式调用或显式调用语句,则默认调用父类的无参构造方法。
  4. 显式调用语句“super( )”或”super(实参1,实参2…)”必须放在子类构造方法体的最前面。

多态

多态的定义

多态性是指对于同一消息,不同类的对象做出的不同反应的现象。

是指不同类的对象调用同一个方法名的成员方法时,执行不同代码段的现象。

要实现多态性,需具备:

  1. 声明父类的引用,让父类引用指向子类存储空间,通过父类的引用的调用方法。
  2. 要调用的方法必须包含在父类和子类中。

抽象类

抽象的定义

随着抽象层次的不断加深,可能会出现抽象概念类,由于这些类是抽象的,所以有的方法不能具体实现。

抽象方法和抽象类的定义格式:

1
2
3
4
5
6
7
abstract class 抽象类名{

//成员变量的声明

[修饰符] abstract 返回值类型 方法名([参数列表]); //抽象方法定义

}
  • 抽象类本身不能被实例化的类,只能作为其他类的父类。
  • 子类必须实现父类的抽象方法,否则子类不能实例化对象。

接口

接口的定义

接口用关键字interface修饰,包括成员变量和成员方法。

成员变量为常量 默认使用 public static final 修饰 允许进行一次且仅一次的赋值。

成员方法全部为抽象方法,默认使用关键字 public abstract 修饰

具体定义为:

1
2
3
4
5
6
[public] interface 接口名{
//成员变量的声明,修饰符(public static final) 可省
变量类型 变量名称 = 常量值;
//抽象方法的声明,修饰符(public abstract)可省
返回值类型 方法名(形参1 ,形参2 ....);
}

接口的实现

接口中的成员方法只能定义为抽象类,它本身不能提供方法的实现。

接口中的抽象方法是通过引用接口的类实现的,如果某个类要引用某个接口,需要在类定义时使用implement来声明引用接口

接口格式为:

1
2
3
4
5
class 类名 implement 接口1,接口2,接口3....{
//成员变量的定义
//成员方法的定义
//接口中所有的抽象方法的重写
}

一个类只能直接继承一个父类,但可以同时引用多个接口。

包的定义

Java中的类文件都是通过包来进行管理的。

  • 包的声明语句必须放在Java源文件的最前面。
  • 包的名字一般为小写,用圆点操作符( . )指明包的层次。

包间访问

  • 前缀包名发
    再要引用的类名前面添加这个类名所属的包名,包和引用的类之间使用圆点操作符连接
    max.IntgerMax.getMax(1,2) 访问max 中的IntegerMax类成员
    • 使用引用包语句(import)
      使用引用包语句也可以直接将其他包中的类加载到程序中,这样使用时不需要加上包名引用了
      实现语法:
      **import 包名.类名 ** 引用具体某个包
      *import 包名. ** 将整个包装载
  • 本文标题:java学习总结
  • 本文作者:萧禾财
  • 创建时间:2022-07-19 15:51:48
  • 本文链接:https://ipartmentxhc.github.io/2022/07/19/java学习总结/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!