Java语法+面向对象三大特性

Java基础语法

  • 对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
  • :类是一个模板,它描述一类对象的行为和状态。(个人理解C语言中结构体)
  • 方法:方法就是行为,一个类可以有很多方法。逻辑运算、数据修改以及所有动作都是在方法中完成的。(个人理解C语言中函数)
  • 实例变量:每个对象都有独特的实例变量,对象的状态由这些实例变量的值决定。

1.输入输出

在Java中输出可以:

其中:

  • System 是一个类

  • out 是一个public static字段:它接受输出数据。

三者区别:

  • print() - 它在引号内打印字符串。

  • println() - 它在引号内打印字符串,类似于print()方法。然后光标移动到下一行的开头。

  • printf() - Tt提供字符串格式化(类似于C / C ++编程中的printf)。

输入

Java Scanner 类 

java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入。

下面是创建 Scanner 对象的基本语法:

示例:从用户获取整数输入

解释:

为了使用的对象Scanner,我们需要导入java.util.Scanner包。

然后,我们需要创建Scanner类对象。我们可以使用该对象从用户那里获取输入。

在上面的示例中,我们创建了一个名为Scanner类的spring对象。 然后,我们调用Scanner类的nextInt()方法以从用户获取整数输入。

同样,我们可以使用nextLong(),nextFloat(),nextDouble()和next()方法来分别从用户获取long,float,double和string输入。

2.数组

数组是相似类型数据的集合。它是一个容器,用于保存单一类型的数据(值)。

声明数组:

上面的语法语句做了两件事:

  • 一、使用 int[5] 创建了一个数组。
  • 二、把新创建的数组的引用赋值给变量 age。

二维数组声明

引用传递
概念:多个栈空间同时指向同一块堆内存


赋值语句从右向左执行,因此首先执行new int[] {1,2,3},则在堆上开辟12个字节的空间,每四个分别用来存放arr[0],arr[1],arr[2],并对它们进行初始化。然后在栈上为局部变量arr分配空间,并将堆空间的地址(首地址)存到栈空间的arr里面,此时栈上的arr的值就是堆上的数组空间的地址,因此二者建立了一定联系,这里用指向来表示。
再接着在栈上定义了一个局部变量x,并把arr的值赋给x,因此x里面也存的是堆空间的首地址,此时x也指向那块堆空间,利用x也可对堆空间的值进行操作,这便称为引用传递。本质:多个栈空间同时指向同一块堆内存。没有栈内存指向的堆内存也被称为垃圾空间。

注:在C语言里面曾经学过,在函数内部修改其它函数局部变量的值可以通过该变量的地址或者返回值的方式。因此我们可以利用引用传递来修改堆空间的值。
————————————————

以上引用传递内容来源:java数组的定义和使用_java定义一个数组-CSDN博客


 数组常用操作
Java中提供了很多对数组操作的方法可以方便得实现对数组的各种操作。
1.数组长度: 数组名.length
2.数组排序: java.util.Arrays.sort(数组名) 升序
3.数组扩容:java.util.Arrays.(数组名称,新数组长度)
(这个很像C语言中的realloc函数)。
4.在数组中查找指定元素:Arrays.binarySearch(数组,指定元素)。
(看名字像是二分查找实现的)。
5.数组拷贝:System.arraycopy(源数组名称,源数组开始点,目标数组 名称,目标数组开始点,拷贝长度)。

3.循环

Java中有三种主要的循环结构:

  • while 循环
  • do…while 循环
  • for 循环

在以上语法中,括号内的测试表达式(testExpression)为布尔表达式。如果测试表达式(testExpression)的计算结果为true.

while循环内的语句将被执行。

然后,再次评估测试表达式(testExpression)。

这个过程一直进行到测试表达式被评估为false为止。如果测试表达式的计算结果为false,

则while循环被终止。

do...while循环主体执行一次(在检查测试表达式之前)。只有这样,测试表达式才会被检查。

如果测试表达式被计算为true,则执行循环体中的代码,并再次计算测试表达式。这个过程一直进行下去,直到测试表达式被计算为false为止。

当测试表达式为时false,do..while循环终止。

for循环的工作

  1. 初始化(initialization)表达式只执行一次。

  2. 然后,评估测试表达式(testExpression)。在这里,测试表达式(testExpression)是一个布尔表达式。

  3. 如果测试表达式(testExpression)的计算结果为true,则执行for循环体内的代码。

  4. 然后执行更新表达式(update)。

  5. 再次,评估测试表达式(initialization)。

  6. 如果测试表达式为true,则执行for循环体内的代码,并继续执行更新表达式(update)。

  7. 这个过程一直进行到测试表达式(testExpression)被评估为false时为止。

  8. 如果测试表达式(testExpression)的计算结果为false,则for循环终止。

for循环和for-each循环之间的区别

为什么在处理数组时优先使用for-each循环,而不是for循环,我们来看下面的示例。

我们可以看到两个程序的输出是相同的。

当我们仔细分析这两个程序时,我们可以注意到for-each循环更易于编写,并使我们的代码更具可读性。这就是它被称为增强for循环的原因。

面向对象

1.封装

在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。

封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。

要访问该类的代码和数据,必须通过严格的接口控制。

封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。

适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。

简介:所谓的封装就是把类的属性和方法使用private修饰,不允许类的调用者直接访问,我们定义如下一个类,可以看到所有的成员变量和成员方法都使用private修饰了。

又如:

在上面的实例中,我们有一个private字段age。因为它是私有的,所以不能从类外部访问它。为了访问age,我们使用了公共方法getAge()和setAge()。这些方法称为getter和setter方法。

如果尝试从Main类中访问age字段,则会出现错误消息。

2.继承

继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

简介:所谓继承本质就是实现代码的复用,防止重复的代码多次书写,当一个类继承一个类的时候,该类中就会拥有另外一个类中的所有代码,举个例子看下面代码

可以看到继承的语法形式是class 子类名 extends 父类名,继承类就是子类,也叫派生类,被继承的类称为父类,基类或者超类(名字一般不做区分,均可使用)。

继承是is-a关系,只有当两个类之间存在is-a关系时,我们才使用继承。

继承可以使用 extends 和 implements 这两个关键字来实现继承,而且所有的类都是继承于 java.lang.Object,当一个类没有继承的两个关键字,则默认继承 Object(这个类在 java.lang 包中,所以不需要 import)祖先类。

使用 implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。

继承类型

继承有五种类型。

  • 单一继承 - B类A仅从类继承。

  • 多级继承 - B类从A类继承,然后C类从B类继承。

  • 分层继承 - A类作为B,C和D父类。

  • 多重继承 -类C从接口A和扩展B。

  • 混合继承 -两种或多种继承的混合。

3.多态

多态是面向对象编程的重要概念。它只是意味着不止一种形式。也就是说,同一实体(方法,运算符或对象)在不同情况下的行为会有所不同。

例如:

在Java中,多态可以分为两种类型:

  • 运行时多态

  • 编译时多态

在Java中,可以通过方法重写来实现运行时多态。

假设在父类及其子类中创建了相同的方法。在这种情况下,将要调用的方法取决于用于调用该方法的对象。例如,

在上面的示例中,该方法makeSound()在两个不同的类中具有不同的实现。当我们运行程序时

  • 表达式d1.makeSound()将调用Dog类的方法。这是因为d1是Dog类的对象。

  • 表达式c1.makeSound()将调用Cat类的方法。这是因为c1是Cat类的对象。

多态存在的三个必要条件

  • 继承
  • 重写
  • 父类引用指向子类对象:Parent p = new Child();

最后

本文中关于面向对象内容讲解较少,部分内容取自Java中的封装,继承和多态(详解)_举例说明:封装和多态在java语言中的体现-CSDN博客

及菜鸟教程。

  • 15
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Java面向对象 1 1 学习方法与要求 1 2 面向对象语言与面向过程语言的区别 7 3 面向对象?什么对象? 8 4 什么是类? 9 5 如何创建一个类Class? 10 6 如何使用类创建对象 10 7 引用与实例 11 8 实例属性与实例方法 11 9 实例属性与实例方法的使用 12 10 实例属性属于实例本身,与其他实例没有关系 13 11 javaBean编码规范 14 12 练习: 15 13 什么构造方法 16 14 构造方法的作用? 17 15 this关键字 17 16 方法调用时的引用传递还是值传递 19 17 面向对象语言三大特性:封装,继承,多态 20 18 什么是封装?封装在哪? 20 18.1 封装的好处? 20 19 访问修饰符 20 20 面向对象的特性-继承 21 20.1 继承的关键字:extends 21 20.2 继承的语法格式: 21 20.3 继承的好处 21 20.4 Object类 21 20.5 继承是以什么方法实现的? 22 20.6 两个子类的实例,super会指向同一个父类实例吗? 23 20.7 在创建子类实例时,会创建父类实例,先创建哪个? 23 20.8 在子类构造方法中如何调用父类构造方法? 23 20.9 super关键字 24 20.10 父类中私有属性和私有方法可以继承吗? 24 20.11 在代码开发时先开发父类还是先开发子类? 24 20.12 父类是怎么来的? 25 20.13 父类中放的所有子类的共性。子类可以有自己的特性。 26 20.14 方法重写(核心@Override) 28 20.15 练习: 29 20.16 作业题: 31 21 类与类之间的关系 32 22 GC:垃圾回收机制 33 23 Object类 33 23.1 常用方法:boolean equals(Object) 33 23.2 常用方法:String toString() 34 24 继承整理 34 25 面向对象三大特性:多态(核心) 34 25.1 多态的前提? 35 25.2 什么是多态? 35 25.3 父类的引用指向子类实例时,父类引用可以调用哪些方法? 35 26 引用类型的自动类型与强制类型转换 36 27 多态的应用 37 27.1 在使用多态时的一般格式: 37 27.2 练习:创建一个薪资专员(Persionnel),能计算员工工资,负责汇总当月所有员工的总工资数 38 27.3 练习:NewBasePlusSalesEmployee:针对BasePlusSalesEmployee有固定底薪的销售人员,有任务额度10K,满足任务额度正常发放,不满足任务额度发放底薪的80%,提成正常发放。 38 27.4 练习:设计一个形状类Shape 39 28 abstract关键字 41 28.1 abstract可以修饰的对象 41 28.2 抽象方法 41 28.3 抽象类 41 28.4 抽象方法与抽象类的关系 42 28.5 抽象方法与抽象类的使用 42 28.6 abstract的使用场合 42 29 练习:写一个“愤怒的小鸟”: 43 30 final关键字 43 30.1 final可以修饰到3个地方 43 30.2 引用类型加final修饰表示引用不可变 44 31 static关键字 44 31.1 static关键字可以修饰4个地方 44 31.2 静态属性 44 31.3 静态的与实例的 45 31.4 静态代码块 45 31.5 静态方法 45 31.6 静态方法是不能被继承 46 31.7 如何区分静态方法和实例方法的应用 46 31.8 静态导入(1.5新特性) 46 32 单例模式 47 32.1 饿汉模式 47 32.2 懒汉模式 47 33 接口(interface) 48 33.1 如何创建一个接口。 48 33.2 如何使用接口 48 33.3 如何使用类实现一个接口 49 33.4 接口的细节 49 34 接口的应用(面向对象分析) 49 34.1 案例(第一版,使用接口) 50 34.2 案例(第二版) 52 35面向对象设计原则 54 1、找出应用中可能需求变化的代码,把它们独立出来,不要和那些需求不变化的的代码混在一起 54 2、针对接口编程,而不要针对实现类编程 54 3、多用组合,少用继承(包含实现) 54 4、为了交互对象之间的松耦合设计而努力 54 5、类应该对扩展开放,对修改关闭 54 6、依赖倒置,要依赖抽象,不要依赖具体类 54 36 练习:超市收银 54 37 练习:接口表示一种能力,也可以是一种规范 56 38 策略模式 57 38.1 动作冒险游戏 57 38.2 类图 57 38.3 编写使用武器行为接口和实现类 58 38.4 编写角色类和子类 58 38.5 测试类 58 38.6 动作冒险游戏补丁:增加新的角色和新的技能 59 38.7 编写新的打斗行为 59 38.8 编写新的治疗行为和实现类 59 38.9 修改角色父类 60 38.10 修改King类 60 39 披萨工厂 61 39.1 编写披萨父类 61 39.2 编写各种披萨 61 39.3 编写披萨商品类 62 39.4 简单工厂 63 39.5 使用简单工厂修改商店类 63 39.6 使用简单工厂将创建对象代码单独的封装的好处? 64 39.7 使用常量优化工厂类 64 39.8 测试类 65 40 枚举(enum) 65 40.1 创建一个枚举 66 40.2 为枚举创建实例 66 40.3 如何使用枚举的实例 66 40.4 使用枚举优化披萨工厂 67 40.5 枚举类型也可以有构造方法 68 40.6 枚举类型也可以有属性 68 40.7 枚举类型也支持带参数的构造方法。 68 40.8 枚举类型也可以有实例方法 68 40.9 枚举类型也可以支持抽象方法 69 41 内部类 70 41.1 内部类的分类 70 41.2 匿名内部类 70 41.3 成员内部类 71 41.4 静态内部类 72 41.5 局部内部类 73 42 作业 :商超案例,以OOP重构 73

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值