Java学习day02

Java

面向对象

一、Java面向对象学习的三条主线

  1. Java类及类的成员:属性,方法,构造器,代码块,内部类
  2. 面向对象的三大特征:封装性,继承性,多态性
  3. 其他关键字:thissuperstaticfinalabstract

面向过程:强调过程和行为

面向对象:将功能封装进对象,强调了具备功能的对象,以类/对象为最小单位,考虑谁来做

类:是对一类事物的描述,是\(\textcolor{red}{抽象的}\),概念上的定义

对象:是实际存在的该类事物的每个个体,因而也称为实例

类中最主要的两个成员:属性和方法

属性 = 成员变量 = field = 域、字段

方法 = 成员方法 = 函数 = method 函数和方法一样都是定义了一个功能

我们造好类后要进行实例化

// 类和对象的使用(面向对象思想落地的实现)
import javax.xml.transform.SourceLocator;

public class PersonTest {
    public static void main(String[] args){
        //创建person类的对象 = 实例化
        Person p1 = new Person();
        //调用对象的结构:属性、方法
        //调用属性:对象.属性
        p1.name = "Tom";
        p1.isMale = true;
        System.out.println(p1.name);

        //调用方法:对象.方法
        p1.eat();
        p1.sleep();
        p1.talk("Chinese");
        //****************************************************
        Person p2 = new Person();
        System.out.println(p2.name);//null 这些都是默认初始化值
        System.out.println(p2.isMale);//false 这些都是默认初始化值
        //****************************************************
        //将p1变量保存的对象地址赋值给p3,导致p1和p3指向了对空间中的同一个对象实体
        Person p3 = p1;
        System.out.println(p3.name) //Tom
    }
}

class Person{
    
    //属性
    String name;
    int age = 1;
    boolean isMale;

    //方法
    public void eat(){
        System.out.println("吃饭");
    }
    public void sleep(){
        System.out.println("睡觉");
    }
    public void talk(String language){
        System.out.println("使用的是:" + language);
    }
    
}

步骤:

  1. 创建类,设计类的成员
  2. 创建类的对象
  3. 通过”对象.属性“或”对象.方法“调用对象的结构

注:如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性。(非static的)

​ 意味着:如果我们修改一个对象的属性a,则不影响另外一个对象属性a的值

对象的内存解析

image-20220908234723421

类中属性的使用

属性(成员变量)vs 局部变量

  1. 相同点

    1. 定义变量的格式:数据类型 变量名 = 变量值
    2. 先声明后使用
    3. 变量都有其对应的作用域
  2. 不同点

    1. 在类中声明的位置的不同

      属性:直接定义在类的一对{}内

      class User{
          //属性(成员变量)
          String name;
          int age;
          boolean isMale;
      }
      

      局部变量:声明在方法内,方法形参,代码内,构造器形参,构造器内部的变量

      class User{
          //属性(成员变量)
          String name;
          int age;
          boolean isMale;
          
          public void talk(String language){//这里的language就是形参
              System.out.println("使用的是:" + language);
          }
          public void eat(){
              String food = "披萨";//定义在方法中也叫形参
              System.out.println("我吃:" + food);
          }
      }
      

​ 2.属性:可以在声明属性时,指明其权限,使用权限修饰符

​ 局部变量:不可以使用权限修饰符

  1. 默认初始化值得情况:

    属性:类的属性,根据其类型,都有默认初始化值

    ​ 整形(byte,short,int,long):0

    ​ 浮点型(float,double):0.0

    ​ 字符型(char):0

    ​ 引用数据类型(类,数组,接口):null

    局部变量:没有默认初始值,所以调用前一定要赋值

  2. 在内存中加载的位置:

    属性:加载到堆空间中(非static)

    局部变量:加载到栈空间

方法的声明

方法的分类:按照是否有形参及返回值

public void eat(){}
public void sleep(int hour){}//包含形参
public String getName(){}
public String getNation(String nation){}//包含形参
image-20220909082838225

方法的声明:修饰权限符 返回值类型 方法名(形参列表){方法体}

static,final,abstract来修饰的方法

关于权限修饰符

private,public,protected缺省

在方法内是可以调用当前类的属性或方法

特殊的方法A中又调用了方法A:递归方法

方法中不可以定义方法

练习

//定义类
public class Person1 {
    String name;
    int age;
    /**
    * sex:1表示男性
    * sex:0表示女性
    *
    */
    int sex;

    public void study(){
        System.out.println("studying");
    }
    public void showAge(){
        System.out.println("age" + age);
    }
    public int addAge(int i){//形参是调用时候再赋值
        age += i;
        return age;
    }
}
//测试类
import javax.swing.text.PlainDocument;

public class PerTest {
    public static void main(String[] args){
        Person1 p1 = new Person1();
        p1.name = "Tom";
        p1.age = 18;
        p1.sex = 1;
        p1.study();
        p1.showAge();
        p1.addAge(2);
        p1.showAge();
    }
}
>>>studying
>>>age18
>>>age20

做两个练习

理解方法的重载

方法的重载:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可

“两同一不同”:同一个类,相同方法名

​ 参数列表不同:参数个数不同,参数类型不同

import java.util.SimpleTimeZone;

public class OverLoadTest {
    //以下四个方法构成了重载
    //与修饰权限符,返回值类型,形参变量名,方法体都没有关系
    public void getSum(int i,int j){
    }
    public void getSum(double d1,double d2){
    }
    public void getSum(String s,int i){
    }
    public void getSum(int i,String s){
    }
}

在通过对象调用方法时,如何确定某一个指定的方法:

​ 方法名->参数列表

posted @ 2022-09-09 12:42  Sheldon2  阅读(25)  评论(0)    收藏  举报