1.什么是对象?
-对象是具体的,实际的,代表一个具体事物, 即 是实例
-一个对象根据需要是可以拆分出多个子对象
-对象之间存在联系:
对象调用(方法调用)
继承(父子联系)
发送指令(请求)
对象的组成:
-属性:对象的属性是实体的相关状态特性,它用于对对象进行操作
-方法:方法是对对象所具有的功能,它是对对象功能的描述
2.什么是类?
-
类是一个概念级的概念
-
类是相同或相近对象的总称
-
类的组成
-
属性:属性是该类对象所拥有的属性
-
方法:方法是该类对象所拥有的方法
-
面向对象语言中,对象通过类在生成
-
面向对象语言中,类是组织代码的基础
-
Java中通过类创建对象的方式:
-
1.使用new关键字创建类的对象 new Student();
-
2.通过类的字节码对象创建类的对象(实例),使用反射创建
Java内存的结构分析:
1 .栈: 一般存放基本数据类型(局部变量)
-
堆: 存放对象(Cat cat , 数组等)
-
方法区:常量池(常量,比如字符串), 类加载信息
Java 创建对象的流程简单分析
Person p = new Person();
p.name = “jack”; p.age = 10
1先加载 Person 类信息(属性和方法信息, 只会加载一次)
-
在堆中分配空间, 进行默认初始化(看规则)
-
把地址赋给 p , p 就指向对象
-
进行指定初始化, 比如 p.name
3.类与对象的关系?
.类是相同或相近对象的抽象
-在编程中对象是由类创建的
4.什么是封装及封装的好处和用法?
封装指将数据隐藏,通过相关对外的操作方法实现对数据的获取及修改
封装的步骤
属性私有化(private)
针对这些私有属性提供对外的操作方法
在这些操作方法中对属性的操作进行限制
-封装的好处:
-1.对外隐藏属性或实现细节,保护数据的安全性
-2.封装后的数据传递更加便利
5.1构造方法
-构造方法用于创建类的对象时,当我们需要创建一个类的对象时必须调用该类的构造方法
-在任何类中都存在一个默认的构造方法,默认不显示定义
-public Preson(){}//默认方法
-构造方法是一个特殊的方法(没有返回值)
-方法名必须和类名一致
-构造方法通过new关键字调用
-构造方法的调用是显式调用
5.什么继承、继承的好处、继承使用?
什么是继承?
-子类可以直接继承父类的非私有属性和方法
-私有属性子类依然可以继承,但不能直接使用。
继承构造方法的使用
-子类中调用父亲的构造方法需要使用super()调用
super关键字的作用?
-在子类中使用,表示父类的一个对象引用
-可以通过super关键字调用父类的属性和方法super.xxx或super.xxx();
-通过super(。。。)调用父类的构造方法
-super关键字只能表示直接父类不能表示间接父类
继承的好处
1.通过继承可以简化子类的开发,达到代码复用的效果 2.提高类之间的结构性 3.通过继承可以实现多态
6.什么是方法重载,为什么使用方法重载?
- 方法重载(OverLoad) - 方法重载指在一个类中,多个方法之间,方法名相同,参数列表不同 参数列表不同含以下几种不同: - 参数的类型不同 - 参数的数量不同 - 参数的顺序不同 - 方法重载与方法的返回值无关 - 为什么使用方法重载(方法重载的好处)? - 方法名复用,让调用者使用更加便捷,符合现实 - 在调用时JVM会根据方法名和自参数自动在重载的方法中查找对应的方法并调用 - 方法重载会不会提高效率? - 方法重载不会提高效率,由于方法重载需要JVM再同名的方法中搜索,所以效率会有所下降
7.什么是方法重写,为什么使用方法重写?
-
方法重写(Override)
-
方法重写存在于子父类之间,由子类中的一个方法重写父类中某个方法 - 方法重写的规则: 1.子父类之间,子类的方法重写父类的方法 2.子父类中的两个方法的声明部分必须一模一样(除方法的访问权限修饰符)
-
子类中方法的权限修饰符不能小于父类的方法 3.方法体不能一样 - 方法重写的意义(目的):
-
子类重新定义父类中某个功能具体实现规则 - Java中为了强制重写父类中的方法,提供了一个"注解"@Override 当在一个方法声明处使用了该注解后,则该方法必须要重写父类中的某个方法 - Java中默认一个方法的方法名与父类中某个方法名一致,则表示该方法要重写父类的方法 如果没有重写则编译失败.
-
8.在继承中多态的使用?
-
使用多态的目的在于提高系统灵活度(可维护性、可扩展性)
-
在继承中继承同一个类的子类之间形成多态,不同的子类可以根据自己 的特点完成同一件事(方法)
-
多态的实现:
-
声明的类型为父类类型,在使用时传入子类对象,此时能够调用到的方法 是父类中声明的方法,但执行时执行的是子类重写后的方法
-
9.为什么使用抽象类、抽象类的使用?
-
抽象方法是没有方法体的方法,它是一个残缺的方法,残缺的方法不能被调用 - 抽象方法不能在普通类中声明,抽象方法只能在抽象类中声明 - 当在一个类中使用了abstract关键字声明后,则该类就成了一个抽象类 - 抽象类中可以存在抽象方法,但抽象方法是残缺的方法不能被调用,所以抽象类不能被实例化 - 抽象类不能被直接实例化(不能创建对象),但可以通过子类对象间接创建父类对象 - 抽象类是否有构造方法?(有) - 抽象类的用途: - 抽象类主要用于规范子类的行为,抽象类是作为父类存在 - 当一个类继承了一个抽象类后,子类必须重写父类中的抽象方法 - 如果一个类继承了一个抽象类,不想重写父类中的抽象方法,则该类也要声明为抽象的 - 抽象类中可以存在抽象方法,也可以不存在任何抽象方法,当一个类不想被创建实例时我们就可以将该类声明为抽象类
10.什么是接口、接口的好处及使用?
接口是特殊的抽象类;
接口中的方法都是抽象方法(JDK1.8以前),JDK1.8以后(含1.8)以后允许接口中存在带有实现体的方法。
JDK1.8以后允许接口有以下方法:
1.默认方法:在方法的声明处加上default修饰符,默认方法允许带有方法体
2.静态方法:在方法的声明处加上static修饰符,默认方法允许带有方法体
-JDK1.8以后引入了“函数接口”的概念
-在接口中有且只有一个抽象方法(是函数式接口,函数式接口不关心default方法和静态方法,只要只存在一个抽象方法即可)
java中为了强制定义函数式接口引入一个注解:@FunctionInterFace
为什么会出现函数式接口?
目的:使用lambda表达式,让lambda表达式使用更加方便
lambda表达式的作用是简化匿名内部类的书写
简化内部类的编写
使用接口的目的:
-规范实现类的行为,规定实现类中必须重写的方法
-为了让系统更加灵活,提高系统的可维护性和拓展性
当一个类实现一个接口后,则必须重写接口中所有的抽象方法,如果不想重写,则该类要声明为抽象类。
Java中的类使用的是单继承机制,一个类只能存在一个直接父类。
Java中的接口使用的是多继承机制,一个接口可以继承多个接口(接口不能继承类)
Java中一个类可以同时继承一个父类并实现多个接口
11.在接口中多态的使用?
- 使用多态的目的在于提高系统灵活度(可维护性、可扩展性) - 在接口中实现同一个接口的实现类之间形成多态,不同的实现类可以根据自己的特点完成同一件事(方法) - 多态的实现: - 声明的类型为接口类型,在使用时传入实现类对象,此时能够调用到的方法 是接口中声明的方法,但执行时执行的是实现类重写后的方法
12.this 关键字
- this关键字的使用位置? this关键字只能在类中使用,而且除了静态内容(静态属性、静态方法、静态代码块)之前的任意位置都可以使用该关键字 this关键字可以在属性中使用,可以在方法中使用,可以在构造方法中使用,可以在初始化代码中使用 - this关键字表示什么? this关键字在类的内部使用,表示当前类的一个对象引用 this关键字表示当前类的对象,但该对象与调用者有关 this关键字虽然在类的内部使用,但this关键字表示调用者对象 - this关键字与super关键字的区别? this和super都是在类中使用的,可以在非静态的任何位置使用 this在类的内部,表示调用者对象 super在类的内部,表示当前类的父类对象 this(...)调用本类的构造方法 super(...)调用父类的构造方法
13.==和equls的区别:
==用于判断两个对象是否为同一个对象
==针对基本类型,表示两个数据的值是否相等
equals在基本类型中不能使用
equals在对象类型中表示两个对象中的属性值是否相等
字符串使用equals来判断是否相等