java知识点复习

Posted 中二病没有蛀牙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java知识点复习相关的知识,希望对你有一定的参考价值。

JDK JRE JVM

JDK:
Java标准开发包,它提供了编译、运⾏Java程序所需的各种⼯具和资源,包括Java编译器、Java运⾏时环境,以及常⽤的Java类库等。

JRE:
Java运⾏环境,⽤于解释执⾏Java的字节码⽂件。

JVM
Java虚拟机,是JRE的⼀部分。负责解释执⾏字节码⽂件,是可运⾏java字节码⽂件的虚拟计算机

区别联系:(问答题会考可能)

JDK包含JRE,JDK 和 JRE 中都包含 JVM。JDK出了包含jre还包含⼀些常⽤开发⼯具和基础类库

JDK ⽤于开发,JRE ⽤于运⾏java程序

JVM 是 java 编程语⾔的核⼼并且具有平台独⽴性(不同的平台有不同的VM)

JVM的好处:一次编译,随处运行

javac: 编译 java源⽂件->class字节码⽂件(0,1)
java: 解释

基本语法

程序结构

一个源文件中最多只能有一个public类,其他类的个数不限,如果源文件中包含一个public类,它必须按该类名命名

Java应用程序的执行入口时main()方法。它有固定的书写格式:

public static void main(String args[]){..}

在这里插入图片描述

命名规范

包名,包名是全小写的名词,中间可以由点分隔开,例如:java.awt.event;

类名,首字母大写,通常由多个单词合成一个类名,要求每个单词的首字母也要大写,例如class WelcomeToJava;

接口名,命名规则与类名相同,例如interface Collection;

方法名,往往由多个单词合成,第一个单词通常为动词,首字母小写,中间的每个单词的首字母都要大写,例如:balanceAccount, isButtonPressed;

变量名,全小写,一般为名词,例如:length;

常量名,基本数据类型的常量名为全大写,如果是由多个单词构成,可以用下划线隔开,例如:int YEAR, int WEEK_OF_MONTH;如果是对象类型的常量,则是大小写混合,由大写字母把单词隔开。

标识符

在这里插入图片描述
不能以数字开头。
不能是Java中的关键字。
标识符不能是true,flase和null(尽管这三个不是关键字)

关键字

在这里插入图片描述
在这里插入图片描述

变量和常量

常量

JAVA常量就是在程序中固定不变的值,是不能改变的数据。例如数字1、字符“a”、浮点数3.2等。在Java中,常量包括整型常量、浮点数常量、布尔常量、字符常量等。

使用 final 关键字来定义一个常量,常量一旦初始化就不可以被修改。

变量

变量是程序中最基本的存储单元,其要素包括变量名变量类型作用域

每一个变量使用前必须要先声明,然后必须进行赋值,才能使用

分类:
按声明位置
局部变量:方法或语句块内部定义的变量
成员变量:方法外部、类的内部定义的变量

在类体内定义的变量称为成员变量,它的作⽤域是整个类
在⼀个⽅法或⽅法内代码块中定义的变量称为局部变量

  • 注意:
    类外面(与类对应的大括号外面)不能有变量的声明
    方法体内部声明的变量(包括形参)称为局部变量:方法体内部是指与方法对应的大括号内部
    在方法体外,类体内声明的变量称为成员变量

按所属类型
基本数据类型变量(8种)
引用数据类型变量

在这里插入图片描述
在这里插入图片描述

数据类型

在这里插入图片描述
boolean类型数据只允许取值true或false,不可以0或非0的整数替代true和false,这点和C语言不通

Java字符采用Unicode编码,每个字符占两个字节,因而可用十六进制编码形式表示

java中的char一定是无符号的,不允许用unsigned char修饰

基本类型转换:

boolean类型不可以转换为其他的数据类型

整型、字符型、浮点型的数据在混合运算中相互转换,转换规则:
容量小的类型自动转换为容量大的数据类型,数据类型按照容量大小排序为:
byte,short,char->int,->long->float->double
byte,short,char之间不会互相转换,三者在计算时首先转换为int型

容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造成精度降低或溢出

有多种类型的数据混合运算时,系统首先自动将所有数据类型转换为容量最大的那一种数据类型,然后在进行计算

实数常量默认为double,整数常量默认为int

数组

数组初始化
在这里插入图片描述
Java语言中声明数组时不能指定其长度

输入输出

输⼊
 Scanner s=new Scanner(System.in);
 s.nextInt()
 s.nextLine()
 s.nextFloat()
 scanner.next()
 输出
System.out.println("XX"

运算符与语句

运算符

左移<<
"a<<b; "将二进制形式的a逐位左移b位,最低位空出的b位补0

带符号右移
"a>>b; "将二进制形式的a逐位右移b位,最高位空出的b位补原来的符号位

无符号右移
"a>>>b;"将二进制形式的a逐位右移b位,最高位空出的b位补0

优先顺序:
在这里插入图片描述

语句

条件分支语句

  1. if
    else if
    else

  2. switch

switch(XX){ //java特有 枚举 short byte C语⾔:字符,int
case 1 : XX ;break;
case 2: XX ;break;
default(可有可⽆): XX break;
}

switch表达式的返回值必须是下述几种类型之一:int, byte, char, short

case子句中的值必须是常量,且所有case子句中的值应是不同的;

循环语句

  1. while
  2. for
  3. do while
  4. for each

类与对象

面对对象三⼤特征:封装、继承、多态

  1. 封装
    通过 private、default 、protected、 public 关键字实现属性或⽅法的封装, 仅对外提供公共访问⽅式。
    “⾼内聚,低耦合”
  2. 继承
    实现数据项和⽅法的隐藏
    实现隐藏隔离,允许外部对类做有限的访问,开发者可以⾃由的改变类的内部实现
    提⾼了代码的重⽤性
  3. 多态
    ⼀个对象变量可以指向多种实际类型对象的现象被称为“多态”
    三个必要条件:继承、⽅法的重写、⽗类⼸|⽤指向⼦类对象
    多态的好处:
    提⾼了代码的维护性(继承保证);提⾼了代码的扩展性
    Java中多态的实现⽅式:接⼝实现,继承⽗类进⾏⽅法重写,同个类中进⾏⽅法重载。⽗类⼸|⽤指向⼦类对象

类是用于描述同一类型的对象的一个抽象的概念,类中定义了这一类对象所应具有的静态和动态属性

类的定义包括:类声明,类体

类可以看成一类对象的模板,对象可以看成该类的一个具体实例

对象可以看成是静态属性(成员变量)和动态属性(方法)的封装体

在这里插入图片描述
对象的创建和使用

  • 必须使用new关键字创建对象
  • 使用对象(引用).成员变量或来引用对象的成员变量
  • 使用对象(引用).方法(参数列表)来调用对象的方法
  • 同一类的每个对象有不同的成员变量存储空间
  • 同一类的每个对象共享该类的方法

构造方法

作用:主要⽤来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符⼀起使⽤在创建对象的语句中。

注意 :

  • ⼀个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们,即构造函数的重载

  • 使用new+构造方法创建一个新的对象

  • 构造函数的名字必须和所在类名字完全相同

  • 构造函数与类同名且没有返回值

  • 如果没有编写指定构造函数时,编译会自动添加无参数的构造函数

  • 特别: 构造函数不能用final,static,abstract修饰
    为什么?
    1.final修饰函数的主要目的是避免函数被重写,构造器不是通过继承得到的,所以没有必要把它声明为final的。
    2.同理,一个抽象的构造器将永远不会被实现,所以它也不能声明为abstract的。
    3.构造器总是关联一个对象而被调用,所以把它声明为static是没有意义的。

重载与重写

方法的重载是指一个类中可以定义有相同的名字,但参数不同的多个方法。
调用时,系统会根据不同的参数表选择对应的方法

重载:

  1. 必须载同⼀个类中
  2. ⽅法名相同
  3. ⽅法的参数的个数、顺序或类型不同
  4. 与⽅法的修饰符和或返回值没有关系

重写:

  1. 重写的⽅法必须要和⽗类⼀模⼀样(包括返回值类型,⽅法名,参数列表)
  2. 重写的⽅法可以使⽤@Override注解来标识
  3. ⼦类中重写的⽅法的访问权限不能低于⽗类中⽅法的访问权限
    权限修饰符 : private < 默认(什么都不写) < protected < public
    在这里插入图片描述
    在这里插入图片描述

常用关键字

this

Java中为解决变量的命名冲突和不确定性问题,引⼊关键字this代表其所在⽅法的当前对象的引⽤,使用this可以处理方法中成员变量和参数重名的情况

  1. 构造⽅法中指该构造器所创建的新对象;
public class B{
 	A a; //A是⼀个类
  	public B(A a){
 		this.a = a;
 	}
}
  1. ⽅法中指调⽤该⽅法的对象;
 public class Baby{
 	public void wakeUp(){
 		System.out.println("宝宝醒啦");
 	}
 	public void eat(){
 		this.wakeUp();
 		System.out.println("吃东⻄");
 	}
 }
  1. 在类本身的⽅法或构造器中引⽤该类的实例变量(全局变量)和⽅法
 public void setName(String name){
 	this.name=name
}

this只能在类中的⾮静态⽅法中使⽤,静态⽅法和静态的代码块中绝对不能出现this
原因:static⽅法在类加载时就已经存在了,但是对象是在创建时才在内存中⽣成

super关键字

  1. super关键字主要存在于⼦类⽅法中,⽤于指向⼦类对象中的⽗类对象;可以访问⽗类的属性、函数以及构造函数。

  2. ⼦⽗类存在着同名的成员(包括变量和⽅法)时,在⼦类中默认是访问⼦类的成员,可以通过super关键字指定访问⽗类的成员;

  3. 默认会先调⽤⽗类⽆参的构造⽅法,可以通过super关键字指定调⽤⽗类的构造⽅法。

static 关键字

在类中,用static声明的成员变量为静态成员变量,它是该类的公用变量,在第一次使用时被初始化,对应该类的所有对象来说,static成员变量只有一份

  • 在类的定义体中、方法的外部可包含static语句块

  • static语句块仅在其所属的类被载入时执行一次

  • 用static声明的方法为静态方法,在调用方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员
    静态方法不再是针对某个对象调用,所以不能访问非静态成员

  • 被static修饰的变量属于类变量,可以通过类名.变量名直接引⽤,⽽不需要new出⼀个类来

  • 被static修饰的⽅法属于类⽅法,可以通过类名.⽅法名直接引⽤,⽽不需要new出⼀个类来

类的成员变量包括实例变量和类变量,实例变量在不同对象互不相同,类变量被所用对象共享。

final

final修饰的类,不能被继承

Final修饰的⽅法 不能被重写,但是⼦类可以⽤⽗类中final修饰的⽅法

修饰变量:

  1. 基本类型变量使⽤final修饰了就不可变了

  2. 对于引⽤类型变量被final修饰了:引⽤变量引⽤不可变,但是引⽤对象的内容可以改变。

package语句作为java源文件的第一条语句,指明该文件中定义的类所在的包(若缺省该语句,则指定为无名包)

JDK包介绍
java.lang——包含一些java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能

java.awt——包含了构成抽象窗口工具包(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)

java.applet——包含applet运行所需的一些类

java.net——包含执行与网络相关的操作的类

java.io——包含能提供多种输入/输出功能的类

java.util——包含一些使用工具类,如定义系统特性,使用与日期日历相关的函数

打包命令:jar –cvf xx.jar .

访问控制

在这里插入图片描述

子类和继承

java中使用extends关键字实现类的继承机制

通过继承,子类自动拥有了基类(superclass)的所有成员(成员变量和方法)

Object类是所有Java类的最高层父类

java只支持单继承,不允许多继承

一个子类只能有一个基类,一个基类可以派生出多个子类

多态

实现继承
方法重写
父类引用指向子类对象
在这里插入图片描述

集合

多线程

线程和进程的区别
每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销
线程可以看成是轻量级的进程,同一类线程共享代码和数据空间,每个线程都有独立的运行栈和程序计数器(PC),线程切换开销小

多进程:在操作系统中能同时运行多个任务(程序)
多线程:在同一应用程序中有多个顺序流同时执行

问答题

  • 面向对象的特征有哪些方面 ?
    答:主要有以下四方面:
    1.抽象:
    抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
    2.继承:
    继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
    3.封装:
    封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
  1. 多态性:
    多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

  • String是最基本的数据类型吗?
    答:基本数据类型包括byte、int、char、long、float、double、boolean和short。(8个)
    java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类

  • int 和 Integer 有什么区别?
    答:Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。

  • 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
    答:可以。必须只有一个类名与文件名相同

以上是关于java知识点复习的主要内容,如果未能解决你的问题,请参考以下文章

Java容器(ListSetMap)知识点快速复习手册(下)

Java知识面试题复习Java概述

Java知识面试题复习Java概述

Java容器(ListSetMap)知识点快速复习手册(上)

java小项目——抽奖系统

动态SQL基础概念复习(Javaweb作业5)