面向对象是一种思想,一般指将事务的属性与方法抽出总结为模板(类/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。

对象数组的内存图

Java基础语法04面向对象上-类-属性-方法-可变参数-重载-递归-对象数组的更多相关文章

  1. Java基础语法(9)-面向对象之类的成员

    title: Java基础语法(9)-面向对象之类的成员 blog: CSDN data: Java学习路线及视频 1.面向对象特征--封装 为什么需要封装?封装的作用和含义? 我要用洗衣机,只需要按 ...

  2. Java基础语法(11)-面向对象之关键字

    title: Java基础语法(11)-面向对象之关键字 blog: CSDN data: Java学习路线及视频 1.this this是什么 它在方法内部使用,即这个方法所属对象的引用: clas ...

  3. Java基础语法(10)-面向对象之三大特征

    title: Java基础语法(9)-面向对象之类的成员 blog: CSDN data: Java学习路线及视频 1.面向对象特征--封装 为什么需要封装?封装的作用和含义? 我要用洗衣机,只需要按 ...

  4. 038 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 05 案例演示switch结构-星期的表示案例以及总结

    038 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 05 案例演示switch结构-星期的表示案例以及总结 本文知识点:案例演示switch结构并对sw ...

  5. 037 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 04 switch结构

    037 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 04 switch结构 本文知识点:Java中的switch结构 选择结构分类 选择结构只有如下2种 ...

  6. 036 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 03 嵌套if结构

    036 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 03 嵌套if结构 本文知识点:Java中的嵌套if结构 什么是嵌套if结构? 概念: 嵌套if结构 ...

  7. 035 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 02 多重if结构

    035 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 02 多重if结构 本文知识点:Java中的多重if结构 选择结构回顾 if选择结构 注意: 1.条 ...

  8. 034 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 01 流程控制概述

    034 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 01 流程控制概述 本文知识点:Java中的流程控制相关概念的认识 三大流程控制语句结构的简介 顺序 ...

  9. 大数据学习--day07(冒泡排序、Arrays工具类、方法可变参数)

    冒泡排序.Arrays工具类.方法可变参数 冒泡排序之前写过,略 Arrays工具类 二分法查询 public static int binarySearch(int[] a,int key) 头信息 ...

随机推荐

  1. ansible源码安装、普通用户实现批量控制

    一.ansible简介 ansible是一款自动化运维工具,基于Python开发,集合了众多运维工具(puppet.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行 ...

  2. springboot整合thymleaf模板引擎

    thymeleaf作为springboot官方推荐使用的模板引擎,简单易上手,功能强大,thymeleaf的功能和jsp有许多相似之处,两者都属于服务器端渲染技术,但thymeleaf比jsp的功能更 ...

  3. luogu CF16E Fish

    题目描述 有n条鱼,编号从1到n,住在湖里.每天有一对鱼相遇, 彼此相遇的概率是一样的.如果两条标号为i和j的鱼见面,第一只吃了第二只的概率为a{i,j},第二只会吃了第一只的概率为a{j,i}=1- ...

  4. 使用 webservice 实现 RPC 调用

    WebService 介绍 Web service 是一个平台独立的,低耦合的 web 的应用程序用于开发分布式的互操作的应用程序.Web Service 技术, 能使得运行在不同机器上的不同应用无须 ...

  5. SPOJ- Distinct Substrings(后缀数组&后缀自动机)

    Given a string, we need to find the total number of its distinct substrings. Input T- number of test ...

  6. SSM 轻量级框架构建:图书管理系统

    一.接业务,作分析 1.大致业务要求 1.1 使用 SSM( Spring MVC + Spring + MyBatis )实现图书信息管理系统, MySQL5.5 作为后台数据库,该系统包括查询图书 ...

  7. MySql数据库之子查询和高级应用

    MySql数据库中的子查询: 子查询:在一条select查询语句中嵌套另一条select语句,其主要作用是充当查询条件或确定数据源. 代码案例如下: 例1. 查询大于平均年龄的学生: select * ...

  8. 使用aop切面编写日志模块

    我们先自定义一个注解(一个有关自定义注解的LJ文章 https://www.cnblogs.com/guomie/p/10824973.html) /** * * 自定义日志注解 * Retentio ...

  9. DRF源码系列分析

    DRF源码系列分析 DRF源码系列分析--版本 DRF源码系列分析--认证 DRF源码系列分析--权限 DRF源码系列分析--节流

  10. vue响应式数据变化

    vue响应式数据变化 话不多说,先上代码: //拷贝一份数组原型,防止修改所有数组类型变量的原型方法 let arrayProto = Array.prototype;// 数组原型上的方法 let ...