• Java基础语法04-面向对象上-类-属性-方法-可变参数-重载-递归-对象数组


    面向对象是一种思想,一般指将事务的属性与方法抽出总结为模板(类/class),处理事务时通过类创建/new对象由对象的功能/方法去完成所要计算处理的事情。

    面向过程:POP:以过程,步骤为主,考虑怎么做

    面向对象:OOP:以对象(谁)为主,考虑谁来做,谁能做

    :是一类具有相同特性的事物的抽象描述,是一组相关属性和行为的集合

    对象:是一类事物的具体体现。对象是类的一个实例,必然具备该类事物的属性和行为。

    属性:事物的状态信息。

    行为:事物能够做什么。

    [修饰符]class 类名 {//类名首字母大写

      //成员变量
      //成员方法

    }

    对象的创建

    类名 对象名 = new 类名();

    如果两个类都在一个.java源文件中,只能有一个类是public的

    类、数组都是引用数据类型,引用数据类型的变量中存储的是对象的地址,或者说指向堆中对象的首地址。Java是对程序员隐藏内存地址的,默认提取的是对象的运行时类型@代表对象唯一编码的hashCode值。

    成员变量

    类变量:有static修饰,也叫类变量,属于整个类的,不是属于某个实例

    实例变量:没有static修饰,也叫对象属性,属于某个对象的,通过对象来使用

    【修饰符】 class 类名{
    【修饰符】 数据类型 属性名; //属性有默认值
    【修饰符】 数据类型 属性名 = 值; //属性有初始值
    }

    说明:属性的类型可以是Java的任意类型,包括基本数据类型、引用数据类型(类、接口、数组等)

    如何在类外面访问成员变量

    类变量:

    类名.静态成员变量 //推荐

    对象名.静态成员变量 //不推荐

    实例变量:

    对象名.静态成员变量 //只能使用这种方式

    成员变量的特点

    (1)成员变量有默认值

    基本类型整数(byte,short,int,long)0
      浮点数(float,double) 0.0
      字符(char) 'u0000'
      布尔(boolean) false
      数据类型 默认值
    引用类型 数组,类,接口 null


    (2)类变量的值是所有对象共享的,而实例变量的值是每个对象独立的

    成员变量的内存图

    方法的概念

    方法也叫函数,是一个独立功能的定义,是一个类中最基本的功能单元。

    把一个功能封装为方法的目的是,可以实现代码重用,从而简少代码量。

    方法的使用原则:

    (1)必须先声明后使用

      类,变量,方法等都要先声明后使用

    (2)不调用不执行,调用一次执行一次。

    语法格式

    【修饰符】 返回值类型 方法名(【参数列表:参数类型1 参数名1,参数类型2 参数名, ...... 】){
      方法体;
    【return 返回值;】
    }

    return

    return 结束方法,并将方法的结果返回去,

    如果返回值类型不是void,方法体中必须保证一定有return 返回值语句,并且要求该返回值结果的类型与声明的返回值类型一致或兼容。

    如果返回值类型为void时,return 后面不用跟返回值,甚至也可以没有return语句。

    return语句后面就不能再写其他代码了,否则会报错:Unreachable code

    如何在其他类中调用方法

    (1)实例方法

    对象名.实例方法(【实参列表】)    //必须通过对象来访问

    (2)类方法

    类名.类方法(【实参列表】) //推荐

    对象名.类方法(【实参列表】) //不推荐

    (1)调用时,需要传“实参”,实参的个数、类型、顺序。顺序要与形参列表一一对应

    如果方法没有形参,就不需要也不能传实参。

    (2)调用时,如果方法有返回值,可以接受或处理返回值结果,当然也可以不接收,那么此时返回值就丢失了。

    如果方法的返回值类型是void,不需要也不能接收和处理返回值结果。

    在本类中访问本类的成员变量和成员方法

    直接用,不需要加“对象名."和"类名."

    唯一例外:静态方法中不能直接访问本类的非静态的成员变量和成员方法

    方法调用内存分析

    方法的调用

    方法不调用不执行,调用一次执行一次,每次调用会在栈中有一个入栈动作,即给当前方法开辟一块独立的内存区域,用于存储当前方法的局部变量的值,当方法执行结束后,会释放该内存,称为出栈,如果方法有返回值,就会把结果返回调用处,如果没有返回值,就直接结束,回到调用处继续执行下一条指令。

    栈结构:最先进的最后出

    方法的参数传递机制

    方法的形参是基本数据类型时,形参值的改变不会影响实参;复制一份数据传递

    方法的形参是引用数据类型时,形参地址值的改变不会影响实参,但是形参地址值里面的数据的改变会影响实参。传递的是地址值

    成员变量与局部变量的区别

    (1)声明的位置不同

    成员变量:类中方法外

    局部变量:方法中

    (2)初始值不同

    成员变量:有默认值

    局部变量:必须手动初始化

    (3)内存存储位置不同

    成员变量:

    类变量:方法区

    实例变量:堆

    局部变量:

    (4)生命周期

    成员变量:

    类变量:和类的生命周期相同,该类所有对象共享

    实例变量:每一个对象的实例变量的生命周期是独立的,随着对象的创建而创建,随着对象的回收而消失

    局部变量:随着方法被调用执行在栈中分配,方法调用结束内存就释放,并且还有作用域问题。

    (5)修饰符

    成员变量:有很多修饰符,例如:public,private,static等

    局部变量:不能有修饰符

    可变参数

    在JDK1.5之后,如果我们定义一个方法时,此时某个形参的类型可以确定,但是形参的个数不确定,那么我们可以使用可变参数。

    格式:

    【修饰符】 返回值类型 方法名(【非可变参数部分的形参列表,】参数类型... 形参名){ }

    要求:

    (1)一个方法最多只能有一个可变参数

    (2)如果一个方法包含可变参数,那么可变参数必须是形参列表的最后一个

    参数类型... 形参名       相当于         参数类型[] 形参名

    因为可变参数实参接收值时就是以数组形式处理的

    只是后面这种定义,在调用时必须传递数组,而前者更灵活,既可以传递数组,又可以直接传递数组的元素,这样更灵活了。

    方法重载

    - 方法重载:指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回值类型无关。
    - 参数列表:数据类型个数不同,数据类型不同,数据类型顺序不同。

    注意区分方法重写:主要用在子类重写父类的方法,几乎要求返回值类型、方法名、形参列表都相同

    注意:(形参类型... 形参名) 与 (形参类型[] 形参名) 不构成重载。即在一个类中创建方法名相同,形参类型相同的数组和可变参数2个方法时编译不通过

    通过命令行给main方法的形参传递的实参称为命令行参数

    java 运行的类名 参数1 参数2 参数n //中间用空格分开

    递归

    递归分为两种,直接递归和间接递归

    注意事项:

    - 递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。
    - 在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。

    对象数组

    数组的元素可以是基本数据类型,也可以是引用数据类型。当元素是引用数据类型是,我们称为对象数组。

    注意

    对象数组,首先要创建数组对象本身,即确定数组的长度,然后再创建每一个元素对象,如果不创建,数组的元素的默值就是

    null,所以很容易出现空指针异常NullPointerException。

    对象数组的内存图 

  • 相关阅读:
    8/30 sql脚本
    navicat批量添加uuid去重
    循环向JsonArray添加对象
    java String字符串去除()里的内容
    工厂模式
    Thymeleaf学习
    SSH开发常用常见的src下建的包名
    04jQuery操作03
    04jQuery筛选jquery对象02
    04jQuery筛选jquery对象01
  • 原文地址:https://www.cnblogs.com/Open-ing/p/11861059.html
Copyright © 2020-2023  润新知