Java面向对象(一)类和对象
面向过程和面向对象的区别
面向过程,强调的是功能行为,是将实现一个功能的步骤编写在一个函数中,以函数为最小单位。
面向对象,是将需要的功能封装进一个对象中,使一个对象具有很多的功能特征,以类/对象为最小单位
一、类和对象
类:是对一类事物抽象性的描述,是一种概念上的定义,比如:人类,鸟类、虫类
对象:是实际存在的某个类的个体,通常也称为实例(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 | 
属性的赋值过程
属性的赋值顺序
- 默认初始化 
int age; - 显式初始化 
int age = 23; - 构造器中初始化 
this.age = age; - 通过“对象.属性“或“对象.方法”的方式赋值
 
方法
方法是类或对象行为特征的抽象,用来完成某个功能操作,将功能封装成方法的目的是实现代码重用。
基本格式:
class Person{
    public void show(){ // 修饰符 返回值类型 方法名 (参数类型 形参1, 参数类型 形参2...){}
        System.out.println("jello");
    }
}
// void 表示没有返回值
若有返回值,使用关键字return返回指定类型的数据
注意:方法被调用一次,就会执行一次。返回值类型为void时, 也可以使用return关键字,只是这时是用于结束当前方法执行。
构造器(构造方法)
构造器的特征:
- 与类名相同
 - 不声明返回值类型,不能有
return语句 - 不能被
static、final、synchronized、abstract、native修饰 
构造器的作用:创建对象,为对象进行初始化
语法格式:
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]);
    }
};
说明:
- 声明格式:方法名(参数的类型名 ...参数名)
 - 可变参数:方法参数部分指定类型的参数个数是可变多个:0个,1个或多个
 - 可变个数形参的方法与同名的方法之间,彼此构成重载
 - 可变参数方法的使用与方法参数部分使用数组是一致的
 - 方法的参数部分有可变形参,需要放在形参声明的最后
 - 在一个方法的形参位置,最多只能声明一个可变个数形参
 
方法参数的值传递机制
Java里方法的参数传递方式只有一种:值传递。即将实际参数的“值”传递进方法中.
形参是基本数据类型时,传递的是基本数据类型变量的数据值
形参是引用数据类型时,传递的是引用数据类型变量的地址值
扩展:
char[] arr1 = new char[3];
System.out.println(arr1); // 猜猜结果
递归方法
递归方法:一个方法体内调用自身
注意:递归一定要有一个结束条件,否则会无限递归,最终爆栈退出
Java面向对象(一)类和对象的更多相关文章
- java面向对象之 类和对象
		
OOP:Object Oriented Programming(面向对象编程) 面向对象: 1:将复杂的事情简单化. 2:面向对象将以前的过程中的执行者,变成了指挥者. 3:面向对象这种思想是符合现在 ...
 - Java面向对象(一) 类和对象
		
一.软件开发进化史 摘自<从零开始学架构> 机器语言(1940年) 最早的软件开发使用的是“机器语言”,直接使用二进制码0和1来表示机器可以识别的指令和数据. 汇编语言(20世纪40年代) ...
 - Java核心基础第5篇-Java面向对象_类和对象
		
Java面向对象之类和对象 一.面向对象概述 Java是完全的面向对象编程(Object Oriented Programming),简称OOP. 面向对象编程的思维方式更加符合大家的日常生活,因为我 ...
 - Java面向对象06——类与对象小结
		
小结 /* 1. 类与对象 类是一个模板:抽象,对象是一个具体的实例 2. 方法 定义.调用  3. 对应的引用 引用类型: 基本类型(8) 对象是通过引用来操作的:栈-- ...
 - Java—面向对象、类与对象、封装
		
理解什么是面向过程.面向对象 面向过程与面向对象都是我们编程中,编写程序的一种思维方式. 面向过程的程序设计方式,是遇到一件事时,思考“我该怎么做”,然后一步步实现的过程. 面向对象的程序设计方式,是 ...
 - Java面向对象03——类与对象的创建
		
类的创建与初始化对象 age: 以类的方式组织代码,以对象的组织(封装)数据 package oop.demon01.demon02;  // 学生类(抽象模板) public class Stu ...
 - 077 01 Android 零基础入门  02 Java面向对象 01 Java面向对象基础 01 初识面向对象 02 类和对象
		
077 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 02 类和对象 本文知识点:类和对象 说明:因为时间紧张,本人写博客过程中只是对知识点 ...
 - Java面向对象 Object类    内部类
		
 Java面向对象 Object类 内部类 知识概要: 一:Object类 二:内部类 匿名内部类的写法 1.Object O ...
 - 【JAVA零基础入门系列】Day11 Java中的类和对象
		
今天要说的是Java中两个非常重要的概念--类和对象. 什么是类,什么又是对象呢?类是对特定集合的概括描述,比如,人,这个类,外观特征上,有名字,有年龄,能说话,能吃饭等等,这是我们作为人类的相同特征 ...
 - Java学习笔记十三:Java中的类和对象
		
Java中的类和对象 一:什么是对象: 总的来说就是"万物皆对象",客观存在的事物皆为对象.是计算机所关注的具体信息. 对象(object)是一件事.一个物体.一个名词,或可以获得 ...
 
随机推荐
- Java实现 洛谷 P1060 开心的金明
			
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NN元钱 ...
 - Java实现 LeetCode 999 车的可用捕获量(简单搜索)
			
999. 车的可用捕获量 在一个 8 x 8 的棋盘上,有一个白色车(rook).也可能有空方块,白色的象(bishop)和黑色的卒(pawn).它们分别以字符 "R"," ...
 - Java实现 蓝桥杯VIP 基础练习 龟兔赛跑预测
			
题目描述 话说这个世界上有各种各样的兔子和乌龟,但是 研究发现,所有的兔子和乌龟都有一个共同的特点--喜欢赛跑.于是世界上各个角落都不断在发生着乌龟和兔子的比赛,小华对此很感兴趣,于是决定研究不同兔 ...
 - Java实现 LeetCode 406 根据身高重建队列
			
406. 根据身高重建队列 假设有打乱顺序的一群人站成一个队列. 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数. 编写一个算法来重建这个队列. ...
 - 用户管理命令-passwd
			
passwd可以给用户设置密码或者修改密码,超级用户可以修改任何用户的密码,而且可以不遵守密码的复杂性原则,普通用户只能修改自己的密码,必须遵守密码的复杂性原则 passwd [选项] 用户名 常用选 ...
 - iOS -实现imageView中的button响应点击事件的方法
			
<pre name="code" class="cpp" style="font-size: 13px;">/** imagev ...
 - EasyARM-iMX257如何配置出低速率CAN
			
EasyARM-iMX257如何配置出低速率CAN 在EasyARM-iMX257 Linux开发指南 V1.02.01"5.6 socket CAN编程socket CAN编程" ...
 - Centos 文件系统基础命令
			
目录 centos7的目录结构(linux所以的都文件,万物接文件) 1 pwd 显示当前所在的路径 2 cd 切换目录结构 3 mkdir创建目录信息 4 touch 创建文件(触摸) 5 ls 检 ...
 - Ubuntu16.04安装完成后首先更换源地址,加速下载
			
也可以,sudo pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple临时改变源地址下载先备份源文件sudo cp sources ...
 - Java操作符,<<、>>等
			
数学意义:在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方. 计算:3 << 2 3 << 2,则是将数字3左移2位 1. ...