面向过程和面向对象的区别

面向过程,强调的是功能行为,是将实现一个功能的步骤编写在一个函数中,以函数为最小单位。

面向对象,是将需要的功能封装进一个对象中,使一个对象具有很多的功能特征,以类/对象为最小单位

一、类和对象

类:是对一类事物抽象性的描述,是一种概念上的定义,比如:人类,鸟类、虫类

对象:是实际存在的某个类的个体,通常也称为实例(instance),比如:中国人,杜鹃,蚂蚁

成员变量:是一个类的属性,用于定义一些类的属性特征,比如:长、宽、高、体重

成员方法:是一个类的行为特征,用来执行一些类的特定行为,比如:吃饭、飞、运动

一个类的基本构成

class Person{ // 修饰符 class 类名
// 属性声明
int age;
String name;
// 方法声明
public void speak(){ // 修饰符 返回值类型 方法名(){}
System.out.println("I am a man");
} public void eat(String food){ // 带参
System.out.println("I eating " + food);
}
}

类的基本使用

// 声明对象类型并指向一个new 的对象
Person p = new Person();
p.age = 12; // 为对象属性赋值
p.name = "zhangsna";
p.speak(); // 对象调用方法
p.eat("bread");

说明:如果创建了一个类的多个对象,对于类中定义的属性,每个对象都有一套副本,且互不干扰。

类的访问机制

  • 在一个类中的访问机制:类中的方法可以直接访问类中的成员变量。(例外:static方法访问非static,编译不通过)
  • 在不同类中的访问机制:先创建要访问类的对象,再通过对象去调用类中的成员变量和方法。

匿名对象

我们可以不做对象的声明和对象名的赋值操作,直接通过new 对象的方式调用对象中方法。

new Person().show();

属性

语法格式:

private int age;
// 修饰符 数据类型 属性名

类中的变量分为成员变量和局部变量,成员变量是指类中的变量,局部变量是指方法或代码块中定义的变量。

类中的属性就是成员变量,成员变量有默认的初始值,可以使用修饰符。

以下是对象属性的默认初始值

成员变量类型 初始值
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0
char 0 或写为:‘\u0000’(表现为空)
boolean false
引用类型 null

属性的赋值过程

属性的赋值顺序

  1. 默认初始化 int age;
  2. 显式初始化 int age = 23;
  3. 构造器中初始化 this.age = age;
  4. 通过“对象.属性“或“对象.方法”的方式赋值

方法

方法是类或对象行为特征的抽象,用来完成某个功能操作,将功能封装成方法的目的是实现代码重用。

基本格式:

class Person{
public void show(){ // 修饰符 返回值类型 方法名 (参数类型 形参1, 参数类型 形参2...){}
System.out.println("jello");
}
}
// void 表示没有返回值

若有返回值,使用关键字return返回指定类型的数据

注意:方法被调用一次,就会执行一次。返回值类型为void时, 也可以使用return关键字,只是这时是用于结束当前方法执行。

构造器(构造方法)

构造器的特征:

  • 与类名相同
  • 不声明返回值类型,不能有return语句
  • 不能被staticfinalsynchronizedabstractnative修饰

构造器的作用:创建对象,为对象进行初始化

语法格式:

public Person(String name){	// 修饰符 类名 (参数列表)
this.name = name; // 初始化属性值
}
public Person(){} // 重载

构造器分类

  • 隐式无参构造器(系统默认提供)
  • 显式定义一个或多个构造器(无参、有参)

注意:

  • Java语言中,每个类都至少有一个构造器
  • 默认构造器的修饰符与所属类的修饰符一致
  • 一旦显式定义了构造器,则系统不再提供默认构造器
  • 一个类可以创建多个重载的构造器
  • 父类的构造器不可被子类继承,但子类可以通过super调用

方法的重载

重载(overload): 在一个类中,允许出现多个相同方法名但形参不同的方法。

特点:与返回值的类型无关,只看参数列表,参数列表的个数或参数类型不同都构成重载,调用时,根据参数列表的不同来区分。

例如:

public void add(int x, int y){}
public int add(int x, int y, int z){
return x;
}

重载丰富了方法的参数类型,使一个方法的参数多元化,适用于不同的场景

可变参数的方法

JavaSE5.0中提供了Varargs机制,允许定义能和多个实参相匹配的形参,从而简化了传递多个实参的方式。

public void test(int age, String...hobby){
for(int i = 0; i < hobby.length(); i++){
System.out.println(hobby[i]);
}
};

说明:

  1. 声明格式:方法名(参数的类型名 ...参数名)
  2. 可变参数:方法参数部分指定类型的参数个数是可变多个:0个,1个或多个
  3. 可变个数形参的方法与同名的方法之间,彼此构成重载
  4. 可变参数方法的使用与方法参数部分使用数组是一致的
  5. 方法的参数部分有可变形参,需要放在形参声明的最后
  6. 在一个方法的形参位置,最多只能声明一个可变个数形参

方法参数的值传递机制

Java里方法的参数传递方式只有一种:值传递。即将实际参数的“”传递进方法中.

形参是基本数据类型时,传递的是基本数据类型变量的数据值

形参是引用数据类型时,传递的是引用数据类型变量的地址值

扩展:

char[] arr1 = new char[3];
System.out.println(arr1); // 猜猜结果

递归方法

递归方法:一个方法体内调用自身

注意:递归一定要有一个结束条件,否则会无限递归,最终爆栈退出

Java面向对象(一)类和对象的更多相关文章

  1. java面向对象之 类和对象

    OOP:Object Oriented Programming(面向对象编程) 面向对象: 1:将复杂的事情简单化. 2:面向对象将以前的过程中的执行者,变成了指挥者. 3:面向对象这种思想是符合现在 ...

  2. Java面向对象(一) 类和对象

    一.软件开发进化史 摘自<从零开始学架构> 机器语言(1940年) 最早的软件开发使用的是“机器语言”,直接使用二进制码0和1来表示机器可以识别的指令和数据. 汇编语言(20世纪40年代) ...

  3. Java核心基础第5篇-Java面向对象_类和对象

    Java面向对象之类和对象 一.面向对象概述 Java是完全的面向对象编程(Object Oriented Programming),简称OOP. 面向对象编程的思维方式更加符合大家的日常生活,因为我 ...

  4. Java面向对象06——类与对象小结

    小结  /* 1. 类与对象    类是一个模板:抽象,对象是一个具体的实例 2. 方法    定义.调用 ​ 3. 对应的引用    引用类型: 基本类型(8)    对象是通过引用来操作的:栈-- ...

  5. Java—面向对象、类与对象、封装

    理解什么是面向过程.面向对象 面向过程与面向对象都是我们编程中,编写程序的一种思维方式. 面向过程的程序设计方式,是遇到一件事时,思考“我该怎么做”,然后一步步实现的过程. 面向对象的程序设计方式,是 ...

  6. Java面向对象03——类与对象的创建

    类的创建与初始化对象 age: 以类的方式组织代码,以对象的组织(封装)数据  package oop.demon01.demon02; ​ // 学生类(抽象模板) public class Stu ...

  7. 077 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 02 类和对象

    077 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 02 类和对象 本文知识点:类和对象 说明:因为时间紧张,本人写博客过程中只是对知识点 ...

  8. Java面向对象 Object类 内部类

     Java面向对象 Object类    内部类 知识概要:                 一:Object类                 二:内部类 匿名内部类的写法 1.Object O ...

  9. 【JAVA零基础入门系列】Day11 Java中的类和对象

    今天要说的是Java中两个非常重要的概念--类和对象. 什么是类,什么又是对象呢?类是对特定集合的概括描述,比如,人,这个类,外观特征上,有名字,有年龄,能说话,能吃饭等等,这是我们作为人类的相同特征 ...

  10. Java学习笔记十三:Java中的类和对象

    Java中的类和对象 一:什么是对象: 总的来说就是"万物皆对象",客观存在的事物皆为对象.是计算机所关注的具体信息. 对象(object)是一件事.一个物体.一个名词,或可以获得 ...

随机推荐

  1. Java实现 蓝桥杯VIP 基础练习 Sine之舞

    问题描述 最近FJ为他的奶牛们开设了数学分析课,FJ知道若要学好这门课,必须有一个好的三角函数基本功.所以他准备和奶牛们做一个"Sine之舞"的游戏,寓教于乐,提高奶牛们的计算能力 ...

  2. Java实现 LeetCode 423 从英文中重建数字

    423. 从英文中重建数字 给定一个非空字符串,其中包含字母顺序打乱的英文单词表示的数字0-9.按升序输出原始的数字. 注意: 输入只包含小写英文字母. 输入保证合法并可以转换为原始的数字,这意味着像 ...

  3. Java实现 蓝桥杯VIP 算法训练 s01串

    题目描述 s01串初始为" 0" 按以下方式变换 0变1,1变01 数据规模和约定 0~19 输入 1个整数(0~19) 输出 n次变换后s01串 样例输入 3 样例输出 101 ...

  4. Java实现 LeetCode 399 除法求值

    399. 除法求值 给出方程式 A / B = k, 其中 A 和 B 均为代表字符串的变量, k 是一个浮点型数字.根据已知方程式求解问题,并返回计算结果.如果结果不存在,则返回 -1.0. 示例 ...

  5. Java实现 LeetCode 388 文件的最长绝对路径

    388. 文件的最长绝对路径 假设我们以下述方式将我们的文件系统抽象成一个字符串: 字符串 "dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext" 表示 ...

  6. Java实现 蓝桥杯VIP 算法训练 最长字符串

    题目描述 字符串可是比赛经常出的问题,那么给大家出一个题, 输入五个字符串,输出5个字符串当中最长的字符串.每个字符串长度在100以内,且全为小写字母. 输入 无 输出 无 样例输入 one two ...

  7. Java实现 蓝桥杯VIP 算法训练 连接字符串

    算法训练 连接字符串 时间限制:1.0s 内存限制:512.0MB 编程将两个字符串连接起来.例如country与side相连接成为countryside. 输入两行,每行一个字符串(只包含小写字母, ...

  8. Java实现 LeetCode 115 不同的子序列

    115. 不同的子序列 给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数. 一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字 ...

  9. Java实现 LeetCode 42 接雨水

    42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这 ...

  10. Java实现 LeetCode 29 两数相除

    29. 两数相除 给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商 ...