【无标题】

课前预习:Java基础(面向对象三大特性)+配环境

提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

用于课前预习,所涉及知识点来源于网络。


一、Java语言的特点

▲ 一种面向对象的语言
▲ 一种平台无关的语言,提供程序运行的解释环境
▲ 一种健壮的语言,吸收了C/C++语言的优点,但去掉了其影响程序健壮性 的部分(如:指针、内存的申请与释放等)


二、Java程序运行机制及运行过程

1、Java两种核心机制

▲ Java虚拟机(Java Virtual Machine)
▲ 垃圾收集机制(Garbage collection)


2、Java虚拟机

▲ Java虚拟机可以理解成一个以字节码为机器指令的CPU
▲ 对于不同的运行平台,有不同的虚拟机
▲ Java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,随处运行”


3、垃圾收集机制

▲ 不再使用的内存空间应回收——垃圾收集
▲ 在C/C++等语言中,由程序员负责回收无用内存
▲ Java语言消除了程序员回收无用内存空间的责任;它提供一种系统级线程跟踪存储空间的分配情况。并在JVM的空闲时,检查并释放那些可被释放的存储器空间
▲ 垃圾收集在Java程序运行过程中自动进行,程序员无法精确控制和干预


三、Java开发环境的下载 安装 配置

▲ 配置Java开发环境步骤
▲ 下载并安装最新版本的J2SDK
▲ 配置环境变量
⚪开发Java程序,需要使用JDK提供的开发工具,而这些工具在JDK的安装目录的bin目录下。
⚪为了在开发Java程序的时候,能够方便的使用javac和java这些命令,我们需要配置Path环境变量。
⚪path:Windows系统执行命令时要搜寻的路径
⚪classpath:java在编译和运行时要找的class所在的路径
▲ 选择合适的文本编辑器或使用集成开发环境
▲ 验证
⚪java运行java程序
⚪javac编译java程序


四、面向对象三大特性

1、封装

什么是封装
把客观事物封装成抽象的类,并且把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。也 就 是 说抽象数据类型对数据信息以及对数据的操作进行打包,将其变成一个不可分割 的实体,在这个实体内部,我们对数据进行隐藏和保密,只留下一些接口供外部调用。
为什么要封装
⚪隐藏一个类中不需要对外提供的实现细节;
⚪属性的封装:使用者只能通过事先定制好的方法来访问数据,可以方便地加入逻辑控制,限制对属性的 不合理操作;
⚪方法的封装:使用者按照既定的方式调用方法,不必关心方法的内部实现,便于使用; 便于修改,增强 代码的可维护性;
封装的优点
⚪减少重复代码;
⚪提高安全性(隐藏内部实现);
⚪解耦(降低了耦合);

2、继承

什么是继承

⚪继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
⚪在一组相同或类似的对象中,抽取出共性的特征(属性)和行为(方法),实现重用性。
⚪继承的类叫做子类(派生类或者超类),被继承的类叫做父类(或者基类)。比如,从猫类、狗类、虎类中可以抽象出一个动物类,具有和猫、狗、虎类的共同特性(吃、跑、叫等)。

如何实现继承

Java通过extends关键字来实现继承,父类中通过private定义的变量和方法不会被继承,不能在子类中直接操作父类通过private定义的变量以及方法。
例如:

继承的优点

⚪继承避免了对一般类和特殊类之间共同特征进行的重复描述。
⚪通过继承可以清晰地表达每一项共同特征所适应的概念范围——在一般类中定义的属性和操作适应于这个类本身以及它以下的每一层特殊类的全部对象。
⚪运用继承原则使得系统模型比较简练也比较清晰。

3、多态

什么是多态

所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。

因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。

多态生成的条件

⚪继承
⚪重写
⚪父类的引用指向子类对象

多态的优点

父类的引用指向子类的对象(降低代码量)。

多态的理解

多态是在继承的基础上形成的,多态是指不同的子类在继承父类后分别都重写覆盖了父类的方法,即父类同一个方法,在继承的子类中表现出不同的形式。

下面通过一段代码来理解多态。

public class TestDuoTai {
public static void main(String[] args){
Father c = new Child();//这句话就是父类的引用指向子类的对象
c.eat();//孩子在吃橘子
System.out.println(“年龄:”+c.age);//年龄:40
//c.play(); 不能通过编译
Child cc = (Child) c;//必须强转才能调用play方法
cc.play();//孩子打篮球
}
}

class Father {
protected int age;
public Father(){
age = 40;
}
void eat(){
System.out.println(“父亲在吃苹果。”);
}
}
class Child extends Father{
protected int age;
public Child(){
age = 18;
}
void eat(){
System.out.println(“孩子在吃橘子。”);
}
void play(){
System.out.println(“孩子在打篮球。”);
}
}

⚪分析:
Father c = new Child(); 这句话就是父类的引用指向子类的对象。
父类的引用指向子类的对象<===>即声明的是父类,实际指向的是子类的一个对象。

⚪结论:
Father c = new Child() 在c的眼里只能看到 child 里面的 father 属性。
当满Java多态的三个条件时,可以发现c.eat()调用的实际上是子类的eat(是因为子类重写覆盖了父类方法),但c.age调用的还是父类的age(属性/变量不存在重写和覆盖)。
而c.play()则不会通过编译,需要通过强制类型转换 Child cc = (Child) c;调用Child类中的cc.play();方法。

五、总结

面向对象的三个特性为:封装、继承和多态。其中多态的理解较为复杂,需要更深一步的了解与学习。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值