java基础知识点整理(二)

1、方法在执行过程中,在JVM中的内存是如何分配的呢?内存是如何变化呢?

1.方法只定义,不调用是不会执行的,并且在JVM中也不会给该方法分配“运行所属”的内存空间。
2.在JVM内存划分上有这样三块主要的内存空间(当然除了这三块之外还有其他的内存空间):方法区内存,堆内存,栈内存。
java基础知识点整理(二)_第1张图片

2、方法代码片段存在哪里?方法执行的时候执行过程的内存在哪里分配?

1.方法代码片段属于.class字节码文件的一部分,字节码文件在类加载的时候,将其放到方法区当中。所以JVM中的三块主要内存空间中方法区内存最先有数据。存放了代码片段。
2.代码片段虽然在方法区当中只有一份,但是可以被重复调用。每一次调用这个方法的时候,需要给该方法分配独立的活动场所,在栈内存中分配。【栈内存中分配方法运行所属内存空间】

3、面向过程和面向对象的区别

面向过程主要关键点是:实现的具体过程,因果关系。
优点:对于业务逻辑比较简单的程序,可以快速开发,前提投入成本较低。
缺点:采用面向过程的方式开发很难解决非常复杂的业务逻辑,另外面向过程的方式导致软件元素之间的耦合度非常高,只要其中一环出问题,整个系统受到影响,最终导致软件的扩展能力差。另外,由于没有独立体概念,所以无法达到组件复用。

面向对象:主要关注点是:主要关注对象【独立体】能完成哪些功能。
优点:耦合度较低,扩展能力强,更容易解决现实世界当中更复杂的业务逻辑,组件复用性强。
缺点:前期投入成本较高,需要进行独立体的抽取,大量的系统分析与设计。

4、面向对象的三大特性

封装
继承
多态
所有面向对象的语言都有这三大特征。

5、采用面向对象的方式开发一个软件,生命周期当中包括

面向对象分析:OOA
面向对象设计:OOD
面向对象编程:OOP

6、为什么要封装?封装有什么好处??

封装的好处(重点)
1.封装之后,对于那个事物来说,看不到这个事物复杂的那一面,只能看到该事物简单的一面。复杂性的封装,对外提供简单的操作入口。照相机就是一个很好的例子,照相机的实现原理非常复杂,但是对于用照相机的人来说,操作起来非常方便,非常便捷。还有像电视机也是封装的,电视机内存的实现非常复杂,但是对于使用者来说不需要关心内部的实现原理,只要会操作遥控器就行。
2.封装之后才会形成真正的对象,真正的“独立体”。
3.封装就意味着以后程序可以重复使用,并且这个事物应该适应性比较强,在任何场合都可以使用。
4.封装之后,对于事物本身,提高了安全性。【安全级别高】

7、一个属性通常访问的时候包括几种访问形式?

第一种方式:想读取这个属性的值,读取get
第二种方式:想修改这个属性的值,修改set

8、构造方法的作用?

构造方法存在的意义是:通过构造方法可以创建对象。

9、对象和引用的概念?

对象:目前在使用new运算符在堆内存中开辟的内存空间称为对象。
引用:是一个变量,不一定是局部变量,还可能是成员变量。引用保存了内存地址,指向了堆内存当中的对象。
所有访问实例相关的数据,都需要通过“引用.”的方式访问,因为只有通过引用才能找到对象。
只有一个空的引用,访问对象的实例相关的数据就会出现空指针异常。

10、关于java语言当中的this关键字

1.this关键字,翻译为:这个
2.this是一个引用,this是一个变量,this变量中保存了内存地址指向了自身,this存储在JVM堆内存java对象的内部。
3.创建100个java对象,每一个对象都有this,也就是说有100个不同的this。
4.this可以出现在实例方法当中,this指向当前正在执行这个动作的对象。【this代表当前对象】。
5.this在多数情况下是可以省略不写的。
6.this不能使用在带有static的方法当中。

11、this可以使用在哪里?

1.可以使用在实例方法当中,代表当前对象【语法格式:this.】
2.可以使用在构造方法当中,通过当前构造方法调用其他构造方法【语法格式:this(实参)】
重点【记忆】:this()这种只能出现在构造方法的第一行。

12、什么时候程序在运行的时候出现空指针异常?

空引用访问实例相关的数据,因为实例相关的数据就是对象相关的数据。这些数据在访问的时候,必须有对象的参与,当空引用的时候,对象不存在,访问这些实例数据一定会出现空指针异常。

13、什么时候成员变量声明为实例变量呢?

所有对象都有这个属性,但是这个属性的值会随着对象的变化而变化【不同对象的这个属性具体的值不同】

14、什么时候成员变量声明为静态变量呢?

所有对象都有这个属性,并且所有对象得到的这个属性的值是一样的,建议定义为静态变量,节省内存的开销。

15、关于java中的static关键字

1.static英语单词翻译为静态的。
2.static修饰的方法是静态方法。
3.static修饰的变量是静态变量。
4.所有static修饰的元素都称为静态的,都是可以使用“类名.”的方式访问,当然也可以用“引用.”的方式访问【但不建议】
5.static修饰的元素都是类级别的特征,和具体的对象无关。

16、静态代码块

1.语法格式:static{java语句;}
2.静态代码块在类加载的时候执行,并且只执行一次。
3.静态代码块在一个类中可以编写多个,并且遵循自上而下的顺序依次执行。
4.静态代码块的作用是什么?怎么用?什么时候用?
这当然和具体的需求有关,例如项目中要求在类加载的时刻/时机完成日志的记录,那么这段记录日志的代码就可以编写到静态代码块当中,完成日志记录。
静态代码块是java为程序员准备的一个特殊的时刻,这个特殊的时刻被称为类加载时刻。若希望在此时刻执行一段特殊的代码,这段程序可以直接放到静态代码当中。
5.通常在静态代码块当中完成预备工作,先完成数据的准备工作,例如:初始化连接池,解析XML配置文件。

17、关于java语言中的继承

1.继承是面向对象的三大特征之一,三大特征分别是:封装,继承,多态。
2.继承“基本”的作用:代码复用。但是继承最重要的作用是:有了继承才有了以后的“方法覆盖”和“多态机制”。
3.继承语法格式:
[修饰符列表] class 类名 extends 父类名{
类体=属性+方法
}
4.java语言中的继承只支持单继承,一个类不能同时继承很多类,只能继承一个类。在C++中支持多继承。
5.在java语言当中子类继承父类都继承哪些数据呢?
私有的不支持继承;构造方法不支持继承;其他数据都可以被继承。
6.虽然java语言当中只支持单继承,但是一个类也可以间接继承其他类。
7.java语言当中假设一个类没有显示的继承任何类,该类默认继承javaSE库当中提供的java.lang.Object类。java语言中任何一个类中都有Object类的特征。

18、关于java中的方法重载

1.方法重载又称为:overload
2.方法重载什么时候用?
当在同一个类当中,方法完成功能是相似的,建议方法名相同,这样方便程序员的编程。就像在调用同一个方法似的,代码美观。
3.什么条件满足之后构成重载?
在同一个类当中,方法名相同,参数列表不同:类型,顺序,个数。
4.方法重载和什么无关?
和方法的返回值类型无关
和方法的修饰符列表无关

19、关于java语言当中的方法覆盖

1.方法覆盖又被称为方法重写,英语单词是:【官方的】override/overwrite
2.什么时候使用方法重写?
当父类中的方法已经无法满足当前子类的业务需求。子类有必要将父类中继承的方法进行重新编写。这个重新的过程称为方法重写或者方法覆盖。
3.什么条件满足之后方法重写?【代码满足什么条件之后,就构成方法的覆盖呢?】

  • 方法重写发生在具有继承关系的父子类之间
  • 方法重写的时候:返回值类型相同,方法名相同,形参列表相同
  • 方法重写的时候:访问权限不能更低,可以更高。
  • 方法重写的时候:抛出有一场不能更多,可以更少。
    4.建议方法重写的时候尽量复制粘贴,不要不编写,容易出错,导致没有产生覆盖。
    5.注意:
  • 私有方法不能继承,所以不能覆盖
  • 构造方法不能继承,所以不能覆盖
  • 静态方法不存在覆盖。
  • 覆盖只针对方法,不针对属性。

20、关于java语言当中的多态语法机制

1.关于多态中涉及到的几个概念

  • 向上转型(upcasting):子类型–>父类型,又被称为:自动类型转换
  • 向下转型(downcasting):父类型–>子类型,又被称为:强制类型转换【需要加强制类型转换符】
    需要记忆:无论是向上转型还是向下转型,两种类型之间必须要有继承关系,没有继承关系的话,编译报错。
    2.父类型引用指向子类型对象这种机制导致程程序存在编译阶段绑定和运行阶段绑定两种不同的形态/状态,这种机制可以称为一种多态语法机制。
    3.什么时候需要使用向下转型呢?
    当调用方法或者访问的属性是子类特有的,在父类型当中不存在,必须进行向下转型。
    4.怎么避免向下转型出现的ClassCastException异常?
    使用instanceof运算符可以避免出现以上异常。
    5.instanceof运算符怎么用?
    语法格式(引用 instanceof 数据类型名)
    以上运算符的执行结果是布尔类型,结果可能是true/false
    例如:假设(a instanceof Animal)
    true表示a这个引用指向的对象是一个Animal类型。false表示a这个引用指向的对象不是一个Animal对象。
    6.java规范中要求:在进行强制类型转换之前,建议采用instanceof运算符进行判断,避免ClassCastException异常的发生。
    7.多态的作用是什么?
    降低程序的耦合度,提高程序的可扩展力。能使用多态尽量使用多态。父类型引用指向子类型对象。
    8.面向抽象编程尽量不用面向具体编程。

21、关于java语言中的final关键字

1.final是一个关键字,表示最终的,不可变的。
2.final修饰的类无法被继承。
3.final修饰的方法无法被覆盖。
4.final修饰的变量一旦被赋值后,不可重新赋值【不可二次赋值】
5.final修饰的实例变量?必须手动赋值,不能采用系统默认值。
6.final修饰的引用?
final修饰的引用,一旦指向某个对象之后,不能再指向其他对象,那么被指向的对象无法被垃圾回收器回收。
final修饰的引用虽然指向某个对象后不能指向其他对象,但是所指向对象内部的内存是可以被修改的。

22、关于java语言中的包机制

1.包又被称为package,java中引入package这种语法机制主要是为了方便程序的管理,不同功能的类被分门别类放到不同的软件包当中,管理比较方便,易维护。
2.包名的命名规范:
公司域名倒序+项目名+模块名+功能名
3.包名要求全部小写,包名也是标识符,必须遵守标识符的命名规则。
4.一个包将来对应的是一个目录。

23、访问控制权限修饰符

public 表示公开的,在任何位置都可以访问
protected 同包,子类
缺省 只是同包
private 表示私有的,只能在本类中访问

1.访问控制权限修饰符可以修饰:
属性(4个都能用)
方法(4个都能用)
类(public和默认能用【内部类除外】,其他不行)
接口(public和默认能用,其他不行)
2.当某个数据只希望子类使用,使用protected进行修饰。
3.修饰符范围:
private<缺省

你可能感兴趣的:(java,java)