Java笔记之类与对象

面向对象是Java语言的特点。

面向对象(oop)于面向过程(pop)

两种都是一种思想,面向对象是相对于面向过程而言的。面向过程强调的是功能行为,以函数为最小的单位,考虑怎么做。面向过程是将功能封装进对象中,强调具备了功能的对象,以类、对象为最小单位,考虑谁来做。

面向对象由主要下列三个特性。

用人把大象装进冰箱里。

如果是面向过程的话:

1.把冰箱打开  2.把大象塞在冰箱里 3.关闭冰箱

如果是面向过程的话:

就要关注主体有是什么样的功能

人{

        冰箱。开();

        抬起(大象){}

}

冰箱{

        开()

}

大象{

}


类与对象

对象是类的实例化,类是Java中最重要的数据类型,类声明的变量被称为对象,即类是用来创建对象的模板。

类的实现包括两个部分:类声明和类体。基本的格式为

class 类名{

//声明类的成员变量

//声明类的成员方法

//类体的内容

}

其中class是关键字,用来定义类。class 类名是类的声明的部分,类名必须是合法的Java标识符。两个大括号以及之间的内容是类体。

public class Book { // 创建书类
	public static void main(String[] args) {
		Book book = new Book(); // 创建书类对象
		int shelf = 30; // 初始化书架上书的本数(实参)
		int box = 40; // 初始化箱子里书的本数(实参)
		// 把书架上的书全部放进箱子后,输出箱子里书的总数
        //以上是成员变量,语法是 :数据变量 变量名称[=值]
		System.out.println("把书架上的书全部放进箱子后,箱子里一共有"
				+ book.add(shelf, box) + "本书。\n明细如下:书架上"
				+ shelf + "本书,箱子里原有" + box + "本书。");
	}
	private int add(int shelf, int box) { // 把书架上、箱子里的书相加求和(形参)
		box = box + shelf; // 对box进行加shelf操作
		return box; // 返回box
	}

    /*以上是成员方法,语法格式是:
    [权限修饰符] [返回值类型]方法名([参数类型 参数名])[throws 异常类型]{
	方法体
	return 返回值;
    */
}
}

权限的修饰符可以是private,public,protected中的任意一个。

返回值类型可以指定任何的返回类型,也可以是空类型。

一个成员方法既可以有参数,也可以没有参数

成员方法的参数

调用方法时可以给该对象传递一个或多个值,传给方法的值叫做实参,方法内部的变量叫做形参,形参的声明语法与变量的声明语法一样。形参在方法内部有效。Java中方法的参数有三种参数:值参数,引用参数,不定长参数。

值参数

编译器在调用方法时把实参的值复制到形参中,由于是值传递,所以,在方法中对值类型的形参的修改不会影响到实参。

引用传递在给方法参数时,参数的类型时数组或者其他引用类型,那么,在方法中对参数的修改会反映到原有的数组或者其他的引用类型上。

不定长参数 :在声明方法时,如果有若干个相同类型的参数,可以定义为不定长参数,该类型的参数声明如下:

权限修饰符 返回值类型 方法名 (参数类型... 参数名)参数类型和参数名之间是三个点

构造方法

类除了成员方法之外还有构造方法

class Book{
    public Book(){  //(无参)构造方法
    }
}
1.没有返回类型

2.与本类的名称相同

3.构造方法的主要作用是完成对象的初始化工作,它能把定义对象的参数传给对象成员

也可以写有参数的构造方法

但是如果写了有参数的构造方法,系统就不会默认写一个无参数的构造方法。

this关键字

this关键字可以调用成员变量和成员方法,它引用的是本类的一个对象。

在局部变量或方法参数覆盖了成员变量时,就要添加this关键字明确引用的是类成员还是局部变量或方法参数。

this关键字除了可以调用成员变量或成员方法之外,还可以作为方法的返回值。
例如,在项目中创建一个类文件,在该类中定义Book类型的方法,并通过过this关键字进行返回

static关键字

由static修饰的变量,常量和方法分别被称作静态变量、静态常量和静态方法,也被称作类的静态成员。

代码块的执行顺序 创建静态代码块、非静态代码块、构造方法、成员方法,查看这几处代码的调用顺序。代码如下:

public class StaticTest {
	static String name;
	// 静态代码块
	static {
		System.out.println(name + "静态代码块");
	}
	// 非静态代码块
	{
		System.out.println(name + "非静态代码块");
	}
	public StaticTest(String a) {
		name = a;
		System.out.println(name + "构造方法");
	}
	public void method() {
		System.out.println(name + "成员方法");
	}
	public static void main(String[] args) {
		StaticTest s1;// 声明的时候就已经运行静态代码块了
		StaticTest s2 = new StaticTest("s2");// new的时候才会运行构造方法
		StaticTest s3 = new StaticTest("s3");
		s3.method();// 只有调用的时候才会运行
	}

类的主方法

主方法是类的入口点,它指定了程序从何处开始,提供对程序流向的控制。Java编译器通过主方法来执行程序。

主方法的语法如下∶

public static void main(String[] args){
		// 方法体
}

在主方法的定义中可以看到主方法具有以下特性∶

  • 主方法是静态的,所以如要直接在主方法中调用其他方法,则该方法必须也是静态的。
  • 主方法没有返回值。
  • 主方法的形参为数组。其中 args[0]~args[n] 分别代表程序的第一个参数到第n+1个参数,可以使用 args.length 获取参数的个数字

继承

Java中用extends关键字来声明子类继承于父类

class 父类{

}

class 子类 extends 父类{

}

继承类型

继承分为单继承和多重继承,单继承是指一个子类只能有一个父类。多继承是一个子类可以有两个以上的父类

Java不支持多继承

继承关键字

Java除了extends,还可以用implements关键字来继承,Java中不支持多重继承,但是用implements可以实现多个接口

super,this,final

super:引用当前对象的父类成员

this:指向当前类的引用。

final即最终的,不可变的。final的功能将类定义为不可继承的,也可以用于修饰方法,被修饰的方法不可被子类重写。

抽象类与接口

抽象类是它的所有子类的公共属性的集合,是包含一个或多个抽象方法的类

由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。

Java是通过关键字abstract来实现抽象类的:

Modifies abstract class ClassName {…}

这里需要注意的是抽象类的修饰符必须为public或者protected,不能是private,因为创建抽象类,就是要被其他类继承,用private修饰了,则不能被子类继承,子类便无法实现该方法。

7.2 抽象方法

abstract void method();
如果一个类包含抽象方法,其内容由子类决定,就是抽象方法了,抽象方法只有声明,没有具体的实现:

abstract void method();
  • 如果一个类包含抽象方法,那么该类必须是抽象类。
  • 任何子类必须重写父类的抽象方法,或者声明自身为抽象类。

接口在Java中书以抽象类型,是抽象方法的集合。接口是比抽象类更抽象的存在,Java接口的方法都没有实现,并且都必须是抽象的。

从抽象层次上理解,抽象类是对类的抽象,接口是对行为的抽象。

接口中的所有属性默认为:public static final

接口中的所有方法默认为:public abstract

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值