学堂在线—Java程序设计—课程笔记(第2章 类与对象)

第2章 类与对象

2.1 面向对象方法的特性

  1. 面向对象方法的特性:抽象、封装、继承、多态;
    抽象:忽略问题中与当前目标无关的方面,只关注与当前目标有关的方面;
    封装:利用抽象数据类型将数据和基于数据的操作封装在一起;
    继承:基于已有类产生新类的机制;(超类/基类/父类->子类/派生类);
    Java语言仅支持单继承;
    多态:超类和子类的对象可以响应同名消息而方法不同。

2.2 类声明与对象创建、数据成员、方法成员

  1. 类是对一类对象的描述,对象是类的具体实例;
    定义对象过程:声明引用变量、创建对象;
    引用变量可以被赋值空值;
  2. 数据成员声明:
    public、protected、private访问控制符;
    static静态成员变量(类变量);
    final变量的值不能被修改;
    transient变量是不需要序列化的;
    volatile共享变量。
  3. 默认的toString()返回:getClass().getName() + “ @” + Integer.toHexString(hashCode())
  4. 类变量(静态变量):用static修饰,在整个类中只有一个值,类初始化时就被赋值;
  5. 方法声明:(public/protected/private、static、final同成员)
    abstract抽象方法;
    native用来集成java代码和其他语言的代码;
    synchronized用来控制多个并发线程对共享数据的访问;
  6. 在类体内部,方法和方法之间可直接互相调用,直接用方法名;
    实例/类方法调用时参数传递:值传递,引用传递;
    类方法(静态方法):可以通过类名/实例名直接调用,不能声明为抽象的;
    类方法可用于很多不需构造对象/实例的简单问题;
  7. 可变参数使用省略号表示,其实质是数组 String…s表示String[] s;
    可用增强for循环处理;

2.3 包、类的访问权限控制

  1. 包:一组类的集合,可包含若干个类或若干个包;
    包的作用:
    相关源代码文件组织在一起;
    类名的空间管理;
    提供包一级的封装及存取权限;
  2. Java中包名使用小写字母表示;
    命名方式建议将机构的Internet域名反序作为包名的前导,不可用、冲突字符等用下划线;
  3. 一个Java源代码文件称为一个编译单元,三部分:
    所属包的声明、Import包的声明、类和接口的声明;
    一个编译单元中只能有一个public类,该类名与文件名相同;
    经过编译每个类都会产生class文件;
  4. 包名就是目录名,目录名不一定是包名;
    引入包:import;
    Java编译器自动引入java.lang;
  5. 静态引入:单一引入,全体引入;引入后在程序中使用不用带类名。
  6. 同一包中的类:都可访问;
    不同包中的类:public类型可被访问;
  7. 类的成员访问控制:
    public:都可;
    protected:包内或子类;
    默认:包内;
    Private:同类;
  8. 常用公有方法:get方法:获取成员值;set方法:设置成员值;
  9. this关键字:如果方法内的局部变量名与实例变量名相同,方法内访问实例变量时需要this关键字;

2.4 对象初始化、内存回收

  1. 构造方法:方法名与类名相同,不定义返回类型,通常被声明为公有,任意多个参数,完成对象的初始化工作,不能在程序中显式调用,未声明时会隐含生成;
  2. 默认构造方法:没有参数(内部类除外),方法体为空;如果类声明中没有给实例变量赋初值,对象的属性值为零或空;
  3. 构造方法传递初始值进行初始化;
    构造方法可以被重载;
  4. 只要显示声明了构造方法,编译器就不再生成默认构造方法;(可以显示声明无参数方法)
  5. 使用this关键字在一个构造方法中调用另外的构造方法;通常用参数个数少的调用个数多的;
  6. 常量:final
    实例变量在类中定义或构造方法结束前初始化;
    类变量必须在声明同时初始化;
  7. 无用对象:离开了作用域的对象;无引用指向对象;
  8. Java运行时系统通过垃圾收集器周期性地释放无用对象所使用的内存;
    自动调用finalize()方法(可能在任何时机以任何次序执行);
    垃圾收集器:自动标记不再使用的对象,作为后台线程运行,通常在系统空闲时异步执行;

2.5 枚举类

  1. 枚举类enum,隐含继承java.lang.Enum;
  2. 枚举类构造方法必须是包内私有或私有,不能显式调用(在初始化时即构造);
    values()方法返回枚举值数组;
    toString()返回枚举值字符串描述;
    valueOf将以字符串形式表示的枚举值转化为枚举类型对象;
    Ordinal获得对象在枚举类型中的位置索引;

2.6 应用举例、本章小结

  1. 控制输出格式
    java.text.DecimalFormat(“$0.00”).format(balance));

编程练习题

1. Rectangle类

题目

1、定义两个成员变量height和width,表示矩形的长和宽,类型为整型 2、定义一个getArea方法,返回矩形的面积 3、定义一个getPerimeter方法,返回矩形的周长 4、在main函数中,利用输入的2个参数分别作为矩形的长和宽,调用getArea和getPermeter方法,计算并返回矩形的面积和周长

输入:
输入2个正整数,中间用空格隔开,分别作为矩形的长和宽,例如:5 8

输出:
输出2个正整数,中间用空格隔开,分别表示矩形的面积和周长,例如:40 26

思路

按要求编写Rectangle类即可。

代码

import java.util.Scanner;

class Rectangle {
   
	int height, width;
	
	int getArea() {
   
		return height * width;
	}
	
	int getPerimeter() {
   
		return 2 * (height + width);
	}
}

public class homework2_1 {
   
	public static void main(String[] args) {
   
		Scanner in = new Scanner(System.in
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值