面向对象是一种思想,一般指将事务的属性与方法抽出总结为模板(类/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. python_迭代器和生成器、字节串、字节数组

    迭代器 iterator  和 生成器 generator 什么是迭代器:迭代器就是获取迭代对象中元素的工具,迭代器是由可迭代对象生成的 1.迭代器是指用iter(可迭代对象)函数返回的对象(实例) ...

  2. ThinkPHP 实现数据库事务回滚示例代码

    ThinkPHP提供了数据库的事务支持,如果要在应用逻辑中使用事务,可以参考下面的方法:   启动事务: $User->startTrans(); 提交事务: $User->commit( ...

  3. 如何利用 Open Live Writer 在本地发布WordPress博客文章

    [导读] Open Live Writer是由Windows Live WriterWriter更名而来,是由微软推出的一款能够免费使用的博客写作软件. Open Live Writer 可以支持大多 ...

  4. [TimLinux] Python 迭代器(iterator)和生成器(generator)

    1. 可迭代对象 from collection import Iterable class Iterable(metaclass=ABCMeta): ... def __iter__(self): ...

  5. 2017 CCPC秦皇岛 L题 One Dimensions Dave

    BaoBao is trapped in a one-dimensional maze consisting of  grids arranged in a row! The grids are nu ...

  6. 2018HDU多校训练一 D Distinct Values

    hiaki has an array of nn positive integers. You are told some facts about the array: for every two e ...

  7. git避免每次输入密码

    生成公匙 在仓库所在目录输入 ssh-keygen -t rsa -C "yourname@sina.com" 其中yourname@sina.com是注册邮箱.可以在%HOME% ...

  8. 《java面试十八式》--引子

    爪哇城中   “喂,你等等我啊”少女气喘吁吁的喊道   “大小姐,你可快点吧,报名马上就要结束了.”   这是爪哇城一年一度的大选比赛,被选上的人会留下来任职,享有名誉和金钱,所以大家都在积极准备. ...

  9. CSS让高度百分百的方案

    一般用来上下所有居中,但是这时候auto的计算是全屏像素,从而得到满屏 position: fixed; left: 0px; right: 0px; top: 0px; bottom: 0px; m ...

  10. 《一头扎进》系列之Python+Selenium框架设计篇2- 价值好几K的框架,不看白不看,看了还想看

    1. 简介 上一篇介绍了自动化框架的架构,今天宏哥就带领小伙伴或者童鞋们开始开工往这个框架里开始添砖加瓦.主要是介绍一个框架unittest单元测试框架和一种设计思想POM. 2. unittest单 ...