Java面向对象笔记 • 【第1章 面向对象】
全部章节 >>>>
本章目录
1.1 类和对象
- 类和对象是面向对象编程最重要、最核心的两个基本概念
- 类是对一类事物描述,是抽象的、概念上的定义
- 对象是实际存在的该类事物的每个个体,因而也称实例(instance)

1.1.1 类和对象的概念
- 对象表示现实世界中某个具体的事物
- 抽象是从特定的实例中抽取共同的性质以形成一般化概念的过程
- 类是具有共同属性和行为的对象的抽象
- 类也称为模板,因为它们提供了对象的基本框架
- 类可以定义为数据和方法的集合
类和对象的示例

类
- 类以共同特性和操作定义实体
- 类是用于组合各个对象所共有操作和属性的一种机制

对象的示例

属性
- 事物的特性在类中表示为变量
- 每个对象的每个属性都拥有其特有的值
- 属性名称由类的所有实例共享

方法
- 对象执行的操作称为方法
- 操作的具体实现
- 方法指定操作对象数据的方式
- 在得到操作请求时指定如何做的算法
方法的实例

1.1.2 类的语法结构
语法:
[修饰符]class类名
{
    定义构造方法;
    定义属性;
    定义方法;
}
- 修饰符可以是public、final、abstract或完全省略这三个修饰符
- 类名必须是一个合法的标识符
- 类中各成员之间的定义顺序对类的定义没有任何影响
1.1.3 对象的创建和使用
声明对象
格式:类名 对象名,例如:Hero hero;
实例化对象
格式:对象名 = new 构造方法(),例如:hero = new 构造方法();
属性的调用
格式:对象名.属性,例如:hero.name=“zhang san”;
方法的调用
格式:对象名.方法名([参数列表]),例如:hero.run(30)”;
示例:创建一个英雄对象并测试该对象属性的赋值和方法调用
public class Hero {
	String name; //名字
	//奔跑方法
	public  void  run(int speed){
		System.out.println(speed+"m/s的速度飞速狂奔");
	}
	public static void main(String[] args) {
		//创建英雄对象
		Hero hero = new Hero();
		//通过对象实例调用name属性并为该属性赋值
		hero.name="黑暗游侠";
		System.out.println("英雄的名字:"+hero.name);
		hero1.run(60);//调用hero对象run(speed)方法
	}
}
1.1.4 对象和引用
- 对象内容放在堆内存

- 类是一种引用数据类型
- 对象名是一个引用名
- 对象名存放着栈内存I栈内存
- 想比堆内存空间小但读取速度快
1.1.5 实践练习
1.2 方法的详解
- 方法是类或对象的行为特征的抽象
- 通过方法可以实现对类的属性的操作
- 功能封装
- 实现代码模块化重用
1.2.1 方法的声明
语法:
[<修饰符>]  返回类型 方法名([参数列表])
{
       方法体
}
- 修饰符表示方法的访问权限。修饰符有private、缺省访问修饰符、protected和public
- 返回类型为方法返回值的类型(方法没有返回值,则方法的返回类型为void)
- 参数列表表示方法调用时应该传递的参数个数和类型。
- 定义时为形参,它没有分配内存,运行时才分配内存
- 如果有多个参数,相邻的参数之间用逗号隔开
- 对于有返回值的方法,方法体中至少有一条return语句
- 方法不能嵌套定义
示例:在英雄类中设计一个战斗方法
class Hero {
	 // 定义战斗方法
	 void battle(){
	/*实现具体的英雄战斗的业务逻辑*/
	  }
  }
1.2.2 方法调用
在main方法中调用对象的实例方法步骤:
- 在类的main0方法中创建可以调用方法的实例
- 将实例赋值给指定的引用变量,通过引用“变量.方法名”的形式调用方法
说明:如果方法的返回类型为void,说明方法没有返回值,所以在main0方法中调用时,可以将此方法作为一条语句直接在程序中使用
示例:在英雄类中定义战斗方法并测试该方法的调用
public class Hero{
	String name;
	int age;
	public  void  battle(){
	    System.out.println(name+"在肆无忌惮的战斗他的年龄才只有"+age+"可
        		他的血量只有1%了...");
	}
	public static void main(String[] args) {
		Hero hero = new Hero();//创建英雄对象
		hero.name="暗夜魔王";//为name属性赋值
		hero.age = 15;//为age属性赋值
		hero.battle();//使用该对象的battle()方法
	}
}
1.2.3 方法参数传递
参数的传递是指实际参数向形参值的传递的过程。
Java中方法参数的传递方式为值传递。
将实参的副本(复制品)传入给形参
实参本身不会受到任何影响
解释:
Java中的参教传递类似于Dota游戏中英雄使用的幻象
当英雄使用幻象时就会产生一个与该英雄相同的复制品
幻象与英雄本身有相同的能力
但无论该幻象受到任何攻击和伤害都不会影响英雄本身
传入方法的是实参值的复制品,无论方法中对该复制品进行何种操作,实际参数值均不会受到任何影响
示例:方法参数传递过程结果示例
public class Parameter {
	//该方法用于在方法中互换形参值
	public void change(String x,String y){
		String temp;//定义一个临时变量
		System.out.println("***形参改变之前***");
		System.out.println("x="+x+"\t"+"y="+y);
		//形参值互换
		temp=x;//将x值赋值给变量temp
		x=y;//将变量y值赋值给变量x
		y=temp;//将temp值赋值给变量y
		System.out.println("***形参值互换后***");
		System.out.println("x="+x+"\t"+"y="+y);
	}
	public static void main(String[] args){
		Parameter param=new Parameter();//创建Parameter实例
		String a="10",b="20";
		System.out.println("---调用change()方法前---");
		System.out.println("a="+a+"\t"+"b="+b);
		param.change(a, b);//调用方法
		System.out.println("---调用change()方法后---");
		System.out.println("a="+a+"\t"+"b="+b);
	}
}
分析:
在调用方法之后,a、b的值仍然为10和20
即使形式参数的值改变了,但实际参数的值不会改变
1.2.4 实践练习
1.3 可变形参方法
从JDK1.5之后,Java允许定义形参个数可变的参数,从而允许为方法指定数量不确定的形参。如果在定义防法时,在最后一个形参的类型后增加三点“…”,则表明该形参可以接受多个参数值,多个参数值被当成数组传入。
可变形参方法类似于为方法传了一个数组,且在使用方法上也和数组相同
1.3.1 可变方法声明
语法:
[<修饰符>] 返回类型 方法名 (变量类型..变量名)
{
    方法体
}可变参数只能出现在参数列表的最后
“...” 位于变量类型和变量名之间,前后有无空格都可以
调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数
1.3.2 可变方法调用
示例:可变形参方法调用
public class VarargsTest {
	//定义形参个数可变的方法
	public static void testVarargs(int x, String...users) {
		for (String user: users) {
			System.out.println(user);
		}
	}
	public static void main(String[] args) {
		//采用可变个数形参的方法调用
		testVarargs(3,"张小文", "王艺儒", "李晨生");
	}
}
示例:采用数组形参定义方法
public class ArrayTest {
	//采用数组形参来定义方法
	public static void testArray(String[] users) {
		//users当成数组处理
		for (String user : users) {
			System.out.println(user);
		}
	}
 
	public static void main(String[] args) {
	//采用数组形参的方法调用
		testArray(new String[]{"张小文", "王艺儒", "李晨生"});
	}
}
1.3.3 可变参数与数组参数的比较
1、定义方式不一样
public static void testVarargs(String…users);//可变形参
 public static void testArray(Stringll users);//数组形参
2、调用方式不一样
testVarargs(“张小文”,”王艺儒”,“李晨生”;//可变形参
 testArray(new String[] {“张小文”,“王艺儒”,“李晨生”});//数组形参
3、参数位置不一样
数组形式的参数可以处于形参列表的任意位置
 个数可变的形参处于形参列表的最后,即一个方法中最多只能有一个个数可变的形参
1.3.4 实践练习
1.4 构造方法
1.4.1 构造方法的定义
- 构造方法是一种特殊的方法
- 它是一个与类同名且返回值类型为同名类类型的方法
- 对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化当类实例化一个对象时会自动调用构造方法
- 构造方法和其他方法一样也可以重载。
1.4.2 构造方法的特点
- 构造方法的功能主要用于在类的对象创建定义时进行状态的初始化
- 构造方法的命名必须和类名完全相同。构造方法没有返回值,也不能用void来修饰在Java中普通方法可以和构造方法同名,但是必须带返回值
- 构造方法不能直接调用,必须通过new运算符在创建对象时才会自动调用
- 当定义一个类的时候,通常情况下都会显示该类的构造方法,并且在方法中指定初始化的工作也可以省略,不过Java编译器会提供一个默认的构造方法,此默认构造函数是不带参数的,而一般方法不存在这一特点
1.4.3 实践练习
总结:
- 类是具有共同属性和行为的对象的抽象,对象是类的具体实例
- 类是一个具有自身属性和行为的独立单位。方法的四个要素是:方法名、参数列表、返回类型和访问修饰符
- 构造方法是一类名称与类同名,且没有返回类型的特殊方法
- 对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化
- 使用“对象名.属性”引用属性,以及“对象名.方法(参数列表)”调用方法
- 如果在定义方法时,在最后一个形参的类型后增加三点“...”,则表明该形参
- 可以接受多个参数值,多个参数值被当成数组传入
Java面向对象笔记 • 【第1章 面向对象】的更多相关文章
- 20145330《Java学习笔记》第一章课后练习8知识总结以及IDEA初次尝试
		20145330<Java学习笔记>第一章课后练习8知识总结以及IDEA初次尝试 题目: 如果C:\workspace\Hello\src中有Main.java如下: package cc ... 
- 《码出高效 Java开发手册》第二章 面向对象
		码云地址: https://gitee.com/forxiaoming/JavaBaseCode/tree/master/EasyCoding 第2章 面向对象 Object-Oriented Pro ... 
- 《Python 3.5从零开始学》笔记-第8章 面向对象编程
		前几章包括开启python之旅.列表和元组.字符串.字典.条件和循环等语句.函数等基本操作.主要对后面几章比较深入的内容记录笔记. 第8章 面向对象编程 8.3深入类 #!/usr/local/bin ... 
- 【疯狂Java学习笔记】【理解面向对象】
		[学习笔记]1.Java语言是纯粹的面向对象语言,这体现在Java完全支持面向对象的三大基本特征:封装.继承.多态.抽象也是面向对象的重要组成部分,不过它不是面向对象的特征之一,因为所有的编程语言都需 ... 
- JAVASCRIPT高程笔记-------第六章  面向对象的程序设计
		理解对象的概念 js中的对象与其他 编程语言中的类不一样 ECMAscript 没有类的概念 ECMA-262 把对象定义为 “无序属性的集合,其属性可以包含基本值,对象或者函数” ... 
- java基础笔记(6)----面向对象的三大特性
		简介:面向对象的三大特性就是封装,继承,多态,是面向对象的核心. 封装 简介:封装是类的边界,可以对数据起到保护作用 特性:属性私有,提供公开的get/set方法 属性私有:private 数据类型 ... 
- #《Essential C++》读书笔记# 第五章 面向对象编程风格
		基础知识 继承机制定义了父子(parent/child)关系.父类(parent)定义了所有子类(children)共通的共有接口(public interface)和私有实现(private imp ... 
- java学习笔记(3)——面向对象
		this关键字 this是当前对象的引用,是运行期间当前对象本身. 可以使用this明确的访问当前对象的属性或者方法,类似于“我” this()可以调用本类的其他构造器,可以使用构造器的重用简化代码的 ... 
- java学习笔记(四)面向对象
		一.形參长度可变的方法 当传入被调用的函数參数数量不确定时,在方法最后一个形參的类型后加上三个点号(...),表明该形參能够接受多个參数值.多个參数值被当做数组传入,这些參数必须为指定的类型. pac ... 
- Java基础笔记(十三)——面向对象
		类和对象 类是具有相同属性和方法的一组对象的集合,好比一个虚拟的轮廓(抽象的概念),确定对象将会拥有的特征(属性)和行为(方法). 对象是类的实例表现,是一个具体的东西(一个看得到.摸得着的具体实体) ... 
随机推荐
- 机器学习常用python包
			(py37) ai@ai:~$ pip freeze |grep -v '@' astor==0.8.1 certifi==2021.5.30 chardet==4.0.0 cycler==0.10. ... 
- Fragment放置后台很久(Home键退出很长时间),返回时出现Fragment重叠解决方案
			后来在google查到相关资料,原因是:当Fragment长久不使用,系统进行回收,FragmentActivity调用onSaveInstanceState保存Fragment对象.很长时间后,再次 ... 
- 删除button中除label之外的View
			因为button中的UIButtonLabel判断class类型时,会被认为是view,所以想删除view类型的子控件时,会将label也删掉,从而无法显示title,此时,可以给指定的View添加t ... 
- 【Java 8】方法引用
			一.概述 在学习lambda表达式之后,我们通常使用lambda表达式来创建匿名方法.然而,有时候我们仅仅是调用了一个已存在的方法.如下: Arrays.sort(stringsArray,(s1,s ... 
- 【JavaWeb】【JSP】JSP传值到Servlet后端为NULL的问题
			JSP传值到Servlet后端为NULL的问题 哔哩哔哩@萌狼蓝天 博客:萌狼工作室-博客园 联系QQ:#3447902411# | 仅限技术交流可添加 | 添加请说明你的方向和来意 1.目标文件路径 ... 
- Boss直聘App上“天使投资、VC、PE” 与“A轮、B轮、C轮融资”的关系
			我们经常看到朋友圈里某某公司获得了某轮融资,所谓的A轮B轮究竟是个什么概念呢?今天就跟小伙伴们分享一下A.B.C.D轮融资与天使投资.VC.PE的关系. 天使投资(AI):天使投资所投的是一些非常早期 ... 
- Android工具 - 随机测试(猴子)
			原创文章,如有转载,请注明出处:http://blog.csdn.net/yihui823/article/details/6697535 本文章的前提:已经安装了Eclipse和ADT.androi ... 
- Table.AlternateRows删除间隔….Alternate…(Power Query 之 M 语言)
			数据源: "姓名""基数""个人比例""个人缴纳""公司比例""公司缴纳"&qu ... 
- VMware 安装Linux (以CentOS7-2009为例)
			1.VMware下载安装 链接:https://pan.baidu.com/s/11Y-AFB3aaAFxafdGPw4zaw 提取码:hskj 2.CentOS镜像官网下载:https://www. ... 
- java多线程10:并发工具类CountDownLatch、CyclicBarrier和Semaphore
			在JDK的并发包(java.util.concurrent下)中给开发者提供了几个非常有用的并发工具类,让用户不需要再去关心如何在并发场景下写出同时兼顾线程安全性与高效率的代码. 本文分别介绍Coun ... 
 
			
		