当前位置:网站首页 > Java基础 > 正文

杜老师java基础



1. 为什么java可以跨平台

因为有jvm,jvm是java虚拟机,是用c++实现的虚拟的计算机。java程序实际上并没有直接和操作系统打交道。jvm屏蔽了系统之间的差异。缺点是直接把一个java程序扔到操作系统中运行不了,必须有jvm才行,想要有jvm必须先安装jdk。

2. JDK、JRE、JVM之间的关系?

JDK:java开发工具箱
JRE:java运行环境
JVM:java虚拟机
JDK包括JRE,JRE包括JVM。不同操作系统上需要安装不同的JDK,不同操作系统上需要安装不同的JRE。
JVM不能独立安装,但是JRE和JDK可以单独安装。
安装JDK时,JRE和JVM就自动安装了。
安装JRE时,JVM就自动安装了。

3. java的加载与执行

在这里插入图片描述
javac命令【安装JDK后自带】:负责编译
java命令:负责运行

java程序非常重要的两个阶段:编译阶段和运行阶段

注意:java程序员直接编写的java代码(普通文本)是无法被jvm识别的。java代码必须经过一个编译,将“普通文本代码”变成jvm能够识别的“字节码”。jvm可以识别“字节码”。并将“字节码”文件解释成对应操作系统能识别的二进制码,操作系统再去执行二进制码。
语法不合规则编译失败,编译报错后.class是不会生成的,并且一个.java源文件可以生成多个.class文件。

编译和执行可以在不同操作系统上完成吗?

可以,因为java是跨平台的,不同操作系统编译生成的.class字节码文件是一样的,可以做到一次编写到处执行。

4. path环境变量的作用?

给操作系统指路,告诉操作系统去哪儿找这个命令文件。

5. javac命令怎么用?

语法格式:

 
6. java.exe命令怎么用?
 
7. 终端输入并回车后,发生了什么?

第一步:启动jvm;
第二步:jvm会去启动类加载器,类加载器在硬盘中查找“类名”对应的字节码文件,也就是“类名.class”文件(默认从当前路径上找这个字节码文件);
第三步:如果没找到这个“.class”文件,会报“找不到或无法加载主类”错。如果找到了,类加载器将这个字节码文件加载到jvm中,jvm启动解释器,将字节码文件解释成二进制文件,操作系统执行二进制码和硬件交互。

8. 配置环境变量classpath

(暂时不用配置)
一定要理解classpath环境变量的作用是什么:是给类加载器指路的。
没有配置环境变量classpath时,从默认路径下加载;
配置了环境变量classpath时,就只能从指定路径下加载。

9. 标识符命名规范

类名、接口名:首字母大写,遵循驼峰命名
变量名、方法名:首字母小写,遵循驼峰命名
常量名:全部大写,单词间用下划线进行衔接

10. 标识符命名规则

只能包含 数字 字母 下划线 和 美元符号,不能以数字开头,不能是关键字,严格区分大小写。

11. 关键字

关键字全部小写,不能用做标识符。public、static、void、class、short、char等等。

12. switch语句

Java switch case 语句

13. break和continue

break语句用在两个地方:

  1. switch语句中,用来终止switch语句的执行
  2. 循环语句中,用来终止循环语句的执行(for循环、while、do…while),break终止的是离他最近的循环,不影响循环外面的后续代码。

continue语句,用来终止当前本次循环,直接进入下一次循环继续执行。

14.break和return

break终止switch或者当前循环
return终止离它最近的方法

15. jvm大致分为堆、方法区、栈

方法区:存放代码片段信息,存储.class字节码文件,这个空间是最先有数据的,类加载器首先将代码加载到这里。
栈内存:存放方法执行时的内存空间以及局部变量。
堆:存放对象和对象的实例变量。new创建的对象都存储在堆中,new运算符的作用就是在堆内存中开辟一块区间。垃圾回收器(GC)主要针对堆内存。

16. 方法的重载overload

在同一个类中,方法名相同,参数不同(类型、个数或顺序不同)
注意:方法重载和返回值类型无关,和修饰符列表无关。

17.

实例变量:属于对象级的变量,有默认值。
局部变量:没有默认值,不可以不初始化。

18. 构造方法
构造方法可以完成对象的创建以及实例变量的初始化。

构造方法通过new来调用。
构造方法语法结构:(构造方法没有返回值)

 

当一个类中没有提供任何构造方法,系统默认为其提供一个无参构造(又叫 缺省构造器),当一个类中手动提供了有参构造方法,需要重写无参构造。
构造方法支持重载(重载override:同一个类中,方法名相同,参数列表不同。)不支持重写,因为构造方法不能被继承。

杜老师java基础

19.

方法有static修饰,叫静态方法,调用静态方法:类名.静态方法名();
没有static修饰,叫实例方法,实例对象的调用必须有对象的存在,调用实例方法:引用.实例方法名()。

20.空指针异常

导致空指针异常最根本的原因:空引用访问“实例相关的数据”,会出现空指针异常。

21.get方法和set方法格式

get方法和set方法都是实例方法,是对象级别的方法,通过"类名."的方式不能调用get方法和set方法。
只有方法修饰符列表中有static方法时,才能用"类名."的方式调用。

 
22. 封装的代码实现

第一步:属性私有:private;
第二步:每一个属性对外提供get与set方法,外部程序只能通过set方法修改,只能通过get方法读取,可以在set方法中设立关卡来保证数据的安全性。

23. static

所有static关键字修饰的都是类相关的,类级别的,都需要采用"类名."的方式访问。
static修饰的变量叫静态变量,static修饰的方法叫静态方法。
静态变量存储在方法区,不需要new对象,静态变量空间就已经开出来了。
实例变量存储在堆中。
局部变量存放在栈中。
在这里插入图片描述

变量分类:
根据声明的位置分为:局部变量(方法体中声明的变量),成员变量(方法体外声明的变量)
成员变量又能分为:静态变量,实例变量。

静态代码块语句:

 

一个类中可以有多个静态代码块,静态代码块在类加载时执行,并且只执行一次,在main方法执行之前执行。
静态代码块的作用?

  1. 不常用
  2. SUN公司给程序猿的一个特殊时刻/时机:类加载时机。(在哪年哪月哪日哪时哪分哪秒,哪个类加载到JVM中了)

(如果一个行为或属性 会因为对象的变化而变化,那么该行为或属性被视为对象级别的,应该定义为实例方法或属性。)

24. this关键字

一个对象就一个this,this是一个变量,是一个引用,this代表"当前对象",this存储在堆内存中的对象内部,this存储的内存地址指向自己的对象。this只能使用在实例方法中。
为什么this不能使用在静态方法中?因为静态方法的调用是通过"类名."的方式,不需要创建对象,而this指向当前对象,矛盾了。
this什么时候不能省略?在实例方法中,或者构造方法中,为区分局部变量和实例变量时,’‘this.’'不能省略。
语法的作用就是 代码复用,通过一个构造方法,调用另一个构造方法。

 
25. 继承

继承的作用:1.代码复用;2.有了继承机制,才有了后面的方法覆盖和多态机制。
父类中除了构造方法,其他方法和属性都被子类继承,private也被继承了但子类不能调用。

26. Object类

任何一个类,默认继承Object类。
Object类提供了哪些方法?toString(),equals()
System.out.println(引用);时,println()方法会自动调一个’‘引用.toString()’'的方法。
toString()方法返回对象在堆内存中的地址。

27. 覆盖/重写(override)

子类从父类继承的方法无法满足当前子类的业务需求,子类对父类方法进行重新编写,即为方法覆盖/重写。
构成重写的条件:

  1. 两个类必须有继承关系。
  2. 被重写的方法必须具有相同的返回值类型,方法名, 和 形式参数列表。
  3. 访问权限不能更低,只能更高。
  4. 重写之后的方法不能比之前的方法抛出更多的异常,只能更少。

注意事项:

  1. 方法重写只针对方法,与属性无关。
  2. 私有方法无法重写。(子类继承父类,父类私有方法不能重写)
  3. 构造方法无法被继承,所以不能被重写。
  4. 方法重写只针对实例方法,静态方法重写没有意义,因为多态和对象有关系。
  5. 方法重写与多态机制联合才有意义。
28. 向上转型 与 向下转型

向上/向下转型 两种类型必须存在继承关系。
向上转型:子——>父
向下转型:父——>子
当你访问的是子类特有的方法,就需要向下转型。

29. 多态

什么是多态?
多态指的是 父类型引用指向子类型对象。编译和运行有两种不同状态,包括编译阶段和运行阶段。
编译阶段:绑定父类的方法。
运行阶段:动态绑定子类型对象的方法。

30. instanceof运算符
  1. instanceof 可以在运行阶段动态判断引用指向的对象的类型;
  2. instanceof的语法:;
  3. instanceof运算符的运算结果只能是:true/false;
  4. c是一个引用,c变量保存了内存地址指向堆中的对象:
  5. 假设为true表示:c引用指向的堆内存中的java对象是一个Cat, 假设为false表示:c引用指向的堆内存中的java对象不是一个Cat。

instanceof可以有效避免ClassCastException 类型转换异常。

31. 多态在开发中的作用

多态在开发中的作用是降低程序的耦合度,提高程序的扩展力。

32. super关键字

在这里插入图片描述

  1. super能出现在实例方法和构造方法中;
  2. super的语法是:"super.’’ 和’‘super()’’;
  3. super不能使用在静态方法中;
  4. "super.’’ 大部分是可以省略的;
  5. "super.’’ 什么时候不能省略呢?当父类和子类中有同名属性,并且想从子类中访问父类的该属性,"super.’'不能省略。【补充:java怎么区分子类和父类的同名属性?表示当前对象的name属性,表示当前对象的父类型特征中的name属性】;
  6. ‘‘super()’’ 只能出现在构造方法第一行,通过当前的构造方法区调用父类中的构造方法,目的是创建子类对象的时候,先初始化父类型特征;
  7. '‘super()’‘和’‘this()’'不能共存,他们都是只能出现在构造方法第一行。

当一个构造方法的第一行既没有this(),又没有super()时,默认有一个super(),表示通过当前子类的构造方法调用父类的无参构造,所以必须保证父类的无参构造是存在的。
'‘this()’'表示通过当前构造方法去调用本类中的其他构造方法;
'‘super()’'表示通过子类的构造方法去调用父类的构造方法,因为有儿子对象 必须要把父亲造出来。

思考:
的作用?初始化当前对象的父类型特征。
super关键字代表了什么?super关键字代表"当前对象"的那部分父类型特征。例如,我继承了我父亲的一部分特征:双眼皮等。那么super就是指向这个双眼皮等特征。
指向的是this指向的内存空间中的 一块空间。

注意:super不是引用,super也不保存内存地址,super也不指向任何对象,super只代表当前对象内部那一块父类型的特征。

总结:
:访问父类属性
:访问父类方法
:调用父类构造方法

33. final关键字

final修饰的类无法被继承,final修饰的方法无法被重写,final修饰的局部变量一旦被赋值,则无法被重新赋值,只能赋一次值。如果这个变量是一个"引用",是一样的,也只能被赋一次值。
如 那么再次会报错,无法为final变量st赋值。即final修饰的引用只能指向一个对象,并且永远指向该对象。
final修饰的实例变量,系统不赋默认值,要求程序员必须手动赋值。
final修饰的静态变量一般添加static修饰为 static final,由static final修饰的变量成为常量,常量名全部大写,不同单词间下划线连接。如常量和静态变量都存储在方法区,都是在类加载时初始化。常量和静态变量类似,只不过常量不能修改。

34. 抽象类

抽象类无法实例化,无法new对象。
抽象类是类与类之间有共同特征,将这些共同特征提取出来,进一步抽象为抽象类。由于类本身是不存在的,所以抽象类无法创建对象/无法实例化。
abstract不可以被final修饰,因为抽象类就是用来被继承的,而加了final的类不能被继承。
抽象类的子类可以还是抽象类。
抽象类虽然无法实例化,但是抽象类有构造方法,这个构造方法供子类使用。
抽象类中不一定有抽象方法,如果类中有抽象方法,则该类一定是抽象类。
抽象方法:
一个非抽象的类继承了抽象类,必须实现/重写/覆盖抽象类中的抽象方法。

35. 接口

接口也是一种引用数据类型。,编译之后,接口也生成.class文件,接口支持继承并且支持多继承。
接口中只包含常量和抽象方法,接口中抽象方法定义时public abstract可以省略。接口中所有元素都是public修饰的。
接口中的方法都是抽象方法,所以接口中的方法不能有方法体。
接口中常量的public static final可以省略。
当一个非抽象的类实现接口,必须将接口中的所有抽象方法都重写/实现。
一个类可以同时实现多个接口,这种机制弥补了类只能单继承的缺陷。

36. 抽象类和接口的区别
  1. 抽象类是半抽象的,接口是完全抽象的
  2. 抽象类中有构造方法,接口中没有构造方法
  3. 类和类之间只能单继承,接口和接口间支持多继承
  4. 一个类可以实现多个接口,一个抽象类只能继承一个类
  5. 接口中只允许出现常量和抽象方法
37. Object类中的几个方法

版权声明


相关文章:

  • java基础字典表设计2024-10-17 14:10:04
  • JAVA并发基础的书籍2024-10-17 14:10:04
  • 从事软测试 需要c java 基础2024-10-17 14:10:04
  • java基础应用题2024-10-17 14:10:04
  • 30岁后零基础转行java2024-10-17 14:10:04
  • java基础封装概念和实例2024-10-17 14:10:04
  • java基础小项目实例2024-10-17 14:10:04
  • java数组的基础2024-10-17 14:10:04
  • java基础坐Java Swing的层次结构深入理解2024-10-17 14:10:04
  • java程序设计基础实验教程2024-10-17 14:10:04