Java期末复习零碎知识点(《Java2实用教程》题库整理)

根据《Java2实用教程》题库系统进行整理

将做题过程中易错的知识点概念整理了一下
由于时间有限,更新进度比较慢,剩下的章节会慢慢更新哈
目前正在学习中,能力有限,所以文章中难免有小错误,欢迎指正~
如果需要题库可以私聊我,各位小伙伴们加油!!ヾ(◍°∇°◍)ノ゙


第一章

  • java语言的主要贡献者是James Gosling

  • java 源文件的扩展名是.java

  • 编译java源文件得到的 字节码文件的扩展名 是.class

  • 必须用文本编辑器编写源文件

  • java编译器位于java安装目录的\bin文件夹中,名字是javac.exe


  • java源文件是由若干个书写形式相互独立的类组成

  • java源文件中可以有多个类可以没有主类

  • 如果源文件中有多个类最多有一个是public类,也可以没有 public类

  • java中如果有主类,不一定是public类

  • java 应用程序必须要有主类,但是可以不是public类

主类:
类的名字和文件名一致,并且包含main函数的类
是程序的入口,要让JVM能找到执行的入口,必须:

  • 类名字和文件名一致
  • 包含public static void main(String[] args) {}
  • 注意该类并不需要一定有public修饰

java源文件命名:
源文件的后缀必须是 .java
如果源代码里定义了一个 public 类,则该源文件的主文件名必须与该 public 类的类名相同(如果有一个class没有public但是又main,此类是主函数,但是命名依旧与public类的类名相同)

如果 Java 程序源代码里没有定义任何 public 类,则主文件名可以是任意的(文件中任意一个类)

可以参考文章:Java中的主类以及文件的命名


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

java编程风格
Allmans风格和Kernighan风格。

Allmans风格又称为“独行风格”,即左右大括号("{","}")各自独占一行
Kernighan风格又称为“行尾风格”,即左大括号("{")在上一行的行尾,而右大括号("}")独占一行。

在这里插入图片描述

第二章

基本类型 所占字节(位) 包装类(java.lang) 最小值 最大值
byte 1 Byte -128 127
short 2 Short -32768 32767
int 4 Integer -2147483648 2147483647
long 8 Long -9223372036854775808 9223372036854775807
float 4 Float 1.4E-45 3.4028235E38
double 8 Double 4.9E-324 1.7976931348623157E308
char 2 Character 0 65535
boolean 1/8字节(1位) Boolean
  • 8种基本数据类型:boolean、byte、short、int、long、float、doube、char

  • 一维数组声明:int[] a 和int a[] 都可以

  • int[] a,b声明了两个int型的一维数组

  • int a[],b 声明了一个int型一维数组a和一个int型变量b

  • int[] a,b[]声明了一个1int型的一维数组a和一个int型的二维数组b

  • float a[20]是错误的数组声明

  • int[] a = new int[2],a[0]、a[1]、a[2]的值都是0

  • int a[][] = new int[6][4]; a.length = 6

  • boolean f = true是正确的变量声明(TRUE是错误的)

  • 小数后面加F或f表示float型的常量,否则默认为double型

  • float foo = 0x123;是正确的的float变量声明(0x表示整数,整数→浮点数,向上转型不会溢出,因此可以【float = 1.3,1.3默认为double,double→float向下转型,可能会导致溢出,因此float赋初始值应该写成float = 1.3f】)

  • float x = ‘a’; //float = 97.0

  • char ch = 97;是正确的char变量声明(char = ‘’ or char = ascii)//ch = ‘a’

  • char在Unicode表中的位置范围是0~65535

  • \u是转义字符,表示后面跟一个十六进制数
    char ch = '\u777f’是正确的char变量声明
    char ch = '\u777g’是错误的char变量声明

  • 1 e1是10的1次幂(1次方),是double类型

  • 1 e2 f 是10的2次幂(2次在这里插入图片描述
    方),是float类型

  • 数组是相同类型的数据元素按顺序组成的一种复合数据类型,因此两个相同类型的数组如果具有相同的引用,它们就有完全相同的元素

  • 关键字:int、import、extends

  • _int可以作为标识符

  • _class能作为标识符

  • java标识符可参考文章:Java标识符

第三章

  • 表达式10>20-7的结果为false
  • 关系、逻辑运算符的运算结果是boolean类型
  • 逻辑运算符的操作元必须是boolean型数据
  • for(表达式1;表达式2;表达式3)语句中表达式2 以及 if(表达式)中表达式的值必须是boolean型数据如果if语句中是boolean的赋值语句,即f = true,则先对f进行赋值,f作为条件进行判断
  • 12 = 12是非法的表达式
  • 0.4 == 0.4f 结果为false
  • ‘苹’+‘果’的数据类型是int
    【将两个 char 类型的操作数转变为了 int 类型,然后再进行求和计算,返回的是int】

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

第四章

  • 类是java语言中最重要的“数据类型”,类声明的变量被称作对象变量,简称对象(简单来说,类所声明的变量称为对象)
  • 如果在类中定义了构造方法,Java编译器将不再提供默认的构造方法, 构造方法可以重载
  • 类体中声明成员变量是为了体现对象的属性
  • 类体内容中定义的非构造方法是为了体现对象的行为
  • 类体中成员变量的声明和方法的定义可以交叉进行
  • 当用new运算符和构造方法创建对象时的步骤:
    ①为成员变量分配内存,并指定默认值
    ②初始化成员变量,即用户声明成员变量时给定的默认值
    ③执行构造方法
    ④计算出一个引用值

  • 构造方法没有类型
  • 构造方法可以重载

  • 类中的类方法(static)可以用类名直接调用,只能操作类变量(static变量),不可以操作实例变量
    类中的
    实例方法
    不可以用类名直接调用,可以操作类变量(static变量),也可以操作实例变量
    【类方法是static修饰的方法,实例方法就是普通的成员方法】

  • java类的成员变量有2种:
    ①被static关键字修饰的变量,叫类变量或者静态变量
    ②没有static修饰,为实例变量
  • 成员变量在整个类内部都有效,其有效性与它在类中的书写先后位置无关
  • 类中的实例变量用该类创建对象的时候才会被分配内存空间
  • 在方法中定义的局部变量在该方法被执行时分配内存
  • 类中的类变量(static)该类被加载到内存时(即使该类为创建对象),就会被分配到内存空间
  • 一个类可以把某个对象作为自己的一个成员变量
  • 分配给对象的变量被习惯地称作对象的实体
  • 方法中参数的名字不可以和方法中声明的局部变量的名字相同
  • 成员变量的名字可以和局部变量的相同成员变量与局部变量
  • 成员变量有默认值
    【boolean默认值为false;byte、short、int、long为0,字符型(char)为’\u0000’(空字符),浮点型(float、double)为0.0,引用类型(String)为null】
  • 局部变量没有默认值
    【未初始化的局部变量不可以使用,局部变量在使用前必须要有值】

  • this关键字代表某个对象
  • this关键字出现在实例方法中时,就代表正在调用该方法的当前对象
  • this可以出现在实例方法和构造方法中,不可以出现在类方法(static方法)中

  • java应用程序由若干个类构成,这些类可以在同一个源文件中,也可以分布在若干个源文件中

  • 源文件最多包含一条包语句(package),也可以没有
    【package 语句是Java源文件的第一条语句,指明该源文件定义的类所在的包。一般格式为:package 包名】

  • 源文件可以有多条import语句

  • 一个java源文件默认有**“import java.lang.*;”**语句


  • 命名规则
  • 习惯将方法名及变量名的首字母小写

  • 重载:一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同
  • static方法可以重载
  • 构造方法可以重载

  • 不可以是protected、private类
  • 友好类:class Test
    public类:public class Test
  • 构造方法的访问权限可以是public、protected、private或者友好的
  • 方法中声明的局部变量不可以用访问修饰符public、protected、private修饰,不可以用static修饰

  • Float是java.lang包中一个类的名字,而float是java的关键字,用来声明float基本类型变量

  • 一个类声明的两个对象如果具有相同的引用,二者就具有完全相同的变量(实体)

  • 没有实体的对象称作空对象,应当仔细检查,避免使用空对象,即让一个空对象去调用方法产生行为

  • 组合关系也叫has a,属于弱耦合关系(类与类之间)

  • 编译器不提示程序使用了空对象(让一个空对象去调用实例方法),但程序在运行时会出现NullPointerException异常

  • 在java中,方法的所有参数都是“传值”的,也就是说,方法中参数变量的值是调用者指定的实参值的拷贝

  • 当方法被调用时,参数被分配内存空间,调用者向参数专递值(即方法被调用时,参数变量必须有具体的值

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

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

第五章

  • 一个非final类可以有多个子类
  • 类声明Class A 与 Class A extends Object 是等价的

  • 如果子类和父类不在同一个包中,子类不继承父类的友好成员
修饰符 子类 其他包
public
protected
default(默认)
private(封装)
  • 可以用public、protected、private修饰构造方法
  • 方法的修饰(如果有),例如public、abstract,必须放在方法类型的前面,不可以插在方法类型和方法名字之间
  • 如果一个类的所有构造方法的访问权限都是private的,那么意味着这个类不能有子类
  • 一个类的private方法不能在其他类中被使用,但子类的构造方法中一定会调用父类的某个构造方法
  • 子类重写父类的方法时,不允许降低方法的访问权限,但可以提高访问权限
    (访问限制修饰符按访问权限从高到低:public、protected、友好的、private)

  • java.lang包中的Object类是~~所有其他类的父亲~(是所有其他类的根类,子父之间直接extends)
  • 所谓子类继承父类的成员变量作为自己的一个成员变量 ,就好像他们是在子类中直接声明一样,可以被子类中自己定义的任何实例方法操作
  • 如果在子类中想使用被子类隐藏的实例成员变量or实例方法(一般都是继承自父类,然后重写),需要使用关键字super
  • 子类可以声明和父类的成员变量同名的成员变量
  • 子类可以定义和父类方法同名的方法
    子类是否能够继承父类的构造方法
  • 构造方法是一个类独有的方法不会被子类继承,子类不继承父类的构造方法,但是可以重载
  • 子类不继承父类的构造方法 super是调用,调用和继承两码事)
    但是子类在实例化对象时,如果子类的构造器没有显示的调用父类的构造器,则将自动调用父类默认的构造器(无参),相当于默认省略了super()
  • 在子类的构造方法中,没有显示地写出super关键字来调用父类的某个构造方法,那么编译器默认地有:
    super();调用父类的无参数的构造方法(如果父类没有这样的构造方法,代码将出现编译错误)
  • super关键字形成的语句必须是子类构造方法中的第一条语句
  • 子类和父类没有必须在一个包中
  • 多态性就是指父类的某个方法被子类重写时,可以各自产生自己的功能行为
  • 子类声明的成员的变量名字和从父类继承来的成员的变量名字相同,子类就会隐藏掉所继承的成员变量
  • 子类重写or新增的方法也能直接操作被子类隐藏的成员变量(×)
  • 子类继承的方法所操作的成员变量一定是被子类继承or隐藏的成员变量
    成员变量的隐藏

成员变量的隐藏:
如果在子类中对从父类继承来的成员变量进行重新定义,即出现了子类变量对父类变量的隐藏。
所谓隐藏是指子类拥有两个相同名字的变量,一个是继承自父类,另一个是由自己定义的。

子类执行自己定义的方法时,如果操作该变量,所操作的是自己定义的变量,而把继承自父类的变量“隐藏”起来。

子类执行从父类继承的操作时,如果操作该变量,所操作的是继承自父类的成员变量。

  • 子类可以用super关键字(覆盖,调用构造方法,访问父类成员)调用父类中的方法

  • 子类可以用super关键字调用父类的父类中的方法


  • static方法也可以同时是final方法

  • 任何一个类都可以有多个子类是错误的,还要考虑修饰符,final、static没有子类,因为不能被继承

  • 不可以同时用final和abstract修饰同一个方法、同一个类

  • 不允许同时用static(类方法,不允许被重写)和abstract修饰同一方法

  • abstract类中,不一定要有abstract方法,可以有非abstract方法,该方法可以用final修饰

  • 不能用 final 、 static 修饰构造方法

  • 子类在方法重写时,不可以把父类的类方法(static)重写为实例方法,也不可以把父类的实例方法重写为类(static)方法

  • 如果一个类中有abstract方法,这个类必须是abstract类

  • 如果子类是abstract类,允许子类将父类的非abstract方法重写为abstract方法

  • abstract类不可以是final类

  • abstract类声明的对象可以成为子类对象的上转型对象

  • 不可以用new运算符+abstract类的构造方法创建对象

  • 如果一个抽象类是某个抽象类的子类,那么它可以将父类的abstract方法重写为非abstract方法,也可以不重写这个abstract方法、直接继承


上转型:声明一个父类的引用指向子类的实例化对象
上转型对象:父类

  • 子类对象的向上转型对象不能操作子类新增的成员变量(失掉了这部分属性),不能调用子类新增的方法(失掉了一些行为)
  • 子类对象的上转型对象 操作子类继承的方法or子类重写的实例方法,其作用等价于子类对象去调用这些方法
  • 面向抽象编程,是指当设计某种重要的类时,不该让类面向具体的类,而是面向抽象类(即所设计类中的重要数据是抽象类声明的对象,而不是具体类声明的对象)
  • 如果成员变量被修饰为final的,就是常量,用户在声明时必须指定该常量的值
  • 除了java.lang.Object类外,任何类都有且仅有一个父类

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

第六章

接口有关知识点参考:接口详解

  • 一个源文件中既可以定义接口(interface)也可以定义类(class)
  • 使用关键字interface定义接口
  • 接口可以理解为一种特殊的类,里面全部是由全局常量公共的抽象方法所组成
  • 接口中只有常量,没有变量
  • 接口中只能有abstract方法,不能有非abstract方法(JDK7版本)
  • 接口中可以有abstract方法default修饰的带方法体的方法(JDK8版本)与上一条是不是有冲突?default为非abstract方法
  • 使得接口可以存在具体的方法,前提是方法需要被default或static关键字所修饰
  • 不可以用final、protected修饰接口以及接口中的方法
  • 能用public修饰接口,接口中的方法的访问权限一定都是public(允许省略public)
  • 接口默认是public接口(×) why,默认是友好接口?
  • 接口中的方法不可以用private、protected修饰,可以用abstract修饰接口

  • 接口中 void f();方法声明等价于public abstract void f();即方法默认是public访问权限的abstract方法
  • 接口中 int x =10等价于 public static final int x = 10,即默认是常量
  • 一个接口可以有多个父接口(即继承多个接口),例如:interface A extends Com1,Com2
  • 类使用关键字implements 实现一个或多个接口,类声明class A implements B,C意思是A类实现B和C两个接口
  • 类声明class A extends B implements C 意思是A类是B类的子类,同时实现C接口
  • 一个类不能重复实现同一个接口,例如class A implements B,B
  • inferfce A extends B 意思是A是B的子接口
  • public接口可以被任何一个类实现
  • final类可以实现接口(final是类,类可以实现接口)
  • public类并不可以实现任何友好接口
  • 如果一个类和友好接口在同一个包里,就允许它实现该接口

  • 如果一个非abstract类实现某个接口,该类必须重写全部abstract方法
  • 一个类声明实现一个接口,但没有重写接口中的所有方法,那么这个类必须是抽象类,也就是说抽象类既可以重写接口中的方法也可以直接拥有接口中的方法
  • 子接口将继承父接口中的全部方法和常量
  • 可以用接口名直接访问接口中的常量
  • 接口也是Java中一种重要数据类型,用接口声明的变量称做接口变量
  • 接口变量中可以存放实现该接口的类的实例的引用(对象的引用)
  • 可以把一个int数据赋值给接口变量 (x)
  • 实现某一接口的类创建的对象的引用赋值给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口方法
  • 接口变量中可以存放任何对象的引用 (×)
  • 接口中只可以有常量,不能有变量。abstract类中既可以有常量也可以有变量
    【 abstract类中既可以有常量也可以有变量】
  • 接口中的常量必须指定初值
    接口中的常量可以不指定初值,编译器会提供默认值 (×)】
  • 类和它所实现的接口不一定在同一个包里

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

第七章

第八章

  • String类是final 类,不可以有子类
  • “\hello"是错误的字符串常量,”\hello"是正确的字符串常量
  • 表达式"\t\nABC".length()的值是5【\t、\n算分别算一个字符】

  • 表达式"A".compareTo(“B”)的值是负数
    【.compareTo(),比较大小,前者>后者→正数,前者<后者→负数,前者=后者→0】
  • 表达式"I love this game".contains(“love”)的值是true
    【.contains(),判断是否包含某字符串】
  • 表达式"RedBird".indexOf(“Bird”)的值是3
    【.indexOf(),返回目标字符串下标索引,若不存在则返回-1】
  • Integer.parseInt(“12.9”);会触发NumberFormatException异常
    【Integer.parseInt()字符串→整数,12.9为浮点数】
  • 表达式"D:/java/book/E.java".lastIndexOf("/")的值是12
    【.lastIndexOf(),返回目标字符出现的最后索引位置】
  • 表达式"89762.34".matches("[0-9.]+")的值是true
    表达式"3.14".matches("[0-9]+[.]{1}[0-9]+")的值是true
    matches() ,返回是否匹配指定的字符串】
  • 表达式"89762.34".startsWith(“89”)的值是true
  • 表达式"89762.34".endsWith(“34”)的值是true

  • 表达式"java".equals(“java”)的值是true
    【.equals(),判断值是否相等,区别于= =(判断地址),表达式 new String(“abc”)== "abc"的值是false(地址不同)】
  • 表达式"bird".contentEquals(“bird”)的值是true
    equals()和contentEquals()方法
  • 表达式"Bird".equalsIgnoreCase(“bird”)的值是true
    【.equalsIgnoreCase(),忽略大小写判断是否等值】
  • 表达式new String(“abc”).contentEquals (“abc”)的值是true
  • 表达式new String(“abc”).equals (“abc”)的值是true
  • 表达式"abc" == "abc"的值是true
  • 表达式new String(“abc”) == new String(“abc”)的值是false

  • StringTokenizer对象的nextToken()方法返回一个String对象
  • StringTokenizer对象的countTokens()方法返回一个int型数据
  • String对象的字符序列是不可修改的
  • StringBuffer对象的字符序列是可修改的

  • Random对象的nextInt(int n)方法随机返回[0,n)之间的一个整数

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

猜你喜欢

转载自blog.csdn.net/m0_50609545/article/details/118017091