java基础语法(2)

(1)面向对象思想:
Java的一个基本核心是理解面向对象思想:万物皆对象。
面向对象是一种解决问题的思路。。按照这种思路,我们关心的是有什么东西能帮助我们解决问题,然后找到这个东西,使用这个东西的功能来解决问题。
用面向对象思想写程序时,我们首先要进行需求分析,搞清楚要做什么事情,然后就要找具有能够实现我们需求,最后创建对象,调用函数,实现需求。

(2)类:
类是对象的抽象,对象是类的实例化。

对象在内存中的位置:对象由new关键字创建,如同数组,实体存在于堆内存中。对象的引用变量是一个普通变量。存储的值是该对象堆内存中的地址。

(3)this关键字
哪个对象调用这个函数,函数中的this就指向那个对象;一般用来区分成员变量和局部变量。
在这里插入图片描述

一个构造函数中调用本类的其它构造函数(注意:使用this关键字调用其它构造函数时,必须放在构造函数的第一行)在这里插入图片描述

(4)匿名对象
创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量。
在这里插入图片描述

匿名对象特点:
1、匿名对象必须创建的时候就直接使用;
2、匿名对象只能使用一次;
3、匿名对象可以作为方法的返回值或者给方法传参;

(5)继承
Java 中,类的继承是指在一个现有类的基础上去构建一个新的类.构建出来的新类被称作子类,现有类被称作父类.子类 无条件 拥有父类全部可继承的属性和方法.

Java 中.类只支持单继承。

注意点 :
(1)继承是类在继承,而不是对象在继承.
(2)什么时候需要使用继承 ? (is a 关系)
(3)不要为了继承而继承.
(4)只要有一个成员或方法不是所有子类都拥有的,那么这个成员属性和方法就不应该定义在父类之中.
(5)子类不能直接访问父类中私有的成员变量。
(6)子类一定不要拥有和父类同名的成员变量.

在这里插入图片描述

(6)重写父类方法 (override)
在继承关系中,子类会自动继承父类中定义的方法,但有时在子类中需要对继承的方法进行一些修改.即对父类的方法进行重写.
子类中重写的方法需要和父类被重写的方法具有相同的方法名,参数列表以及返回值类型.

(7)super 关键字
当子类重写父类的方法后,子类对象将无法访问父类被重写的方法.Java中专门提供了一个suepr关键字用于访问父类的成员. 例如访问父类的成员变量,成员方法和构造方法.

子父类中构造方法的特点:
子类的每个构造方法中均有默认的super(),调用父类的空参构造,如果手动调用父类构造会覆盖默认的super()。

super(参数列表):调用父类构造方法初始化。

(8)抽象类

ava允许在定义方法时不写方法体,不包含方法体的方法称为抽象方法.抽象方法必须使用 abstract 关键字来修饰.

抽象类的特点:
1、抽象类一定是父类吗?是的,因为抽象类是不断向上抽取而来的. 一定是父类,但不一定是顶层父类。
2、抽象类可以继承其他类吗?抽象类还是一个类,因此它必须具备类的继承特点。它可以有父类。
3、由于抽象类不能实例化对象,那么请问抽象类是否有构造方法 ?
有构造方法。但是这个类不能创建对象。因为抽象类一定有子类,而创建子类对象的时候,在子类的构造方法中有super语句会找自己父类的构造方法进行初始化动作。所以抽象类的构造方法是用来给子类进行初始化的.
4、抽象类中可以没有抽象方法吗?
可以。它的存在意义就是不让外界创建当前这个类的对象。
5、抽象关键字不能和哪些关键字共存?
private :父类中私有的成员变量和方法子类是不知道的,因此使用private 和abstract关键字一起修饰方法,导致子类根本无法知道父类中有这个抽象方法,从而子类无法实现重写。

(9)接口
如果一个抽象类中所有的方法都是抽象的,则可以将这个类用另外一种方式来定义, 即接口.
实现接口:由于接口中的方法都是抽象方法,因此不能通过实例化对象的方式来调用接口中的方法.此时需要定义一个类,并使用 implements 关键字实现接口中所有的方法.

类, 接口 之间产生关系:
1.类和类之间的关系是继承,使用extends关键字完成
2.类和接口之间的关系是实现,使用的 implements 关键字完成

接口与多态 : 接口类型可以接收任何实现了该接口的实现类对象. (多态)

类和类:继承关系,一个类只能继承一个父类。 单继承
类和接口:实现关系,一个类可以实现多个接口。 多实现
接口和接口:继承关系,一个接口可以继承多个接口。 多继承

总结 :
抽象类依然是属于类继承体系中的一员。而接口则是类继承体系之外的事物描述.也可称为事物的扩展功能。
抽象类 : 表示一类事物的共性属性和行为. Is a
接口 : 对事物的行为进行功能的扩展. Like a

(10)多态
多态三要素:继承、重写和向上转型。
多态的使用场景 :
1.如果方法的参数是一个父类类型的, 我们传递一个子类对象, 当然是可以的, 因为子类就是一个父类.这样的设计简化了程序的编写.
2.程序中如果创建了一个子类对象, 我们可以使用父类的引用进行接收, 程序编译不受影响. 提高了代码的灵活性.
多态的弊端:不能调用子类中的成员变量和特有方法。

在多态中的类型转换问题 :
1.隐式的类型提升.只要有多态就会发生类型提升. (向上转型) Person p = new Doctor();
2.强制类型转换. 将父类类型转成子类类型. (向下转型) Doctor d = (Doctor)p;

向下转型的风险:
向下转型有风险,使用需谨慎. 在Java中要使用向下转型,必须先做类型的判断,然后再转型.Java中的类型判断,需要使用关键字 instanceof.
一定要判断,防止类型转换异常的发生. 如果程序发生 classCastException, 一定是将不是这种类型的对象转成了该类型对象,发生类型转换异常.

(11)static关键字
如果在设计方法中,该方法中无需访问成员属性(成员变量)时,那么此时该方法就可以设计为 静态方法.
在这里插入图片描述
static修饰成员变量:
我们希望某些特定的数据在内存中只有一份,而且能够被一个类的所有实例对象所共享.可以使用 static 关键字来修饰成员变量,该变量被称作静态变量.
在这里插入图片描述

静态方法与非静态方法的使用注意事项:
区别1 : 调用格式
静态方法 。格式: 类名.方法名();
非静态的方法。 格式: 对象名.方法名();
区别2: 时间 (类先于对象被加载, 先有类,才有对象)
静态方法它是在类加载时,就在方法区的静态区中完成了加载,使用类名就可以直接调用运行的方法。非静态方法,它的运行必须是在类加载完成之后,通过new关键字在堆区中创建出对象,通过对象名才能调用。
区别3: 静态关键字是一个修饰符。可以修饰类中的对象方法和成员属性。不能修饰构造方法。因为构造方法就是用来初始化对象的.
区别4:静态方法中不能调用非静态方法,因为静态方法中没有 this, 无法确定是具体哪一个对象调用.
非静态方法中是可以调用静态方法的。因为 静态方法 可以直接使用类名调用, 无需确定具体哪个对象, 能够被该类所共享.
区别5: 静态方法中不能使用this 和 super关键字。
说明 : 无论是 非静态区 中的方法还是 静态区 中的方法, 如果想要被执行,那么都是要经过入栈和出栈的过程.

静态代码块:静态代码块是定义在成员位置,使用static修饰的代码块。
随着类的加载而执行,而且只执行一次。
特点:
1.它优先于主方法执行、优先于构造代码块执行,当以任意形式第一次使用到该类时执行。
2.该类不管创建多少对象,静态代码块只执行一次。
3.可用于给静态变量赋值,用来给类进行初始化。

(12)final 关键字
继承的弊端 : 打破了封装性.不让子类重写该类的此声明,怎么能实现呢? 通过 Java中的一个关键字来实现. final(最终化).

特点 :
1.final 修饰的类不能被继承.即不能有子类.
2.final 修饰的方法不能被子类重写.老老实实继承,不允许做任何篡改.
3.final 修饰的变量(成员变量和局部变量)是常量,由于常量在运行期间不允许再发生改变,所以常量在声明时没有默认值,这就要求程序在声明常量时必须指定该常量的值.
总结:不可继承、不可重写、不可更改

  1. final 关键字修饰方法 (该方法将不可以被子类重写)
  2. final 关键字修饰类 (该类将不可以被继承,也就是不能够派生子类)
  3. inal修饰的变量一旦被赋值,其值不能再次更改

(13)包 package
Java中的包,其实就是我们电脑系统中的文件夹,包里存放的是程序生成的.class文件。当.class文件很多的时候,通常我们会采用多个包进行存放管理他们,这种方式称为分包管理。

(14)权限修饰符
在这里插入图片描述

(15)内部类 Inner Class
在Java中,允许一个类的内部定义类,这样的类称作内部类,这个内部类所在的类称作外部类.
内部类特点如下 :
1.在成员内部类中可以访问外部类的所有成员.
2.成员内部类中的方法也可以调用外部类的方法.
3.成员内部类中不可以声明静态变量,静态方法.因为成员变量是属于对象的,静态与对象无关.
4.外部类中可以用内部类声明成员属性,作为外部类的成员.也可以在方法中创建内部类对象,调用内部类的方法.

静态内部类:
static关键字来修饰一个成员内部类,该内部类被称作静态内部类,它可以在不创建外部类对象的情况下被实例化.
静态内部类具备如下特点 :
1.在静态内部类中只能访问外部类的静态成员.
2.在静态内部类中可以定义静态成员和非静态成员,而在成员内部类中不允许定义静态的成员.

匿名内部类:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值