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

    1.概念    1.Django项目(Web应用)    2.web服务        1.nginx        2.Apache            LNMP -> Linux Ngin ...

  2. Java学习笔记(面向对象上)

    面向对象(上) 面向对象的特点:封装性(是面向对象的核心思想,将对象的属性和行为封装起来).继承性(主要描述类与类之间的关系,通过继承,可以在无需重新编写原有类的情况下,对原有类的功能进行扩展)和多态 ...

  3. 判断一个坐标点是否在封闭曲线内的方法(swift)

    //用playground运行即可 import UIKit var str = "Hello, playground" let lTestPointsOne : [(Double ...

  4. 多线程之NSOperation小结

    一.NSOperation 抽象类 NSOperation 是一个"抽象类",不能直接使用.抽象类的用处是定义子类共有的属性和方法. NSOperation 是基于 GCD 做的面 ...

  5. Shell入门01-bash Shell特性

    命令和文件自动补齐 [root@hadoop04 ~]# yum -y install bash-completion 命令历史记忆功能 1.上下键 查看历史命令 2.!number 执行histor ...

  6. DP思想在斐波那契数列递归求解中的应用

    斐波那契数列:1, 1, 2, 3, 5, 8, 13,...,即 f(n) = f(n-1) + f(n-2). 求第n个数的值. 方法一:迭代 public static int iterativ ...

  7. 【解决】http: server gave HTTP response to HTTPS client

    [问题]上传镜像到私有仓库时报错 $ docker push xxx.xxx.xxx.xxx:5000/java-8 The push refers to repository [xxx.xxx.xx ...

  8. 第5节:Java基础 - 必知必会(下)

    第5节:Java基础 - 必知必会(下) 本小节是Java基础篇章的第三小节,主要讲述Java中的Exception与Error,JIT编译器以及值传递与引用传递的知识点. 一.Java中的Excep ...

  9. HDU4109-instruction agreement(差分约束-最长路+建立源点,汇点)

    Ali has taken the Computer Organization and Architecture course this term. He learned that there may ...

  10. Spring Cloud第八篇 | Hystrix集群监控Turbine

    ​ 本文是Spring Cloud专栏的第八篇文章,了解前七篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Clo ...