目录

类和对象

类的定义

对象的理解

方法详解

方法参数传递

递归方法

方法重载

成员变量和局部变量

成员变量

局部变量

变量的使用规则

隐藏和封装

访问控制符

package,import,import static

Java常用包

深入构造器

类的继承

方法的重写

super

调用父类构造器

多态

继承与组合

初始化块


类和对象

类:是某一批对象的抽象,可以理解成是一种概念,是一种类型
对象:是具体存在的实体

类的定义

类的结构:

  • 成员变量:表示该类或该类的实例所包含的状态数据
  • 代码块:主要用于初始化类或该类的实例的成员变量
  • 构造器:是一个类创建对象的根本途径,如果不显式声明构造器,会有默认无参构造器,一旦显式声明,则系统提供的默认构造器就不会存在了,构造器的返回值是隐性的,不能显示声明返回void、某个类型,不用使用return返回,Java的语法这么规定的
  • 方法:表示该类或该类的实例的行为特征或者功能实现
  • 内部类:是一个完成的类结构,只是定义在另外一个类的结构中而已
//类的修饰符:public,final,abstract
public class Test {//成员变量private String name;//代码块{}//构造器public Test() {}//方法public void method() {}//内部类public class InnerTest {}
}

对象的理解

Person p=new Person()

如上代码,会产生两个东西:

  1. p变量
  2. Person对象

定义的p变量实际上是一个引用,存储了一个地址值,它被放在栈内存中,指向了实际的Person对象,而实际的Person对象是放在堆内存(heap)中,栈内存中的引用变量并未真正存储对象的成员变量,对象的成员变量数据实际存放在堆内存中,不能直接访问堆内存中的对象,只能通过引用来访问,堆内存中的一个对象可以对应多个引用,但一个引用只能对应一个对象

this:指向调用该方法的对象,谁在调用这个方法,this就代表谁,主要是让类中的一个方法访问该类中的另外一个方法或成员变量,也可以用来区分局部变量和成员变量,一般同一个类中的方法相互调用会省略该关键字,可以使用this作为方法的返回值,会让代码更加的简洁

static:用static修饰表示这个成员属于该类本身,否则该成员属于该类的实例,静态成员不能直接访问非静态成员

方法详解

方法:表示该类或该类的实例的行为特征或者功能实现,不能独立存在,要么属于类本身,要么属于该类的实例,执行方法必须使用类或对象作为调用者

方法参数传递

传递方式:值传递,将实际参数值的副本传入方法内,而参数本身不会受到任何影响,如果参数类型是基本类型,则把参数实际的值的副本传入,如果参数类型是引用类型,也是把参数实际的引用地址值的副本传入

递归方法

一个方法调用它自身,叫做递归

如:f(0)=1,f(1)=4,f(n+2)=2*f(n+1)+f(n),求f(10)的值?

public class Main {public static void main(String[] args) throws Exception {System.out.println(new Main().fn(10));}public int fn(int n) {if (n == 0) {return 1;}if (n == 1) {return 4;}return 2 * fn(n - 1) + fn(n - 2);}
}

递归的重要规则:一定要向已知的方向递归,不然就是死循环

方法重载

Java中,调用方法需要三要素

  • 调用者
  • 方法名
  • 形参

方法重载的要求是两同一不同

同一个类中,同一个方法名,不同的形参列表(顺序不同也是不同)

public class Main {public static void main(String[] args) throws Exception {//优先调用一个参数的方法method("abc");}//一个参数的方法public static void method(String b) {}//可变参数...表示形参可以有0个,1个,多个public static void method(String... b) {}
}

成员变量和局部变量

  • 成员变量:在类里定义的变量
  • 局部变量:在方法里定义的变量

成员变量

生命周期:类变量与类本身共存亡,实例变量与实例共存亡;系统会对成员变量的值做默认的初始化

局部变量

在{ }内有效,且必须显式初始化后才能访问

变量的使用规则

如下情形应使用成员变量:

  • 该变量是描述某个类或者对象的固有信息的
  • 该变量是需要在类中多个方法共享的

隐藏和封装

面向对象三大特征之一,封装的目的:隐藏类的实现细节,使用者只能通过特定的方法进行访问,可以在暴露给使用者的方法中做限制,检查等操作;实际的两层含义也就是,该隐藏的隐藏,该暴露的暴露

访问控制符

当一个Java源文件中,都没有public修饰的类,则该源文件的名字可以是任意的合法标识符;当一个Java源文件中,有且只有一个public修饰的类,则该源文件的名字就必须与该类名一样

package,import,import static

package:用于解决类的命名冲突,类文件管理等问题,包的声明必须放在源文件的第一行

访问控制符中的default同一个包中指的是同一个直接包下,不包含子包目录

import:用于导入其他包下的类,一般出现package语句之后,定义类之前

import static:JDK1.5之后,支持导入某个类的静态成员

Java常用包

java.lang,java.util,java.net,java.io,java.sql,java.util

深入构造器

构造器最大的作用就是在创建对象时执行初始化,无论如何,Java类至少包含一个构造器,当调用构造器时,系统先为该对象分配内存空间,并执行默认初始化,对象已经产生了,只是还不能被外界访问,可以通过this来引用,这些都还没执行到构造器的方法体,在构造器中调用其他构造器可通过this关键字来调用

类的继承

面向对象的三大特征之一,软件复用的重要手段,单继承(一个类只能有一个直接父类),使用extends(英文是扩展的意思)关键字实现,从子类角度来看是子类是对父类的扩展,从父类角度来看是子类是父类派生出去的,子类继承了父类,将可以获得父类全部的成员变量和方法,但是不能获得父类的构造器

方法的重写

方法的重新要求:两同两小一大

  • 方法名,形参列表与父类方法相同
  • 返回值类型,抛出异常小于等于父类方法
  • 访问控制符大于等于父类方法

super

代表父类对象,主要用于调用该类从父类中继承得到的实例变量或方法,也可以在子类构造器中通过super调用父类构造器,不能用static代码块或方法中

调用父类构造器

任何一个类在创建对象的时候都会隐式调用到父类的构造器,也可以通过super显式调用父类构造器,但super调用构造器语句必须放在第一行,以此类推,所以任何Java对象的创建都会调用到Object类的构造器

多态

Java引用变量有两种类型:一种是编译时类型,一种是运行时类型。编译时类型是在声明该变量的时使用的类型决定的,运行时类型是实际赋给该变量的对象决定,如果编译时类型与运行时类型不一致就是所谓的多态。某个变量能调用的方法是由编译时类型决定

向上转型:子类对象赋给父类类型,由系统自动完成

强制类型转换

  • 基本类型:只能是数值之间进行强制转换,数值类型与布尔类型不能强制转换
  • 引用类型:只能在具有继承关系的两个类型之间进行转换,父类强制转换成子类。可以通过instanceof先进行判断,以免出现ClassCastException异常。
    instanceof是一个运算符,前面的操作数是一个引用变量,后面的操作数是一个类或者接口,用于判断这个引用变量是否是这个类,或其子类的实例,要求前面的操作数的编译时类型与后面操作数是继承关系,否则编译报错

继承与组合

都能实现类的复用,那该如何选择使用继承还是组合?应该从实际业务方面去考虑

理解好:继承是“is-a”的关系,组合是“has-a”的关系

初始化块

主要用于给该类中的成员变量赋值,隐式执行,初始化块在构造器执行之前执行,多个初始化块执行的顺序与定义的顺序一样,同时初始化块与声明变量默认初始化的执行顺序也是与定义的顺序一样

如:以下代码输出的name="123"

public class Main {{name="456";}private String name="123";public static void main(String[] args) {System.out.println(new Main());}
}

静态初始化块比普通初始化块优先执行,而且只会执行一次

SE:5.面向对象(上)相关推荐

  1. 面向对象(上):从生活中的类比说起-day9

    面向对象(上):从生活中的类比说起 文章目录 面向对象(上):从生活中的类比说起 写在前面 对象,你找到了吗? 能不能再给力点? 继承,富二代的梦想 总结 写在后面 写在前面 你好,我是禅墨! 滴滴~ ...

  2. 第五章 面向对象(上)

    Java是面向对象的程序设计语言,Java语言提供了定义类.成员变量.方法等最基础的功能,类可被认为是一种自定义的数据类型,可以使用类来定义变量,所有使用类定义的变量都是引用变量,它们将引用到类的对象 ...

  3. java面向对象 接口和实现类_类实现java面向对象上:接口

    最近应用开发的过程中出现了一个小问题,顺便记录一下原因和方法--类实现 10.接口: 接口的设计:        1.应用接口处理多继承:        2.应用接口为外部类添加功能:        ...

  4. python学习笔记六 初识面向对象上(基础篇)

    python面向对象 面向对象编程(Object-Oriented Programming )介绍 对于编程语言的初学者来讲,OOP不是一个很容易理解的编程方式,虽然大家都知道OOP的三大特性是继承. ...

  5. linux 延展集群如何设置,OCaml 4.11.0 发布,将函数式语言 Caml 在面向对象上进行延展...

    OCaml 4.11.0(Objective Caml)已经发布.OCaml 是 Caml 编程语言的主要实现,Caml 是函数式编程语言,OCaml 将 Caml 语言在面向对象方面做了延展,它的扩 ...

  6. C++之面向对象(上)

    面向对象(上) 一,引用的应用 swap.cpp #include <iostream> using namespace std; int main(void){   int a = 10 ...

  7. Java阿凯_Java-7 面向对象(上)

    2.面向对象 面向对象(Object-Oriented) ooa:面向对象的分析 ood:面向对象的设计 oop:面向对象的编程 面向对象三大特性 封装,继承,多态 2.1类和对象关系 类:一种数据类 ...

  8. Java SE 基本介绍上

    文章目录 一,概述 1.1 开发场景 1.2 应用领域 1.3 技术体系 1.4 特点 1.5 开发工具 1.6 运行机制&过程 一,概述 1.1 开发场景 SSM Spring 轻量级容器框 ...

  9. 黑马程序员---面向对象上(封装,继承,多态)

    ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS ...

最新文章

  1. 七夕节马上到了,有对象的,无对象的必备神奇用Python做一个烟花秀
  2. python代码翻译-python实现在线翻译
  3. SignalR 实现web浏览器客户端与服务端的推送功能
  4. 《最强蜗牛》运营分析:这个奇葩放置游戏的乐趣在哪里?
  5. 理解LinkedHashMap
  6. 2017.3.14 不重复数字 思考记录
  7. 南抖音北快手,智障界的两泰斗
  8. app接码教程,附源码
  9. 连上WiFi后,笔记本离路由器比较近时,电脑播音偶尔卡音
  10. 不写一行代码(三):实现安卓基于i2c bus的Slaver设备驱动
  11. 2021-3-18大学化学无机原理(3)热力学能与热力学第一定律
  12. MES系统质量追溯功能,到底在追什么?
  13. 机器人学: 建模 规划与控制(英文原版)_伦敦大学国王学院机器人学理学硕士研究生offer一枚...
  14. Bilateral attention network for RGB-D salient object detection阅读笔记
  15. python会员折扣_Python——潜在会员用户预测
  16. Java获取某年某周的第一天
  17. 已有a,b两个链表,每个链表中的结点包括学号,成绩。要求把两个链表合并,按学号升序排列。
  18. 【算法题】2309. 兼具大小写的最好英文字母
  19. CVE-2014-6271“破壳”漏洞
  20. 基于ArduinoUNO的LD3320语音识别+SYN6288语音合成的智能分类垃圾桶

热门文章

  1. uuuuuuuuuu
  2. 复变函数不挂科——3小时学完复变函数与积分变换(猴博士复变函数学习笔记2)
  3. AMPL IDE语法整理
  4. labelme 标注生成24位深度图像转换为8位
  5. 我参加NVIDIA Sky Hackathon(语音识别模型训练)
  6. 推荐:几款优秀的数据挖掘工具
  7. 通俗讲解 依概率收敛,大数定理和中心极限定理
  8. 使用 Traci进行仿真
  9. 海上风电场对雷达性能的影响——雷达回波
  10. 基于无线Mesh网络OLSR路由协议的MATLAB仿真