大学-Java课程-第四章 类与对象

4.1 编程语言几个发展阶段

4.1.1 面向机器语言

  • 就是01010这样由0和1构成的语言。由于不同型号的机器电路不同所以,同样的格式表达的意思可能不同。

4.1.2 面向过程语言

  • 特别的针对过程(可以简单的理解为算法),将要完成的任务划分成一个个步骤,然后通过算法去执行。

4.1.3 面向对象的语言

  1. 将要完成的任务划分成一个一个的对象,划分之后可以实现一些简便的的操作。
  2. 对象:可以是生活中的某个东西。(也可以简单理解为一个一句话的主语,eg:汽车刹车了。)
  3. 面向对象的三大特征
    1. 封装性(抽象性)
      1. 将同类事物的行为和状态提取(抽象)出来。
        1. 类:上述中的同类事物。
        2. 变量:上述中的状态。
        3. 方法:上述中的行为。
    2. 继承
      1. 举例:子类可以继承父类的内容(第五章详细讲)
    3. 多态
      1. 现在也学不懂,以后第五章会学习

4.2 类

4.2.0 类、类体、变量、方法的图示

4.2.1 类声明

  1. 类是封装数据和算法用的。
  2. 类声明的例子
    class People{	//class前边还可以加public等修饰语,含义以后再说
    ……
    }
    class 植物{
    ……
    }
    
  3. 给类命名的规则
    1. 如果类名是拉丁文要大写首字母
    2. 如果有多个单词符合而成要把每个单词首字母大写(驼峰)

4.2.2 类体

  1. 类体内容(类体内只有两个部分“成员变量”“方法”

    1. 变量的声明:存储属性的值。
    2. 方法的定义:方法可以对类中声明的变量进行操作,即给出算法。
  2. 例子

    1. 求梯形的例子(这个不能输出结果只是展示一下变量和方法的是什么)
    class Ladder{
    	float above;	//梯形的上底(声明变量)
    	float bottom;	//梯形的下底(变量声明)
    	float height;
    	float area;		//梯形的面积(变量声明)
    	float computerArea(){	//定义方法computerArea
    		area = (above+bottom)*height/2.0f;
    		return area;
    	}
    	void setHeight(float h){
    		height = h;
    	}
    }
    
    1. 在一个类内方法和变量的位置可以互换

4.2.3 成员变量

  1. 成员变量:变量声明的部分是类的成员变量。
  2. 变量的类型:成员变量的类型可以使Java中的任何一种数据类型。
  3. 琐碎知识
    1. 成员变量在整个类内的所有方法里都有效,其有效性与它在类体中书写的先后位置无关。但是如果声明成员变量a时,指定的初始值和其他成员变量的的值有关,那么声明这些成员变量的位置要在声明成员变量a的前边。(简单来说就是都按顺序肯定没毛病)
    2. 成员变量一定会有初始值,即使没有初始化。
    3. 注意:不能在方法外进行赋值,因为方法外只能声明变量进行初始化。
    class A{
    	float height = 1;
    	height  = 11;		//这里就是错误要进行赋值只能在方法中赋值,因为赋值是过程。
    }
    
    1. 一般不提倡把变量分散在方法之间写
    2. 编程风格
      1. 一行只声明一个变量
      2. 变量的第二个单词的首字母大写
      3. 不要把m、n、l、1放在一起写,尽量见名思意,都用英文名字写。

4.2.4 方法

  • 理解:方法和变量都是等价的。变量需要用int声明,方法也需要用int声明
  1. 方法的组成:方法头,方法体
  2. 方法头
    1. 方法头由类型(例如:int等)、名称和名称之后的一对小括号以及其中的参数列表构成
    int speak(){	//方法头
    	return 23;	//方法体
    }
    
    1. 方法的类型:方法返回的数据类型可以使java中的任何一种数据类型,当一个方法是void类型是,该方法就不需要返回数据。
  3. 方法体
    1. 方法体的内容:局部变量的声明和java语句,即在方法体内可以对成员变量和方法体中的局部变量进行操作。
    int gerSum(int n){		//参数用int声明一个方法,参数变量n是局部变量
    int sum=0;				//声明局部变量sum
    for(int i=1;i<n;i++){	//for 循环语句
    	sum=sum+1;
    	}
    return sum;				//return 语句
    }
    
    1. 局部变量之在方法内有效,并且与位置有关。
    2. 局部变量没有初始值
    3. 区分成员变量和局部变量
      1. 如果成员变量和局部变量名字相同时,那么成员变量被隐藏,即该成员变量在这个方法内暂时失效。
      2. 如果成员变量被隐藏但是还想要用就是用关键字this
    class Tom{
    	int x = 10;
    	int y;
    	void f(){
    		int x = 5;
    		y = x+this.x;	//y得到的值是10
    	}
    }
    

4.3 构造方法与对象的创建

  • 对象:用类定义的变量。
    • 理解:可以用int定义变量理解,这个使用类定义的变量

4.3.1 构造方法与对象的创建

  1. 构造方法:使用类创造对象的时候就必须使用构造方法。
  2. 构造方法格式要求
    1. 构造方法的名字必须要与类型相同,第一个字母必须大写
    2. 一个类中,不能有两个完全相同的构造方法(不同的地方就是参数)
    3. 如果类中没有构造方法,编译的时候会默认只有一个构造方法,并且没有参数

4.3.1.1 默认构造方法和自定义构造方法

  • 如果类中定义了一个或者多个构造方法那么java不提供默认构造方法
    没有自定义构造方法例子
    class A{
    	int x,y;
    }
    
    等价于
    class A{
    	int x,y;
    	A (){
    		
    	}
    }
    

4.3.1.2 构造方法没有类型

class Point{
	int x,y;
	Point(){		//是构造方法
		x = 1;
		y = 2;
	}
	int Point(){	//不是构造方法,有类型“int”
		x = 1;
		y = 2;
	}
	void Point(){	//不是构造方法,有类型“void”
		x = 1;
		y = 2;
	}
}

4.3.2 创建对象

  • 创建一个对象包括两个步骤:对象的声明和为声明的对象分配变量
  1. 对象的声明
    类的名字 对象的名字
    Ladder ladder	//等价于int a[];
    
  2. 为声明的对象分配变量
    1. 格式
    对象的名字 = new 构造方法的名字
    XiyoujiRenwu zhubajie;
    zhubajie = new XiyoujiRenwu();
    
  3. 对象的内存模型
    1. 声明时的内存模型(XiyoujiRenwu zhubajie之后)
      在这里插入图片描述
    2. 为对象分配变量后的内存模型(zhubajie = new XiyoujiRenwu()之后)
      1. 将西游记类中的成员变量分配空间,然后执行构造方法的语句,并初始化成员变量
      2. new运算符再为变量分配内存后,计算(是一个计算)一个称作引用的值(改值代表着这些成员变量的内存位置及相关信息的重要信息),即表达式new XiyoujiRenwu()是一个值
      3. 图示
        在这里插入图片描述
    3. 当用类创建两个不同的对象的时候,两个对象的栈内的地址不同,因为是重新分配空间的

4.3.3 使用对象

  1. 使用对象的格式
    调用变量:对象名.变量
    调用方法:对象名.方法
    

4.3.4 对象的引用和实体

  1. 重要结论:一个类声明了两个对象,如果两个对象具有相同的引用,那么这两个对象具有两个相同的变量(实体)。
  2. 图示
    1. 两个对象与实体的关系
      在这里插入图片描述
    2. 对象进行相互赋值之后的关系(原因是因为赋值的不是变量是引用)
      在这里插入图片描述

4.4 类与程序的基本结构

  1. 知识点
    1. 一个Java程序称作一个工程,是由若干个类构成。
    2. 提倡一个源文件中只放一个类
    3. 一个类中可以调用其他符合条件的类

4.5 参数的传值

4.5.1 传值机制

  1. 方法中参数变量的值是调用者的值的拷贝。习惯上称方法中的参数是形参,向其传值的变量是实参。传值结束之后改变形参或者实参的值的改变相互不影响。

4.5.2 基本数据类型参数传值

  • 就是位数高类型不能给位数低的类型传值。

4.5.3 引用类型参数传值

  • 复习:对象中存放的是引用,new过的对象有一个空间放实体。
  1. 当参数是引用类型时,参数传值传递的是引用。所以改变参数中的实体会改变原来的引用类型参数中的实体。但是改变参数中的引用,不改变原来的引用。

4.5.4 可变参数

  • 使用方法:int ...a代表创建一个为止长度的数组,同理第一个数字是a[0]。
  • 使用范围:只能在方法的形参中使用。

4.6 对象的组合

  • 对象的组合:在某个类(B)中把其他类(A)的对象作为成员变量,在用这个类(B)创建对象时,就对组合其他类(A)的方法。

4.6.1 组合与复用

  • A组合B之后A就可以调用B的方法和变量。

4.6.2 类的关联关系和依赖关系的UML图

4.7 实例成员与成员类

  • 类中的内容重新认识
    在这里插入图片描述
  • 成员变量的声明规则
    • 类变量static 变量名(不能用static声明局部变量)
    • 实例变量变量名
  • 类变量的使用:可以通过类名直接访问或者用对象访问。
  • 成员变量内存分配空间问题:实例变量在创建对象之后才分配空间,类变量在写完类之后就开辟了空间。

4.8 方法重载

  • 方法重载的意思:方法名字相同,但方法中的形参不通。(一般用于方法都是做同一样的事情,但是其中的变量不同)
  • 方法重载需要满足的条件
    • 参数个数不同
    • 单数个数相同,但是单数类型相同

4.9 this关键字

  • 不能出现在类方法中,this也不能出现在静态方法中,以为不用创建对象就可以调用静态方法。(在类方法中代替this的是对象名称)
  • 自己理解:this是在未出现对象时,用于指代类中的变量或者方法。

4.10 包

  • 作用:区分类名相同的源文件,储存分类源文件。
  • 命名规则:合法表示符加点构成,例子:std.dgt.df.d
  • 如果省略了包默认为“无名包”中
  • 在命令行窗口中的编译方法包的目录+包名(在一些软件中都不用这些)

4.11 import语句

  • 语法:import 包名.包中的类名(引入具体的类)或import 包名.*(引入包中的全部的类)
  • 两种引入的区别:第二种可能会增加编译时间,但是不增加运行时间。
  • 注意:当使用import的源文件中有和引用的包相同的类名时,建议根据自己的需求改变二者任意一个包名。
  • 如果是自定义包的引用:路径报名左对齐(到时候再查)

4.12 访问权限

范围privatedefault(友好类)protectedpulice
同包同类
同包不同类
不同包的子类
不同包的非子类
  • 四种访问,三个关键字
  • 访问权限可以控制变量和方法
  • 访问权限是控制的是类体之外的对象是否可以访问。
  • 类的访问权限只有:有好的和public两种。
  1. 私有变量和私有方法
    1. 关键字private
    2. 功能:只有在类体中可以访问,类体之外不可以访问。
    3. 存在的意义:在同一个类体中可以同时存在私有和公共的,在调用公共的方法时,可以间接访问私有的变量或者方法。(在编程时不推荐这么使用)
  2. 公有变量和方法
    1. 关键字public
    2. 功能:谁都可以访问。
  3. 受保护变量和方法
    1. 关键字:protected
    2. 功能:超出包的范围不可以访问。(和友好的区别是在继承上的区别)
  4. 有好的变量和方法
    1. 关键字:没有关键字
    2. 功能:超出包的范围不可以访问。

4.13 基本类型的封装

  • 老师教的是构造一个类单独放一个数据,但是不了解具体的作用
  • 基本类型封装的关键字:Byte,Short,Character,Integer,Long,FloatDouble(这里调用的包是byteValue(),shortValue(),charValue(),intValue(),longValue(),floatValue(),doubleValue()
  • 使用基本类型封装的语法
    关键字 变量名=数据
    Integer number1=0;
    
  • 注意
    • 基本类型必须要和要封装的基本类型对象一样。
    • Double number=new double()不建议用这种方法封装基本类型

4.14 var声明局部变量

  • 不建议用,阅读不方便。
  • 适用范围:在Java SE10开始增加了“局部类型判断这一新功能”。
  • 功能:不用自己写代码是判断变量是什么类型,用var就可以自动判断。
  • 使用方法
    • 只能在方法中使用,不能定义成员变量。
    • 定义时必须初始化,不能后来输入自己定义变量类型,不是动态变量。

4.15 对象数组

  • 和创建普通数组差不多。
  • 创建语法
    Student []a=new Student[10];//创建一个数组用于存放变量。但是还没有创造对象。
    a[0]= new Student();		//创建一个对象
    

4.16 IRE 扩展与jar文件(不重要,以后要用现学习)

4.16.1 文档性质的jar文件

  • jar文件的作用:将多个有包的类压缩成一个jar文件,可以方便用import导入其中的类。
  • 压缩成操作步骤
    • 先编译通过
    • 写清单文件
      在这里插入图片描述

4.17 文档生成器(需要的时候学习)

4.18 应用举例(以后复盘的时候学习)

4.19 小结

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值