初学Java的一些总结_面向对象的思想

面向对象的三大特征

封装

封装概述

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

好处

隐藏实现细节,提供公共的访问方式
提高代码复用性
提高安全性

封装原则

将不需要对外提供的内容都隐藏气力啊
把属性隐藏,提供对外的公共访问方法

private关键字

是一个权限修饰符
可以修饰成员(变量和方法)
被private修饰的成员只在本类中才能访问

private最常见的应用

把成员变量用private修饰
提供对应的setXxx()/getXxx()方法

构造方法

构造方法作用概述

给对象的数据进行初始化
构造方法特点:
方法名与类名相同
没有返回值类型,连void都没有
没有具体的返回值

与普通方法一样,构造方法也可以重载,在一个类中可以定义多个构造方法,
只要每个构造方法的参数类型或参数个数不同即可。在创建对象时,
可以通过调用不同的构造方法来为不同的属性进行赋值。
补充:匿名对象:
概念:没有名字的对象!
之前的格式:
类名 对象名 = new 类名() ;
匿名对象的创建格式:
new 类名() ;

	特点:
		1)可以作为形式参数传递!
		2)匿名对象不要使用多次,使用一次即可!
			匿名对象,应用场景:
					移动端:android 大量去使用匿名对象  或者匿名内部类				
			匿名对象创建完毕,使用完毕就立即被回收(节省内存空间)

this 关键字

this:代表所在类的对象引用
为了区分局部变量隐藏的成员变量 this.成员变量
方法被哪个对象调用,this就代表哪个对象
this在成员变量被局部变量隐藏,而又需要调用成员变量时使用

static 关键字

static关键字的特点:

1)被static修饰的成员,随着类的加载而加载 (类就加载一次!)
  javac xxx.java---->xxx.class  (字节码文件)
  java xxx ---->运行---->加载类的时候,对象还没开始创建
  
2)优先于对象存在 
		对象的创建是在类加载的后面
		
3)有被共享,共用的意思
	这句话:告诉我们什么时候使用static修饰变量,方法
		能够描述被共用,共享的时候
		
		举例:
			班级号可以被共用
			饮水机:可以被共用
			
			水杯中的水(不能共用)
			
4)最重要的特点:
	被static修饰的变量以及方法可以被类名直接访问!(推荐类名直接访问)
		
	这些被static修饰变量/方法,也可以通过对象名来访问(不推荐!)
static关键字注意事项
     在静态方法中是没有this关键字的
     静态方法只能访问静态的成员变量和静态的成员方法	

静态变量与成员变量的区别

  • 所属不同
    静态变量属于类,所以也称为为类变量
    成员变量属于对象,所以也称为实例变量(对象变量)
  • 内存中位置不同
    静态变量存储于方法区的静态区
    成员变量存储于堆内存
  • 生命周期不同
    静态变量随着类的加载而加载,随着类的消失而消失
    成员变量随着对象的创建而存在,随着对象的消失而消失
  • 调用不同
    静态变量可以通过类名调用,也可以通过对象调用
    成员变量只能通过对象名调用

Java中的代码块

使用{}包起来的内容,就称为代码块!

分类:
	1)局部代码块
		在局部位置中定义的{},作用:限定变量的声明周期
	2)构造代码块
		在类的成员位置中定义{},
			特点:在当前类中,有限执行构造代码块,然后在执行构造方法...
			(每次执行构造方法之前先执行构造代码块)
			构造代码块的作用:对当前类的数据进行初始化!(很少用,笔试题!)
	3)静态代码块
	
		在{}的前面加上static
		static{
			....
		}
		
		静态代码块随着的类的加载而加载,由于类加载一次,静态代码块执行一次!

优先级:
(1)静态代码块在加载类的时候执行,由于类只在第一次使用时
被加载,且只加载一次,因此静态代码块只执行一次。在实
际开发中,经常有一些代码需要在类加载时就执行,比如加
载数据库驱动,这些代码就应该放在静态代码块中。如果包
含多个静态代码块,先定义的先执行。
(2)构造代码块在创建类的实例对象时执行,也就是说每创建类
的一个实例对象,都会执行一次构造代码块。从运行结果可
以看到,构造代码块先于构造方法执行。因此在实际开发中
可以把重载构造方法中重复的代码抽取到构造代码块中执
行。
(3)局部代码块定义在方法中,它在方法被调用的时候执行。使
用局部代码块是为了限制变量的生命周期,使得变量在使用
完毕后会被尽快回收,从而节省内存空间,前面学习的if语
句、for语句都使用了局部代码块。

   静态代码块 > 构造代码块 >构造方法

继承

继承的概念

将多个类的共性内容抽取出来放在独立的类中,让着多个类和当前类产生一种关系,extends:继承关系
通过extends关键字可以实现类与类的继承
class 子类名 extends 父类名 {}
Java中的开发原则:
低耦合,高内聚

继承的特点和继承的好处

1)Java中,对于类与类之间的只支持单继承,不支持多继承
2)但是,可以多层继承

好处:
	1)提高了代码的复用性
	2)提高了代码的维护性
	3)类和类之间的继承关系,是多态的前提条件!

继承中构造方法的访问问题,子类如何访问父类的构造方法

子类的所有构造方法,默认父类的无参构造方法;
如果父类中没有给出无参构造方法,子类构造方法报错,
1)手动给出父类无参构造方法
2)通过super(xxx):访问父类的有参构造方法
3)通过在子类的有参构造方法中通过this()访问本类的无参构造方法,
然后在通过本类的无参构造方法里面:super(xxx)访问父类的有参构造方法

继承在Java中的特点

在Java中只支持单继承,不支持多继承
Java支持多层继承

继承中的注意事项

子类继承父类,不能继承父类的私有成员(变量和方法),
被私有修饰的成员外界无妨访问,但是可以通过公共的访问方法间接访问
子类继承父类,不能够继承父类的构造方法,但是可以通过super关键字间接访问

多态

什么是多态

一个事物在不同时刻显示出的不同状态(在堆内存中变化)

多态的前提条件

1)必须存在继承关系 (继承的好处第三点)
2)要有方法重写 :
举例:动物的吃和睡的功能,只要看到具体的动物类:才能知道吃和睡的功能
3)需要存在:父类引用指向子类对象 (向上转型:使用的父类的东西,必须编译看左边!)
格式:父类名 对象名 = new 子类名() ;

多态成员的访问特点

父类名 对象名 = new 子类名() ;
1)成员变量: 编译看左,运行看左边
2)成员方法:(非静态的):编译看左边,运行看右(因为存在子类覆盖父类的方法:方法重写)
3)静态的成员方法:编译看左,运行看左
(子类出现了和父类一摸一样的静态方法,静态方法跟类相关,不存在重写!,访问方式:类名.方法名())

 4)构造方法:
由于存在继承关系,还需要分层初始化!

方法重写:指的是非静态方法!

多态的好处

1)提高了代码的扩展性(由多态)
2)提高了代码的复用性,维护性(由继承关系保证)
如果没有明确要求使用多态方式进行测试
使用具体类名 对象名 =new 具体类名() ;

多态的弊端

不能够访问子类的特有功能!
如何解决呢?
方式1:可以创建子类具体类对象 :子类名 对象名 = new 子类名() ;
对象名.访问子类的自己的功能;
但是,不好,从内存角度考虑,在堆内存中产生一个内存空间(比较消耗内存空间!)
方式2:
多态的第三个条件:父类引用指向子类对象 (向上转型)
Fu f = new Zi() ;
想办法:将父类的引用强制转换为子类的引用(向下转型)
Zi z = (Zi)f;
好处:不需要重新new对象,在堆内存是比较节省内存空间的!

前提条件:要使用向下转型,必须先使用向上转型!  

多态的向下转型使用不当,程序出现异常:
注意事项:
产生一个ClassCastException:运行时期异常(RuntimeException)的一种使用向下转型的时候类型
不匹配导致的!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值