黑马程序员学习日记--面向对象(一)

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------


一:面向对象概述,构造函数,构造代码块,this关键字

面向过程:强调的是功能行为

面向对象:将功能封装进对象,强调具备了功能的对象

面向对象三个特征:

封装,继承,多态


类和对象的关系:

类:对现实生活中事物的描述

对象:这类事物中实实在在的个体

映射到java中,描述就是class定义的类

具体对象就是对应java在堆内存中用new建立实体

类类型变量指向对象


成员变量和局部变量:

成员变量作用于整个类中

局部变量作用于函数中,或者语句中

成员变量:在堆内存中,因为对象的存在,才在内存中存在

局部变量:存在栈内存


匿名对象:对象的简化形式,两种使用情况:

当对对象方法只进行一次调用的时候;

匿名对象可以作为实际参数进行传递。


封装:Encapsulation 隐藏对象的属性和实现细节,仅对外提供公共访问方式

好处: 将变化隔离

便于使用

提高复用性

提高安全性


封装原则:

将不需要对外提供的内容都隐藏起来;

把属性都隐藏,提供公共方法对其访问。

private:私有,权限修饰符:用于修饰类中的成员(私有仅在本类中有效,仅仅是封装的一种表现形式)


构造函数:

特点:

1,函数名和类名相同

2,不用定义返回值类型

3,不可以写return语句

作用:给对象进行初始化

注意: 1.默认构造函数的特点

2.多个构造函数是以重载的形式存在的

(对象一建立就会调用与之相对应的构造函数)


构造代码块:

作用:给对象进行初始化

(对象一建立就运行,而且优于构造函数运行)

区别: 构造代码块给所有对象进行统一初始化;

构造函数给对应的对象初始化


this:代表它所在函数所属对象的引用

this的应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象

this语句:用于构造函数之间进行相互调用。(只能放在构造函数第一行,一般函数不能调用构造函数)


二:static关键字,单例设计模式

static:用于修饰成员(成员变量和成员方法)

被修饰的成员具备以下特点:

随着类的加载而加载(存在于方法区中)

优先于对象存在

被所有对象所共享

可以直接被类名调用

使用注意:

静态方法只能访问静态对象;

静态方法中不可以写this,super关键字(主函数是静态的)

类变量:静态的成员变量


主函数的定义:

public:代表该函数访问权限是最大的

static:代表主函数随着类的加载而加载

(String[ ] args):函数的参数是字符串类型数组


静态函数:当功能内部没有访问到非静态数据时,该功能可以定义为静态的


java程序的说明书通过文档注释来完成(API帮助文档)

默认构造函数的权限和所属类一致。


静态代码块:用于给类进行初始化   

格式:static{ }

特点:随着类的加载而执行,只执行一次(优先于主函数)


设计模式:解决某一类问题最行之有效的方法

单例设计模式:解决一个类在内存中只存在一个对象

1:禁止其它程序建立该类对象(构造函数私有化)

2:本类中定义一个对象 (私有化,静态成员变量)

3:对外提供对自定义对象的访问方式 (静态方法)

方式一:恶汉式 先初始化对象

方式二:懒汉式 对象延时加载


三:继承,抽象类,接口

继承:

1.提高了代码的复用性

2.让类与类之间产生了关系,有了这个关系,才有了多态的特性

(Java只支持单继承,不支持多继承。但是Java保留了这种机制,用另一种形式来表示:多实现)

如何使用继承体系:

查阅父类功能,使用子类对象

如果父类中出现非私有的同名成员变量时,子类要访问父类的同名变量,用super


函数的重写:当子类出现和父类一模一样的函数时,子类对象调用该函数,会运行子类函数的内容

(必须保证子类权限大于等于父类,才可以覆盖。静态只能覆盖静态)

子类中的构造函数:

子类中所有构造函数默认第一行都是super();

如果要访问父类中指定的构造函数,可以通过手动定义super语句的方法来指定(super语句必须定义在子类构造函数的第一行)


final: 1:被final修饰的类不可以被继承

2:被final修饰的方法不能被复写

3:被final修饰的变量是一个常量,只能赋值一次


抽象类的特点:

1:抽象方法一定在抽象类中

2:抽象方法和抽象类必须被abstract关键字修饰

3:抽象类不可以用new创建对象,因为调用抽象方法没意义

4:抽象类中的方法要被使用,必须由子类复写所有的抽象方法后,建立子类对象调用


模板方法设计模式:

在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在调用不确定的部分。这时将不确定的功能暴露出去,由该类的子类去完成。


接口: interface{ }

接口中的成员修饰符是固定的:

成员变量: public static final

成员函数: public abstract

(接口不可以创建对象;接口可以被多实现)

特点:

接口是对外暴露的规则

接口是程序的功能扩展

接口可以用来多实现

类与接口之间是实现关系,而且类可以继承一个类的同时实现多接口

(接口与接口之间可以有继承关系)


附:在逛黑马论坛的时候有帖子提问,关于输出螺旋方阵的,自己编了小程序实现了下:

public class A4_3{
	public static void main(String[] args){
		int [][] arr = new int [5][5] ;
		setArr(arr);
		printArr(arr);
	}
	//定义一个函数来初始化数组成螺旋方阵
	static void setArr(int[][] arr)
	{
		//用x和y来记录数组的下标
		int x=0;
		int y=-1;
		int num = arr.length;
		//用count来记录每次要往数组中赋值的数
		int count = 1;
		//可以把赋值过程看成n个逆时针循环,5×5方阵则n为5
		for(int length=num;length>1;length--)
		{
			//每个循环四个步骤,下标从左到右
			while(y<length-1)
			arr[x][++y]=count++;
			//下标从上到下
			while(x<length-1)
			arr[++x][y]=count++;
			//下标从右到左
			while(y>num-length)
			arr[x][--y]=count++;
			//下标从下到上
			while(x>num-length+1)
			arr[--x][y]=count++;
		}
	}
	//打印数组函数
	static void printArr(int [][] arr)
	{
		for(int i=0;i<arr.length;i++)
		{
			for(int j=0;j<arr.length;j++)
			{
				System.out.print(arr[i][j]+"\t");
			}
			System.out.println();
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值