Java 之旅

面向对象的构造方法

today:2019年8月12日
构造方法
1、构造方法
定义:类实例化对象时运行的一种特殊的方法。
2、为什么需要构造方法:
一般情况下,构造方法合适为对象的属性赋初值。
3、如何编写构造方法?
格式:
public <类名>(){
//方法体
}
1.构造方法不写返回值类型;
2.构造方法的方法名必须和类名一致;
3.构造方法不能使用对象调用。
只在实例化对象时运行
new <类名>(参数列表);//调用构造方法
4、构造方法注意事项:
4.1)如果一个类中没有编写构造方法,那么系统会自动为这个类生成一个无参构造;
4.2)如果类中编写了构造方法,那么系统不会再生成无参构造了;
4.3)构造方法可以重载。

成员变量和局部变量

成员变量和局部变量
1)类中定义的变量(属性)就是成员变量;
2)方法中定义的变量,或形式参数就是局部变量。
区别:
1).作用域不同
成员变量可以在当前类的任何方法中使用
局部变量只能在声明他的方法中使用(形参是局部变量)。
2)初始值不同
成员变量有初始默认值;
局部变量没有初始默认。
3) 优先级不同成员变量和局部变量同时命名时局部变量具有更高的优先级,如果要访问成员变量,则使用this关键字。

this关键字

this关键字
是对象在方法中对自身的引用
用法:
this.<属性>;
this.<方法>();
this();
调用当前类的构造,必须编写在构造方法中,必须编写在方法中的第一行。
方法自己调用自己或者互相循环调用称之为“递归”。

引用数据类型

引用数据类型
1)引用数据类型的特征(String,自造类,数组)
变量保存的是这个对象的引用
在方法中,变量的引用保存在栈中,对象保存在堆中;比如:
Dog dog1=new Dog(“旺财”,3.17.3,"金毛犬’);
Dog dog2=dog1;
dog2.name=“亏财”;
System.out.println(dog1.name);
//输出 亏财

对于null、true 、false都是常量
关于null和null指针异常
null是个常量,表示当前引用 没有引用任何对象 当这样的null调用属性或方法时,会出现null指针异常。

继承

today 2019年8月13日
1)什么是继承?
继承是面向对象编程中,一种代码复用的方式。
2)为什么需要继承?
减少代码冗余,提高程序的可维护性和可扩展性。
3)怎样使用继承?
class<A类名>extends<B类名>{
}
类名A继承了类名B;
类名A中可以使用类名B中的属性和方法;
类名A中称之为子类(派生类);
类名B中称之为父类(超类,基类);
4)继承的特性:
4.1)子类类中可以调用父类的成员和方法;
4.2)子类对象打**.**可以调用父类成员和方法;
4.3)子类继承父类应该符合is-a法则;
4.4)构造方法无法被继承。
5)继承的单根性
一个类只能继承一个父类,父类可以被多个子类所继承。
6)继承的传递性
子类可以调用到祖先类的成员。
7)实例化子类对象,先运行父类构造。
继承关系下,构造方法的执行:
7.1)子类对象中实际上包括着一个父类对象的引用;
7.2)子类构造中,可以选择调用父类的构造方法;
7.3)如果子类构造方法中不指定调用父类的哪个构造方法,那么默认调用父类的无参构造。

super关键字

8.1)super是对象在方法中对父类对象的引用;
8.2)super.<属性>;super.<方法>();super 调用父类的属性和方法主要用于需要区分同名成员。
**super()?*调用父类无参构造必须编写在构造方法中第一行。

Object类:

所有类型的对象都可以调用到Object类中的方法,
编写的类,如果没有继承任何类,默认继承Object。

static

1)修饰属性
这个属性成为静态属性,类属性
这个属性保存在方法区中
所有对象共享同一个值
能节省内存消耗
官方建议使用类名调用静态属性
2)修饰方法
2.1)使用static修饰方法 该方法称之为静态方法,类方法
2.2)静态方法可以直接使用类名调用 无需实例化对象
2.3)静态方法中无法调用 普通(实例)属性和方法
2.4)如果一个方法不需要访问当前类中的实例成员 就可以定义静态的
2.5)静态方法不能被重写
3)修饰初始化块
3.1)什么是初始化块
在代码中直接编写{}
{}中的内容就是初始化块
初始化块中的内容
会在构造方法运行前运行
3.2)被static 修饰的初始化块 只会运行一次
3.3)运行时机是JVM使用这个类之前
JVM加载类时运行静态块
加载类的情况
1.实例化对象
2.使用类名调用静态成员
3.反射相关技术

常量

1)怎么定义一个常量
public static final int NUM=200;
2)使用类名调用不能修改
在编译时将调用代码替换成常量值
3)推荐在声明的同时赋值
也可以在静态块中赋值
但是就没有编译时替换值的效果了

抽象类

1)什么是抽象类
不存在对象的类,一般用于父类
2)抽象类特征
2.1)不能实例化
2.2)能编写抽象方法
2.3)抽象方法的数量不限

抽象方法

1)什么是抽象方法
没有方法体的方法
2)抽象方法特征
2.1)没有方法体
2.2)子类必须重写父类中的抽象方法
除非子类也是抽象类
2.3)抽象方法必须在抽象类中

内部类

1)什么是内部类
一个类的内部定义的另一个类
我们将外部的类称为outer
将内部的类称为inner
2)内部类的种类
在java中
有很多不同形式的内部类
我们讲解的主要是
成员内部类 和 匿名内部类

成员内部类

1)什么是成员内部类
在类中的成员位置
声明\定义的类结构
2)成员内部类的特性
2.1)内部类可以访问外部类的私有成员
2.2)当内部类和外部类有同名成员时
内部类中可以使用
<外部类名>.this.<成员>
来访问
2.3)通常情况下
内部类只会在外部类中使用
实例化内部类对象
可以访问内部类的私有成员
2.4)如果非要在其他类中
实例化内部类对象的话
Outer.Inner inn=
new Outer().new Inner();

匿名内部类

1)什么是匿名内部类
通常情况下
在方法中
通过继承一个类或实现一个接口
类创建的没有名称的内部类
2)匿名内部类的特性
2.1)可以使用外部类的私有成员
2.2)内部类和外部类的成员同名时
使用<外部类名>.this.<成员>
来指定外部类的成员
2.3)匿名内部类创建的对象
相当于这个类的子类对象
一般在方法中使用
2.4)如果这个类的对象只在
某一个方法中使用一次的话
可以使用匿名内部类
减少项目中java文件的数量
2.5)匿名内部类可以使用
其所在方法的局部变量
但是要将其视为被final修饰的
JDK1.6之前:
匿名内部类中使用的方法中的
局部变量必须使用final修饰

接口

1)什么是接口?
接口是一种特殊的抽象类
接口和类分级,也是一个数据类型
2)为什么需要接口?
2.1)使JAVA可以间接的实现多继承
2.2)接口约束了实现类中的方法,从而提高程序的扩展性
2.3)方便程序的设计者搭建程序框架
3)如何编写一个接口
在一个java文件中 将类的class 关键字替换interface
4)接口的特性
4.1)接口中的属性都是 public static final修饰的
4.2)接口中的方法都是 public abstract 修饰的
4.3)接口不能实例化
4.4)接口不能有构造方法
5)接口的实现
5.1)我们将实现接口的类称为实现类
5.2)语法
class <类名>implements<接口名>{
}
5.3)这个实现类要实现接口中的所有方法,除非这个类不是抽象类
5.4)如果一个实现类实现多个接口,那么接口用","分隔
5.5)如果这个类既要继承父类,又要实现接口
先写extends 后写implemens
父类是个类型
接口是个能力
子类继承父类符合is-a关系
实现类实现接口应该符合has-a关系
6)接口的注意事项
6.1)使用向上造型 可以将对象赋给接口类型,但是接口类型只能调到接口声明的方法
6.2)接口也可以继承接口,使用extends关键字多个接口用“,”分隔,实现类实现所有父类接口的内容
抽象类和接口的异同:
1)相同点:
不能实例化,都能编写抽象方法
2)不同点(站在接口的角度)
1.不能编写构造方法
2.不能编写实例成员
3.能多继承接口
4.所有属性都是常量,所有方法都抽象
3)如果声明的是一种抽象的能力 使用接口‘
如果声明的是没有对象的类型 使用抽象类

多态

1)什么是多态?
不同子类对象 对同一父类的不同子类对象 对同一方法调用,产生的不同行为
2)为什么使用多态
减少代码冗余,增强程序的可维护性和可扩展性
3)怎么使用多态?
3.1)定义父类
3.2)定义子类继承父类
3.3)子类重写父类方法
3.4)子类对象赋给父类引用
3.5)使用父类引用调用子类重写后的方法

强制类型转换

1)什么是类型转换
就是将一个类型的引用 转换成另一个类型
2)为什么需要类型转换
父类引用无法调用到子类特有的成员
如果必须要调用,就需要就行强制类型转换
3)怎么类型转换?
(<类型>)<引用>
4)强制类型转换的注意事项
如果将一个A子类的引用强制转成B子类,会发生类型转换异常

)## instanceof关键字
1)什么是instanceof(属于)?
判断一个对象是否属于一个类型
2)为什么需要instanceof?
为了防止类型转换异常
3)格式
<对象>instanceof<类型>
运算结果是一个boolean值

Authors
E
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值