初识Java 对象、类、变量、方法

本文偏向于概念上的认识,在脑海里形成一个思维导图即可,这些内容的具体使用在后续章节补充。

什么是对象?

看看周围真实的世界,会发现身边有很多对象,车,狗,人等等。所有这些对象都有自己的状态和行为。拿一条狗来举例,它的状态有:名字、品种、颜色,行为有:叫、摇尾巴和跑。对比现实对象和软件对象,它们之间十分相似。

软件对象也有状态和行为。软件对象的状态就是属性,行为通过方法体现。在软件开发中,方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成。

什么是面向对象?

面向对象(Object Oriented)是一种软件开发方法。面向对象是把数据及对数据的操作方法放在一起,作为一个相互依存的整体。区别于面向过程、面向切面。

面向对象的三大特征

  • 封装:把客观事物封装抽象成 类,通过 权限控制符 控制外部对类中 数据和方法的访问权限。
  • 继承:通过继承创建的新类称为“子类”或“派生类”。被继承的类称为“基类”、“父类”或“超类”。子类继承父类后,父类有的子类都有,子类还能有自己额外的功能。关键词extends。
  • 多态:不同事物具有不同表现形式,一个接口,多种形式。(可简单理解为:你是人类,你妹妹也是人类,你们有各自的身高体重及行为)。

什么是类?

类可以看成是创建 Java 对象的模板,里面定义了对象的状态(属性)和行为(方法)。做好类的分类,有助于梳理复杂的业务逻辑

什么是变量?(掌握)

Java 变量是在 Java 语言中通过名字可以访问的一块内存空间,里面存储的数据可以在程序运行时可修改。所有的变量在使用前必须声明并初始化。

三种变量类型:局部变量、成员变量(又叫范例变量、全局变量)、类变量(全局静态变量)

什么是局部变量?

从以下方面了解:

  • 声明位置:声明在方法、构造方法或者语句块中
  • 存储位置:局部变量是在栈上分配的;
  • 生命周期:在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁;
  • 访问权限:只能在方法内可见,访问修饰符不能用于局部变量;
  • 使用:局部变量没有默认值,声明后必须初始化才可以在方法内使用。

什么是成员变量?

从以下方面了解:

  • 声明位置:声明在一个类中,但在方法、构造方法和语句块之外
  • 存储位置:成员变量是在堆内存分配的;
  • 生命周期:对象创建的时候创建,在对象被销毁的时候销毁;
  • 访问权限:对于类中的方法、构造方法或者语句块是可见的;使用访问修饰符可设置访问权限,一般声明为private;成员变量应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取成员变量信息
  • 使用:对象被实例化后,成员变量就被声明并初始化,有默认值。可以直接通过变量名访问(对象名.变量名

什么是类变量?

从以下方面了解:

  • 声明位置:类变量也称为静态变量,在类中以 static 声明,但必须在方法之外;
  • 存储位置:类变量存储在静态数据区
  • 生命周期:在第一次被访问时创建,在程序结束时销毁,和程序运行时间是一样的
  • 访问权限:与成员变量类似,不过一般声明为常量,用 public final static 修饰;去掉final后类变量也是可以修改的;
  • 使用:可直接通过类名或对象名访问(类名/对象名.变量名)

如何声明变量?

代码如下:

public class Person{
    static String type = "人类"; // 类变量,static修饰
    /**
     * int 变量类型:8种基本类型 + 其他
     * age 变量名:见名之意
     * 18 变量的初始化值,值要与变量类型匹配,否则编译不通过
     */
    int age = 18; // 范例变量
    public void test(){ 
        //可以使用逗号隔开来声明多个同类型变量。
        int a=1,b=2,c=3; //局部变量
    }
}

什么是方法?(熟悉)

Java 方法是语句的集合,它们在一起执行一个功能。Java 方法是解决一类问题的步骤的有序组合。最基础的方法要满足:一个方法只干一件事情(便于多个基础方法集成为一个复合方法:小功能按一定顺序组装成大功能)。

如何定义方法?

普通方法定义代码如下:

/**
 * public 修饰符,定义了该方法的访问类型:public、protected、缺省、private
 * String 返回值类型,如果为void,即为无返回值,方法体中不用return。
 * cry 方法名:见名知意
 * (int time) 参数类型 + 参数名
 * String ... names  为可变参数
 */
public String cry(int time, String ... names){
    ...
    //方法体
    System.out.println("哭了多久?" );
    String name = names[0];
    System.out.println(name  + "开始哭。。。" );
    ...
    return "哭了" + time + "分钟";
}

可变参数说明:

  • 方法中某一类型的参数个数不确定时(>=1),可以定义为可变参数;
  • 在方法声明中,在指定参数类型后加一个省略号(...) 。
  • 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。

方法的分类

什么是实例方法?

  • 实例方法又叫成员方法,属于类的实例,可以访问类的实例变量和实例方法。可以理解为最普通的方法
  • 在方法内部可以使用关键字 this 来引用当前对象。
  • 实例方法可以通过对象来调用。

警告方法之间的访问不能形成死循环(比如,a方法中调用b方法,b方法中又调用a方法)。

什么是静态方法?

  • 静态方法属于类本身,而不是类的实例。用 static 修饰
  • 不能访问实例变量和实例方法,因为它们是与对象相关联的。
  • 静态方法可以直接通过类名来调用。

什么是抽象方法?

  • 抽象方法没有方法体,只有方法的声明,用 abstract 修饰
  • 必须被子类实现,用于强制子类提供特定的行为。

什么是构造方法?

对象创建时用来初始化该对象。

构造方法有一下基本特性:

  • 方法名与类同名:构造方法的名字必须与类名完全相同,都是大驼峰命名;
  • 方法没有返回值:构造方法不需要显式地声明返回类型,包括void;
  • 不能被显式调用:构造方法在创建对象时自动调用,不能被显式地调用;
  • 可以有参数:构造方法可以接受参数,用来为对象的实例变量赋初始值;
  • 默认构造方法:如果在类中没有定义任何构造方法,Java会提供一个默认的无参构造方法,有了自定义构造方法后,默认构造方法就会失效。

其他方法:

  • final修饰的方法:final方法不能被子类重写或覆盖。
  • Synchronized修饰的同步方法:同步方法用于实现线程同步,只能由一个线程访问
  • native修饰的方法:native方法是用非Java语言(如C或C++)实现的方法,它们与底层操作系统和硬件交互。
  • 递归方法:自己调用自己,但必须避免死循环。

方法的重载是什么?(掌握)

同一个类中, 具有相同方法名的一组方法, 但是参数列表不一样的这一组方法称为方法重载(overload)。

例如:无参构造方法,全参构造方法,含有部分参数的构造方法,在同一个类中,方法名相同,参数列表不同,属于方法重载。

方法的重写是什么?(掌握)

子类中的某个(多个)方法与父类中的某一个(多个)方法的返回值、方法名、参数列表相同,但是方法体不一样这就是方法重写(override),又叫方法覆盖

方法重写需要遵循一下几点:

  • 父子类之间才存在重写;
  • private、final、static 修饰的方法不能被重写构造方法不能重写
  • 同包内的protected修饰的方法可以重写;
  • 重写的方法建议用 @Override 来标识;
  • 方法签名要相同:方法签名即为 方法名+参数列表;
  • 返回值类型一致:返回值类型必须小于或等于父类方法的返回值类型;
  • 访问修饰符要更宽泛:public>protected>default>private
  •  声明的异常类型要一致

你可能感兴趣的:(Java,java)