Java SE: 面向对象编程(基础部分)

食用前说明:

本文章内容来自B站韩顺平老师的课堂笔记,本人只是将其进行自我整理,内容有所删减,韩顺平老师的B站课程AV号:BV1fh411y7R8

本文章内容来自韩顺平老师的课堂笔记的第7章面向对象编程(基础部分),本章内容重点掌握:成员方法、成员传参机制、构造器,为后面的封装、继承和多态打基础!

按照惯例给出直达本章的链接:

类与对象

7.1 类与对象

7.1.1 属性/成员变量/字段

  • 基本介绍

    属性/成员变量/字段 属于同一个东西

7.1.2 属性使用注意事项和细节

  1. 属性的定义类型可以为任意类型(包含基本类型和引用类型)

  2. 属性有默认值,规则和数组一致。

    数据类型默认值
    int , short , byte , long0
    float ,double0.0
    char\u0000
    booleanfalse
    Stringnull

7.1.3 如何创建对象

注释:

 //创建 Person 对象
 //p1 是对象名(对象引用)
 //new Person() 创建的对象空间(数据) 才是真正的对象
 Person p1 = new Person();
  1. 先声明再创建

     Cat cat;
     cat = new Cat();
  2. 直接创建

     Cat cat = new Cat();

7.1.4 如何访问属性

  • 基本语法

    • 对象名.属性名;

       cat.name;
       cat.age;
       cat.color;

7.1.5 类和对象的内存分配机制

Java 内存的结构分析

1、栈: 一般存放 基本数据类型(局部变量)

2、堆: 存放对象(Cat cat , 数组等) (存放使用new创建的对象,全局变量)

3、方法区:常量池(常量,比如字符串), 类加载信息[只会加载一次]

4、示意图

7.2 成员方法

7.2.1 基本介绍

  • 为解决有关一类问题的问题,我们将解决这一类问题的代码进行单独提取成一个方法

  • 方法的使用可以让代码更简洁,便于维护代码,增加代码的重用性

7.2.2 成员方法的定义

  • 语法规范:

     访问修饰符 返回数据类型 方法名(形参列表..) {//方法体
         语句;
         return 返回值;
     }
  • 案例演示

     //单个返回值
     public static int age(int birthday){...}
     //多个返回值
     static float interest(float principal, int year){...}
     ​
     public static int max(int num1, int num2) {
        int result;
        if (num1 > num2)
           result = num1;
        else
           result = num2;
      
        return result; 
     }

7.2.3 方法的调用

返回数据类型

  1. 一个方法最多有一个返回值 [ 返回多个结果时 用:数组 ]

  2. 返回类型可以为:基本类型或引用类型(数组,对象)

  3. 如果方法要求有返回数据类型,则方法体中最后的执行语句必须为 return 值; 而且要求返回值类型必须和 return 的 值类型一致或兼容

  4. 如果方法是 void,则方法体中可以没有 return 语句,或者 只写 return ;

  • 案例演示

     /** 主方法 */
     public static void main(String[] args) {
         int i = 5;
         int j = 2;
         int k = max(i, j);//调用方法
         System.out.println( i + " 和 " + j + " 比较,最大值是:" + k);
     }
     ​
     /** 定义一个方法:返回两个整数变量较大的值 */
     public static int max(int num1, int num2) {
         int result;
         if (num1 > num2)
             result = num1;
         else
             result = num2;
     ​
         return result; 
     }

7.2.4 注意事项和使用细节

  • 访问修饰符 (作用是控制,方法使用的范围)

    [ 有四种: public, protected, 默认, private ]

    不写的话就是:默认访问

  • 返回数据类型

    1. 一个方法最多有一个返回值 [ 返回多个结果时 用:数组 ]

    2. 返回类型可以为:基本类型或引用类型(数组,对象)

    3. 如果方法要求有返回数据类型,则方法体中最后的执行语句必须为 return 值; 而且要求返回值类型必须和 return 的 值类型一致或兼容

    4. 如果方法是 void,则方法体中可以没有 return 语句,或者 只写 return ;

方法:

1、一个方法可以,一个参数、多个参数甚至没有参数, 多个参数时中间用逗号隔开,比如 getSum(int n1,int n2) 2、参数类型可以为:基本类型、引用类型,甚至任意类型,比如 printArr(int map) 3、调用带参数的方法时,传入的实参要不相同类型,或者是兼容类型 的参数! 4、调用带参数的方法时,传入的实参的类型要一致,实参的个数,实参的顺序也必须一致

  • 方法的调用细节说明

    1. 若在同一个类中,可直接调调用,

      • 格式:方法名 加 参数(可选)

    2. 若是跨类进行调用

      • 格式:类名.方法名

7.3 类定义的完善演变

  • 一开始的定义

  • 学完构造器后类的定义

  • 学完包后类的定义

  •  学完继承后类的定义

7.4 成员方法传参机制

  1. 基本数据类型传参,本质是 数值的拷贝

     

    形参的改变,不影响实参

  2. 引用数据类型传参,本质是 拷贝地址

    形参的改变,影响实参

7.5 方法递归调用

  • 简单理解就是: 递归就是方法自己调用自己

7.5.1 递归重要规则

1、执行一个方法时,就创建一个新的受保护的独立空间(栈空间)

2、方法的局部变量是独立的,不会相互影响, 比如n变量

3、如果方法中使用的是引用类型变量(比如数组,对象),就会共享该引用类型的数据.

4、递归必须向退出递归的条件逼近,否则就是无限递归,出现 StackOverflowError,死龟了:)

5、当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就返回给谁,同时当方法执行完毕或者返回时,该方法也就执 完毕。

  • 案例演示

 public class MultiTable {
     public static void main(String args[]) { 
         m(9); 
     } 
     /** 
    * 打印出九九乘法表 
    * @param i 
    */
     public static void m(int i) { 
         if (i == 1) { 
             System.out.println("1*1=1 "); 
         } else { 
             m(i - 1); 
             for (int j = 1; j <= i; j++) { 
                 System.out.print(j + "*" + i + "=" + j * i + " "); 
             } 
             System.out.println(); 
         } 
     }  
 }
  • 运行结果

 1*1=1
 1*2=2 2*2=4
 1*3=3 2*3=6 3*3=9
 1*4=4 2*4=8 3*4=12 4*4=16
 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

7.6 方法重载(OverLoad)

7.6.1 基本介绍

  • java 中允许同一个类中,多个同名方法的存在,但形参列表不一致!

7.6.2 重载的好处

  1. 减轻了起名的麻烦

  2. 也减轻了记名的麻烦

7.6.3 案例说明

  • 下边的类中调用了多个 println() 方法,并无报错

 public static void main(String[] args) {
     System.out.println(100);
     System.out.println("hello,world");
     System.out.println('h');
     System.out.println(1.1);
     System.out.println(true);
 }
  • 运行结果

 100
 hello,world
 h
 1.1
 true

7.7 可变参数

7.7.1基本概念

  • 案例演示

 public int sum(int... nums) {}

1、可变参数的实参可以为0个或任意多个。

2、可变参数的实参可以为数组。

3、可变参数的本质就是数组

4、可变参数和普通类型参数可以混用,但要保证只有一个可变参数,并且可变参数排在最后

5、一个形参列表中只能出现一个可变参数

7.8 作用域

7.8.1 作用域分为

  • 全局变量,即为属性

  • 局部变量,

  • 案例演示说明

    全局变量:也就是属性,作用域为整个类体 Cat类,包括在Cat类下创建的方法里都可以调用

     class Cat {
         int n = 10;//全局变量
         //方法里任可以调用n
         public void eat() {
             int num = 1;//局部变量
             System.out.println("n=" + n);
         }
     }

    局部变量创建时,必须要初始化 (给一个数值)

    全局变量则可以不给值,应为全局变量有默认值

7.8.2 注意事项和细节使用

  1. 属性生命周期较长,伴随着对象的创建而创建,伴随着对象的销毁而销毁。

  2. 局部变量,生命周期较短,伴随着它的代码块的执行而创建,伴随着代码块的结束而销毁

  3. 作用域范围不同

    • 全局变量/属性:可以被本类使用,或其他类使用(通过对象被调用

    • 局部变量:只能在本类中对应的方法中使用

  4. 修饰符不同 全局变量/属性 可以加修饰符 局部变量 不可以加修饰符

7.9 构造方法/构造器

构造器起到的作用,类似提醒器,提醒程序员初始化变量

7.9.1 基本介绍

构造方法又叫构造器(constructor),是类的一种特殊的方法,它的主要作用是完成对新对象的初始化。它有几个特点:

  1. 方法名和类名相同

  2. 没有返回值

  3. 在创建对象时,系统会自动的调用该类的构造器完成对象的初始化。

7.10 对象创建的流程分析

  • 案例演示

     class Person{//类Person
         int age=90;
         String name;
         Person(String n,int a){//构造器
             name=n;//给属性赋值
             age=a;//.
         }
     }
     Person p=new Person("小倩",20);
  • 流程分析

    1. 加载Person类信息(Person.class),只会加载载一次

    2. 在堆中分配空间(地址)

    3. 完成对象初始化

      1. 默认初始化 age=0 name=null

      2. 显式初始化 age=90,name=null,

      3. 构造器的初始化 age =20, name=小倩

    4. 在对象在堆中的地址,返回给 合 p(p 是对象名,也可以理解成是对象)

7.11 this 关键字

  • this本质等同于:自指当前对象。简单说就是:哪个对象调用,this就代表哪个对象(this为隐藏属性)

7.11.1 this 的注意事项和使用细节

1、this 关键字可以用来访问本类的属性、方法、构造器

2、this 用于区分当前类的属性和局部变量

3、访问成员方法的语法:this.方法名(参数列表);

4、访问构造器语法:this(参数列表); 注意只能在构造器中使用(即只能在构造器中访问另外一个构造器, 必须放在第一条语句)

5、this 不能在类定义的外部使用,只能在类定义的方法中使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值