黑马日记第三篇——面向对象(上)

----------------------android培训 、java培训 期待与您交流!----------------------
一、面向对象思想

    让复杂的问题简单化,让角色发生转变,从执行者变为指挥者。
    面向对象的三个特征:封装、继承、多态。
    类与对象:类是对现实生活中事物的描述(图纸);对象就是这类事物实实在在存在的个体。映射到Java中:类是class定义的东西,对象就是java在堆内存中用new建立的实体。

二、成员变量与局部变量

1、成员变量作用于整个类中;局部变量作用于函数中或语句中;
2、在内存中:成员变量存在于堆内存,因对象的存在而存在;局部变量存在于栈内存;

三、private

private:私有,权限修饰符;用于修饰类中的成员(成员变量,成员函数)。私有只在本类中有效,类以外即使建立了对象也不能直接访问。
注意:私有仅仅是封装的一种表现形式。

四、构造函数与构造代码块

1、构造函数:
构造函数的作用:对象一建立就会调用与之对应的构造函数。可以给对象进行初始化。且构造函数只运行一次。

构造函数小细节:当一个类中没有定义构造函数时,系统会默认给该类加入一个空参数的构造函数。当在类中自定义了构造函数后,默认的构造函数就没有了。

构造函数和一般函数不仅在写法上不同,在运行上也有不同:
构造函数是在对象一建立就运行,给对象初始化。而一般方法是对象调用才执行,给是对象添加对象具备的功能,一般方法可以被调用多次。

什么时候定义构造函数呢?
当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中。

2、构造代码块:
构造代码块作用:给对象进行初始化,对象一建立就运行,而且优先于构造函数执行。
构造代码块与构造函数的区别:构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化。构造代码块中定义的是不同对象共性的初始化内容。

五、this

this代表它所在函数所属对象的引用。简单地说:哪个对象在调用this所在的函数,thies就代表哪个对象。
this的应用:当定义类中的功能时,该函数内部要用到调用该函数的对象时,这是用this来表示该函数的对象。但凡本类功能内部使用到了本类对象都用this表示。
this的其他知识:this也可以用于构造函数之间互相调用。构造函数间调用只能用this语句,且this只能定义在构造函数的第一行,因为初始化要先执行。不能与super并存。

六、静态

静态关键字:static
关键字用法:修饰符,用于修饰成员(成员变量,成员函数)。
当成员被静态修饰后,就多了一种调用方式,除了可以被对象调用外,还可以直接被类名调用(类名.静态成员)。
static特点:
1,随着类的加载而加载。即:静态会随着类的消失而消失,说明它的生命周期最长。
2,静态先于对象而存在。
3,被所有对象所共享。
4,可以直接被类名所调用。
实例变量和类变量区别:
1,存放位置:类变量随着类的加载而存在于方法区中;实例变量随着对象的建立而存在于对内存中。
2,生命周期:类变量生命周期最长,随着类的消失而消失;实例变量生命周期随着对象的消失而消失。

静态的使用注意事项:
1,静态方法只能访问静态成员。非静态方法既可以访问静态也可以访问非静态。
2,静态方法中不可以定义this,super关键字。因为静态优先于对象存在,所以静态方法中不可以出现this。
3,主函数是静态的。
静态有利有弊:
利:对对象的共享数据进行单独空间的存储,节省空间。没有必要每一个对象中都存储一份。可以直接被类名调用。
弊:生命周期过长。访问出现局限性。(静态虽好,只能访问静态。)
静态代码块:
格式:
static
{
静态代码块中的执行语句。
}
特点:随着类的加载而执行,只执行一次。并优先于主函数。
用于给类进行初始化的。
什么时候使用静态?
要从两方面下手,因为要修饰的内容有成员变量和函数。
1、什么时候定义静态变量(类变量)呢?
当对象中出现共享数据时,该数据被静态所修饰,对象中的特有数据要定义成非静态存在于堆内存中。
2、什么时候定义静态函数呢?
当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态的。
静态其他知识:
主函数:是一个特殊的函数。作为程序的入口,可以被jvm调用。
主函数的定义:
public:代表着该函数的访问权限是最大的。
static:代表着主函数随着类的加载就已经存在了。
void:对主函数没有具体的返回值。
main:不是关键字,但是是一个特殊的单词,可以被jvm识别。
函数的参数:(String[] arr):函数的参数,参数的类型是一个数组,该数组中的元素是字符串,字符串类型的数组。
主函数是固定格式的:jvm识别;jvm在调用主函数时,传入的是new String[0];

七、设计模式(GOS)

解决某一类问题行之有效的方法,共有23种
模板方法设计模式:就是在定义功能时,功能的一部分是确定的,一部分是不确定的,而确定的部分在使用不确定的部分。那么这时就将不确定的部分暴露出去,由该类的子类去完成。
单例设计模式:解决一个类在内存中只需存在一个对象。
单例设计模式共分为三部:
1,将构造函数私有化;
2,在本类中创建一个本类对象;
3,提供一个可以获取到该对象的方法。
有两种设计思路:
1、饿汉式:
private Single(){};
private final static Single s=new Single();
public static Single getInstance()//返回实例,只有get,没有set,因为只有一个对象。
{
return s;
}
在建立对象时就初始化了本类对象。
2、懒汉式:
private static Single s=null;
private Single(){}
public static Single getInstance()
{
if(s==null)
s=new Single();
return s;
}
在建立对象之后才初始化本类对象。
在针对单例设计模式时,建议使用饿汉式。因为懒汉式也叫对象的延时加载,涉及线程问题时易发生安全问题。

八、继承

继承提高了代码的复用性;使类与类之间产生了联系,从而产生多态的特性。
Java语言中只支持类的单继承,不支持多继承,但保留了多继承机制,以多实现的方式来体现。
子父类出现后类成员的特点:
1、变量:如果子父类中出现了非私有的同名成员变量时,子类访问自己的变量用this标识,子类访问父类的变量用super标识。
2、函数:当子父类出现了相同函数时,父类函数会被隐藏(重写),子类对象会运行子类中的函数;当子父类中出现相同函数名函数时,子类会继承父类函数,并同时拥有自己的函数,相当于重载。
3、构造函数:在子类的对象进行初始化时,父类的构造函数也会运行,因为子类的构造函数默认第一行有一条隐式的语句,super();且子类中所有的构造函数第一行默认都是super();如果要访问父类中指定的构造函数,需通过手动定义super的方式来指定。

九、final

修饰符:可以修饰类、变量、函数。
1、被final修饰的类:不可以被继承。
2、被final修饰的方法:不可以被复写。
3、被final修饰的变量:是一个常量,只能赋值一次。既可以修饰成员变量,也可以修饰局部变量。
4、内部类只能访问局部中的final形式变量。

十、抽象类

关键字:abstract
抽象类特点:
1、抽象方法一定定义在抽象类中;
2、抽象类和抽象方法必须被abstract修饰;
3、不可以被new创建对象;
4、抽象类中抽象方法被调用时,必须由子类复写其所有的抽象方法后建立子类对象调用,如果子类只覆盖了部分抽象方法,那么子类也是抽象的。
注:抽象类中可以不定义抽象方法,这么做的意义只是让该类不能建立对象。

十一、接口

接口的方法都是抽象的。
接口格式的特点:
1、接口中常见的定义:常量、抽象方法;
2、接口中成员都有固定的修饰符:常量:public static final;方法:public abstract;
接口的特点:
1、接口是对外暴露的规则;
2、接口是程序的功能扩展;
3、接口可以被类多实现;
4、类可以在继承父类的同时实现一个或多个接口;
5、接口之间是继承关系,并且支持多继承。
注:基本功能定义于类中,扩展功能定义于接口中。
----------------------android培训 、java培训 期待与您交流!----------------------

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值