面向对象

“万物皆对象”怎么理解?
面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做;
面向对象:强调了具备了功能的对象,以类/对象为最小单位,考虑谁来做。

任何资源、变量等都可以看成是对象,每个对象都有自己的状态特征和行为特征,即属性和方法,面向对象思想是指在编程过程中,通过对象之间行为的交互来解决问题。

  1. 在Java语言范畴中,我们将功能、结构等封装到类中,通过类的实例化来调用功能结构,即通过"对象.属性"/"对象.方法"来调用;
  2. 涉及到Java相关的技术,包括前端HTML页面、后端数据库的交互、以及文件资源、网络资源URL等,都可视为对象;
    以类的形式组织代码,以对象的形式封装数据;

类与对象

类是很多个具有相同属性和行为特征的对象所抽象出来的,对象是类的实例化;
总结:类是对象的抽象,对象是类的实例;

类的三大特征:
封装性:隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。

  1. 实现:属性的权限修改为private,并且创建getXxx()/setXxx()方法,用于调用private的属性(一般是类的成员变量);

  2. 优点:

我们程序设计追求“高内聚,低耦合”。
①. 高内聚:类的内部数据操作细节自己完成,不允许外部干涉;
②. 低耦合:仅对外暴露少量的方法用于使用;
③. 更加安全;

  1. 缺点:不能直接访问private修饰的变量,增加访问难度。

继承性 :子类可以继承父类的属性和方法,并能拓展新的属性和方法;

  1. 实现:使用extends关键字将多个类具有的共同属性与特征行为即成员变量/成员方法提取出来定义在一个公共类中,方便其他类继承;
Class A extends Class B{}
  1. 特点:java中类具有单继承性:一个类只能有一个直接父类,但一个类可以被多个子类继承;

  2. 优点:

①. 减少了代码的冗余,提高了代码的复用性,从而提高软件开发效率;
②. 便于功能扩展;
3.多态的前提;

  1. 缺点:父类变化,子类也会跟着变化,形成强耦合关系,应减少继承关系,降低耦合度。
    tips: 一旦子类A继承父类B之后,A就获取了B中声明的所有结构:属性、方法;
    注:父类中声明为private的属性或方法,子类继承父类后,仍然认为获取了父类中的私有结构
    只是因为封装性原因,使得子类不能直接调用父类的结构。

多态性(Polymorphism):父类或接口定义的引用变量可以指向子类/具体实现类的实现对象。

  1. 多态实现的条件:

①. 子类继承父类并重写父类中已有的方法;
②. 父类引用指向子类对象,相同的引用调用同一个方法会根据子类对象的不同而表现出不同的行为;
③. 向上转型;

  1. 作用:

①. 应用程序不必为每一个派生类编写功能调用,只需对基类进行处理,提高代码的复用性;
②. 父类引用可以调用不同子类的功能(向后兼容),提高了代码的扩展性和可维护性;

  1. 分类:
    编译时多态 (方法的重载overload)
    运行时多态(方法的重写override)
  2. 体现:
    Java引用变量有两个类型:编译时类型和运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。
    若编译时类型和运行时类型不一致,就出现了对象的多态性。
Animal a = new Dog();
a.eat();//调用的方法必须是子父类都有的

总结:编译看左边(父类的引用),运行看右边(子类的对象)

重载与重写
重载:功能类似的方法,可以使用相同的方法名来定义不同功能的方法;在同一个类中,允许存在一 个以上的同名方法,只要它们的参数个数或者参数类型不同即可。

  1. 特点:

①. 与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类型)。
②. 调用时,根据方法参数列表的不同来区别。

  1. 在通过对象调用方法时,如何确定某一个指定的方法?

JVM会根据参数类型、个数、顺序等找到相对应的方法并运行;

重写 : 子类继承父类之后,可以对父类中同名同参数的方法,进行覆盖操作;

  1. 应用:重写以后,当创建子类对象后,通过子类对象调用子父类中的同名同参数时,执行的是子类重写的方法
  2. 方法的声明:
    权限修饰符 返回值类型 方法名(形参列表)throws 异常的类型{}:
  3. 重写的规定:

①. 子类重写的方法的方法名和形参列表与父类中被重写的方法名和形参列表相同
②. 子类重写的方法的权限修饰符>=父类被重写方法的权限修饰符
特殊情况:子类不能重写父类中private的方法;

  1. 返回值类型:

①. 父类被重写的方法的返回值类型void,子类也必须是void
②. 父类:A类(Object) 子类:A类/A类的子类(String)
③. 父类:基本数据类型(double) 子类:相同的基本数据类型(double)

  1. 子类重写的方法抛出的异常类型<=被重写的方法抛出的异常类型
    tips:

子类和父类中的同名同参数的方法要么都static(不是重写),要么都非static(考虑重写)
static方法是随着类的加载而加载的,不能被覆盖/重写

  1. 若子类重写了父类方法,就意味着子类里定义的方法彻底覆盖了父类里的同名方法,系统将不可能把父类里的方法转移到子类中;
  2. 对于实例变量则不存在这样的现象,即使子类里定义了与父类完全相同的实例变量,这个实例变量依然不可能覆盖父类中定义的实例变量。
    eg:
class Base {int count = 10;public void display() {System. out. println(this. count);}
}
class Sub extends Base{int count = 20;public void display() {  System. out. println(this. count);}
}public class FieldMethodTest {public static void main(String[] args) {Sub s = new Sub();System. out. println(s.count);   //20   声明的是Sub,先找自己再找父类。s.display();  //20?  display()重写Base b = s;  //多态性//==,对于引用数据类型,比较的是两个引用数据类型变量的地址值是否相同System. out.println(b == s);//trueSystem. out . println(b. count);  //10,多态性 属性看左边b.display();   //20  虚拟方法调用,调用父类,实际执行子类(子类重写了)//(成员变量/静态方法)(属性不具有多态性!)看左边,方法看右边}
}

对于多态的调用:成员变量/静态方法看左边, 方法看右边。

重载与重写的区别:
1.从编译和运行的角度看:
重载,是指允许存在多个同名方法,而这些方法的参数不同。编译器根据方法不同的参数表,对同名方法的名称做修饰。对于编译器而言,这些同名方法就成了不同的方法。它们的调用地址在编译期就绑定了。Java的重载是可以包括父类和子类的,即子类可以重载父类的同名不同参数的方法。
所以:对于重载而言,在方法调用之前,编译器就已经确定了所要调用的方法,这称为 “早绑定” 或 “静态绑定”;
而对于多态,只有等到方法调用的那一刻,解释运行器才会确定所要调用的具体方法,这称为 “晚绑定” 或 “动态绑定”。

数组

二维数组
规定:二维数组分为外层数组的元素,内层数组的元素:

int[][] arr = new int[4][3];
//外层数组元素:arr[0], arr[1]……
//内层数组元素:arr[0][0], arr[0][1]……

数组元素的默认初始化值
二维数组有两种默认初始化:

初始化方式一:int[][] arr = new int[4][3];
初始化方式二:double[][] arr2 = new double[4][];
  1. 针对于初始化方式一:int[][] arr = new int[4][3];
    外层元素的初始化值为:地址值
    内层元素的初始化值:与一维数组初始化情况相同

  2. 针对于初始化方式二:double[][] arr2 = new double[4][];
    外层元素的初始化值为:null,指针指向的地址没有值;
    内层元素的初始化值:不能调用,否则空指针异常,指针没有初始化值代表指针没有指向任何东西,为空。

形参传递机制

方法的形参的传递机制:值传递;

  1. 如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值;
  2. 如果参数是引用数据类型,此时实参赋给形参的是实参存储数据的地址值;

匿名对象

  1. 定义:我们创建的对象,没有显式的赋给一个变量名,为匿名对象;
  2. 特征:匿名对象只能调用一次;

this关键

使用情况

  1. this可以用来修饰:属性、方法、构造器
  2. this修饰属性和方法: this理解为:当前对象

this调用属性/方法

  1. 一般情况下:通过 " this.属性 " / " this.方法 "的方式调用当前对象的属性/方法,只不过通常情况下省略了this;
  2. 特殊情况下:如果方法的形参和类的属性重名,必须显式的使用"this.变量"的方式,表明此变量是属性,而非形参(若不使用this,则会默认就近原则调用形参);
    eg1:
public void eat(){System.out.println("吃饭");study();  //相当于 this.study();  省略了this}public void study(){System.out.println("学习");}

eg2:

class Person{private int age;private String name;public void setName(String name){  //形参名和属性名相同,会覆盖成员变量// name  = name;  就近原则this.name = name;}
}

this调用构造器

  1. 在类的构造器中,可以显式的使用"this(形参列表)“方式,调用本类中指定的"其他构造器”;
  2. 构造器中不能通过this(形参列表)"方式调用自己;
  3. 如果一个类中又n个构造器,则最多有n-1个构造器使用"this(形参列表)"方式;
  4. 规定:"this(形参列表)"必须声明在当前构造器的首行,“Call to ‘this()’ must be first statement in constructor body”;
  5. 构造器内部:最多只能声明一个"this(形参列表)",用来调用其他构造器,不能多次调用,不能循环调用;
 public Person(){  //构造器0System.out.println("我是千万万个冗余代码");//创建空参构造器,可以放置冗余代码// 下面的构造器可以直接调用上面放置冗余的构造器}public Person(int age){  //构造器1this();  //调用构造器0this.age = age; / /如果正在构造器内调用,this可以理解为“当前正在创建的对象的属性”}public Person(String name,int age){  //构造器2this(age);// 调用构造器1this.name = name;}

Java知识点汇总1相关推荐

  1. Java知识点汇总以及常见面试题

    Java知识点汇总以及常见面试题 1. "=="和equals()的区别 2. 构造方法能不能重写或者重载 3. 基本数据类型 4. 匿名内部类能被继承? 5. Integer和i ...

  2. Java知识点汇总 持续更新中~~~

    一.什么是面向对象? 是基于面向过程而言,面向对象是将功能通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节. 二.标识符的格式? 1.可以使用字母.数字._.$来组成,不能使用特殊符号. ...

  3. Java知识汇总-思维导图

    2019独角兽企业重金招聘Python工程师标准>>> Java知识点汇总,从基础到常用的API.还有常用的集合类,总结的很详细.图片是从论坛里面找到的,整理下来以便常复习.这是目前 ...

  4. Java知识汇总——思维导图

    Java知识汇总--思维导图 Java知识点汇总,从基础到常用的API.还有常用的集合类,总结的很详细.图片是从论坛里面找到的,整理下来以便常复习.这是目前看到的比较详细完整的思维导图. 1.Java ...

  5. java基础知识大全,java 基础知识点汇总

    java 基础知识点汇总 问题一:我声明了什么! String s = "Hello world!"; 许多人都做过这样的事情,但是,我们到底声明了什么?回答通常是:一个Strin ...

  6. Java常见知识点汇总

    Java常见知识点汇总 基础概念与常识 1.Java 语言有哪些特点? 2.JVM vs JDK vs JRE 3.什么是字节码?采用字节码的好处是什么? 4.为什么不全部使用 AOT 呢? 5.为什 ...

  7. javaSE知识点汇总

    javaSE知识点汇总 Java基础知识精华部分   写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实 ...

  8. ES6知识点汇总(全)

    ES6知识点汇总(全) 近期在整理ES6相关开发文档,针对ES6新的知识点,以问答形式整理一个全面知识和问题汇总. 一.问:ES6是什么,为什么要学习它,不学习ES6会怎么样? 答: ES6是新一代的 ...

  9. 2022 Java 知识点总结

    2022 Java知识点总结 Java Code 类加载 类加载机制 双亲委派机制 类的初始化 反射 反射的实现方式和原理 获取反射中的 Class 对象 获取构造函数 获取属性 获取方法 获取Cla ...

最新文章

  1. 什么叫计算机网络阻塞,计算机网络体系结构的阻塞控制是什么呢?
  2. 关于CCRANDOM_0_1
  3. JAVA 将图片转换为Base64编码
  4. C51汇编语言16进制加法,51单片机汇编语言带进位加法指令(4条)
  5. linux下darknet指定opencv4编译安装
  6. EMNLP2018 - 语言理解+对话系统的最新进展
  7. FTP(持虚拟用户,并且每个虚拟用户可以具有独立的属性配置)
  8. android studio 登录与注册,Android Studio登录/注册系统构想
  9. Atitit 软件理论方面的书籍 目录 1. 计算机科学分为计算机理论和计算机应用。 计算机基础理论包含以下几部分: 2 1.1. ( 1) 程序理论( 程序逻辑、程序正确性验证、形式开发方法等
  10. 企业安全:业务的安全韧性
  11. GBASE数据库安装手册中的一点命令
  12. VB.NET控件应用编程实例教程(奋斗的小鸟)_PDF 电子书
  13. 【C系列】结构体数组初始化方法
  14. 【机器学习】树及其组合算法(一)(Bagging,Boosting,GBDT,XGboost,Adaboost,随机森林)
  15. 无法启动此程序 因为计算机中丢失msvcr100.dll,Windows7电脑提示丢失MSVCR100.dll怎么办?...
  16. Metasploit——渗透攻击模块(Exploit)
  17. jieba分词的基本用法和词性标注
  18. 金融民工python学习笔记
  19. 【单片机】一文彻底搞懂单片机程序烧录
  20. [附源码]计算机毕业设计springboot酒店客房管理信息系统

热门文章

  1. 【C语言笔记初级篇】第八章:简单调试
  2. (计算机组成原理)第三章存储系统-第四节:主存储器和CPU的连接
  3. http请求头中Referer的作用及危害
  4. 一本通1596动物园
  5. 浅析Unity 坐标系
  6. 【openjudge】【字符串+模拟】1777:文件结构“图”
  7. fun(int **p)的使用
  8. 如何使用Native Messaging API 打开window程序
  9. HDFS分布式文件系统设计思想
  10. java.util.concurrent 多线程框架