Java知识点

发布时间 2023-04-21 20:16:34作者: 叶小希

印度尼西亚爪哇岛盛产咖啡闻名

JavaSEJava平台标准版)主要应用于桌面应用程序的开发,是Java技术的核心   EEJava平台企业版)主要应用于网络程序和企业级应用的开发,是Java语言的核心   MEJava平台微型版)主要应用于手机游戏等消费类设备和嵌入式设备中

 

Java虚拟机包括JVM解释器,JVM指令系统,寄存器,栈,存储区和碎片回收区

 

Java应用程序的基本结构:程序框架, main ()方法的框架,填写的代码。

 

枚举类型是指字段由一系列固定的常量组成的数据类型。枚举类型字段用大写字母表示,使用关键字enum声明枚举类型。枚举类的类体中可能包括方法和其他字段。当编译器创建一个枚举时,它会自动添加一些专门的方法。

 

Java 变量类型

  • 类变量:独立于方法之外的变量,用 static 修饰。
  • 实例变量:独立于方法之外的变量,不过没有 static 修饰。
  • 局部变量:类的方法中的变量。

Java 局部变量

  • 局部变量声明在方法、构造方法或者语句块中;
  • 局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁;
  • 访问修饰符不能用于局部变量;
  • 局部变量只在声明它的方法、构造方法或者语句块中可见;
  • 局部变量是在栈上分配的。
  • 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。

 

实例变量

  • 实例变量声明在一个类中,但在方法、构造方法和语句块之外;
  • 当一个对象被实例化之后,每个实例变量的值就跟着确定;
  • 实例变量在对象创建的时候创建,在对象被销毁的时候销毁;
  • 实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息;
  • 实例变量可以声明在使用前或者使用后;
  • 访问修饰符可以修饰实例变量;
  • 实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见;
  • 实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;
  • 实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObjectReference.VariableName

 

类变量(静态变量)

  • 类变量也称为静态变量,在类中以 static 关键字声明,但必须在方法之外。
  • 无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。
  • 静态变量除了被声明为常量外很少使用,静态变量是指声明为 public/privatefinal static 类型的变量。静态变量初始化后不可改变。
  • 静态变量储存在静态存储区。经常被声明为常量,很少单独使用 static 声明变量。
  • 静态变量在第一次被访问时创建,在程序结束时销毁。
  • 与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为 public 类型。
  • 默认值和实例变量相似。数值型变量默认值是 0,布尔型默认值是 false,引用类型默认值是 null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。
  • 静态变量可以通过:ClassName.VariableName的方式访问。
  • 类变量被声明为 public static final 类型时,类变量名称一般建议使用大写字母。如果静态变量不是 public final 类型,其命名方式与实例变量以及局部变量的命名方式一致。

 

 

变量的作用域是指变量的使用范围,只有在使用范围内才可以调用变量。由于作用域的不同,变量类型有类变量,局部变量,方法参数变量和异常处理参数变量之分。

 

基本数据类型可分为:整型,浮点型,布尔型,字符型,基本数据类型是构造语言的最基本的要素。

引用数据类型数组接口

 

基本数据类型以及对象的引用变量是存储在栈内存中 ;而对象本身的值或者说 new 创建的对象和数组是存储在堆内存中

 

封装

封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。

封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。

要访问该类的代码和数据,必须通过严格的接口控制。

封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。

适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。

实现Java封装的步骤

1. 修改属性的可见性来限制对属性的访问(一般限制为private),

2. 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问访问类中私有成员变量的类都要通过gettersetter方法

 

继承(P83)

子类访问父类成员(P90)super调用父类中的重写方法

 

Java 方法

在前面几个章节中我们经常使用到 System.out.println(),那么它是什么呢?

  • println() 是一个方法。
  • System 是系统类。
  • out 是标准输出对象。

这句话的用法是调用系统类 System 中的标准输出对象 out 中的方法 println()

那么什么是方法呢?

Java方法是语句的集合,它们在一起执行一个功能。

  • 方法是解决一类问题的步骤的有序组合
  • 方法包含于类或对象中
  • 方法在程序中被创建,在其他地方被引用

方法的命名规则

1.方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。

2.下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。

 

方法

对象执行操作的行为称为类的方法

定义方法的格式

[访问修饰符] 返回类型 方法名称参数类型 参数名1,参数类型 参数名2…){

方法包含一个方法头和一个方法体。下面是一个方法的所有部分:

  • 修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
  • 返回值类型 方法可能会返回值。returnValueType 是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType 是关键字void
  • 方法名:是方法的实际名称。方法名和参数表共同构成方法签名。
  • 参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
  • 方法体:方法体包含具体的语句,定义该方法的功能

 

 

对象(P65)(P79 this、super 关键字

 

类只有通过对象才可以使用而在开发中应该先产生类之后再产生对象类不能直接使用对象可以直接使用

java程序会创建多个对象对象间通过调用方法进行交互和通信(方法可以理解为对象可以做的行为)。通过做这些对象的交互工作程序能够执行各种各样的任务,,一旦一个对象已经完成了它应该完成的工作它的资源就会被回收以供其他对象调用

创建对象

类是一类事物的集合和抽象代表这类事物共有的属性和行为一个对象称为类的一个实例是类一次实例化的结果类的对象可以调用类中的成员如属性和方法

类是对象的模板可以从一个类创建一个对象每一个语句都创建一个对象并将其赋予一个变量每个语句都由声明实例化初始化组成

声明:声明一个对象,包括对象名称和对象类型,赋值符号(=)左边的代码都是变量声明

实例化关键字new用来创建一个新的对象

初始化:new运算符后面跟一个构造方法的调用由构造方法来初始化新的对象

1、 声明一个变量指向一个变量

数据类型+变量名称 int a;

声明一个引用类型的变量+引用变量 Point originOne;

并不会生成一个变量要真正的生成对象需要使用new运算符在使用originOne

之前给它赋一个对象

2、 实例化一个类

当使用new运算符来实例化一个类时通过为新的对象分配内存返回一个引用来实现。new运算符还调用对象的方法

new运算符所返回的引用不一定要赋值给变量它也可以直接在一个表达式中使用不过这样创建的对象不可以重复使用因为没有保存对它的调用

在类初始化完成之后,就可以进行类的实例化了。

 

类实例化指的是创建一个对象的过程,这个过程中会在堆中开辟内存,将一些非静态的方法,变量存放在里面。在程序执行的过程中,可以创建多个对象,既多次实例化。每次实例化都会开辟一块新的内存。

new Object()

3、 初始化一个对象

如果一个类有多个构造器那么这些构造器必须有不同的签名,Java编译器基于参数的数量和类型来区分不同的构造器类至少有一个构造器如果一个类没有显式地声明一个构造方法,java编译器会自动提供一个无参构造器称为默认构造器”。这个默认构造方法会调用它的父类的无参构造器

使用对象

java中要引用对象的属性和方法需要使用“.” 。

格式如下

         对象名.属性        对象名.方法名()

1、 引用一个对象的字段

通过调用对象的名称来访问对象的字段在同一类中可以使用简洁的名称来引用字段

如果在对象类的外部必须使用一个对象引用或表达式后面跟一个圆点(.)运算符再跟一个简洁字段名

2、 调用一个对象的方法

还可以使用一个对象的引用来调用方法对象名称.方法名称参数列表); 

对象名称.方法名称();

成员方法类成员主要包含 成员方法和成员变量

1、 带参数的方法

带参数的方法可以接受用户输入的内容创建方法时定义的参数叫做形式参数调用方法时传入的参数叫做实际参数

2、 方法重载

方法重载是指在一个类中定义多个同名的方法但要求每个方法具有不同的参数类型或参数个数

特点在同一个类中方法名相同参数的个数或类型不同方法的返回值不能作为判断方法之间是否构成重载的依据

优点是对原有方法的一种升级可以根据参数的不同才用不同的实现方法而且不需要编写多个名称简化了类调用方法的代码

面向对象的优点

1、 与人类思维习惯一致面向对象的思维方式是从人类考虑问题的角度出发把人类解决问题的思维过程转变为程序能够理解的过程面向对象程序设计使用来模拟现实世界中的抽象概念对象来模拟现实世界中的实体从而用计算机解决现实问题

2、 信息隐藏,提高了程序的可维护性和安全性:封装实现了模块化和信息隐藏,即将类的属性和行为封装在类中,这保证了对它们的修改不会影响到其他对象,利于维护。同时,封装使得在对象外部不能随意访问对象的属性和方法,避免了外部错误对它的影响,提高了安全性。

3、 提高了程序的可重用性:一个类可以创建多个对象实例,体现了重用性。

 

import 语句

Java 中,如果给出一个完整的限定名,包括包名、类名,那么 Java 编译器就可以很容易地定位到源代码或者类。import 语句就是用来提供一个合理的路径,使得编译器可以找到某个类。

程序都是从main方法开始执行。为了能运行这个程序,必须包含main方法并且创建一个实例对象。

键盘事件(P166)

Java.awt.event.KeyEvent

鼠标事件(P167)

Java.awt.event.MouseEvent

监听器类型

  java.awt.event包中定义的事件监听器接口的命名一般以Listener结尾,这些接口规定了处理相应事件必须实现的基本方法

异常处理(try-catch语句P178

捕获异常

使用 try catch 关键字可以捕获异常。try/catch 代码块放在异常可能发生的地方。

try/catch代码块中的代码称为保护代码,使用 try/catch 的语法如下:

try

{

//程序代码

}catch(ExceptionName e1)

{

//catch块

}

Catch 语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。

如果发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是一样。

 

for-each结构

遍历集合中的元素,还可使用Iterator迭代方法。for-each还允许使用for循环简洁的遍历一个集合或数组。

 

 

类变量(P68)

1、 访问控制修饰符

修饰符的作用是限定成员变量的可访问权限(成员变量用来保护对类、变量、方法和构造方法的访问),Java 支持 4 种不同的访问权限。

default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类接口、变量、方法。

private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)

public : 对所有类可见。使用对象:类、接口、变量、方法

protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)

非访问修饰符

为了实现一些其他的功能,Java 也提供了许多非访问修饰符。

static 修饰符,用来修饰类方法和类变量。

final 修饰符,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。

abstract 修饰符,用来创建抽象类和抽象方法不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充

synchronized volatile 修饰符,主要用于线程的编程。

2、 数据类型

3、 变量名称

 

调用类方法(P70)

构造方法(P7)

构造方法通常用来完成对象的初始化构造方法的声明看上去和方法声明类似但有自己的特点:1 构造方法的名称必须与类名相同;2 构造方法没有返回值包括关键字void也没有;3 任何类都含有构造方法如果没有显式地定义类的构造方法则系统会为该类提供一个默认的构造方法不含任何参数一旦在类中定义了构造方法就不提供默认的构造方法了

 

if语句和switch语句都是多分支选择语句switch结构只能处理等值条件判断而且必须是整型变量或字符型变量通常情况下分支的层次超过3层时使用switch语句如果条件判断一个范围使用if条件语句

 

数组(P37)

Java 语言中提供的数组是用来存储固定大小的同类型元素。

处理数组

数组的元素类型和数组的大小都是确定的,所以当处理数组元素时候,我们通常使用基本循环或者 For-Each 循环它能在不使用下标的情况下遍历数组

Arrays

java.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的。

具有以下功能:

  • 给数组赋值:通过 fill 方法。
  • 对数组排序:通过 sort 方法,按升序。
  • 比较数组:通过 equals 方法比较数组中元素值是否相等。
  • 查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找法操作。

ArrayList

List实现类之一:ArrayList

ArrayList List 接口的典型实现类、主要实现类

本质上,ArrayList是对象引用的一个“变长”数组

ArrayListJDK1.8之前与之后的实现区别?

JDK1.7ArrayList像饿汉式,直接创建一个初始容量为10的数组

JDK1.8ArrayList像懒汉式,一开始创建一个长度为0的数组,当添加第一个元素时再创建一个始容量为10的数组

Arrays.asList() 方法返回的 List 集合,既不是 ArrayList 实例,也不是

Vector 实例。 Arrays.asList() 返回值是一个固定长度的 List 集合

Scanner

java.util.Scanner 是我们可以通过 Scanner 类来获取用户的输入。

方法next() nextLine() 区别

next():

  • 1、一定要读取到有效字符后才可以结束输入。
  • 2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
  • 3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
  • next() 不能得到带有空格的字符串。

nextLine()

  • 1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
  • 2、可以获得空白。

如果要输入 int float 类型的数据,在 Scanner 类中也有支持,但是在输入之前最好先使用 hasNextXxx() 方法进行验证,再使用 nextXxx()

 

线程属于一次性消耗品,在执行完 run() 方法之后线程便会正常结束了,线程结束后便会销毁,不能再次 start,只能重新建立新的线程对象

 

当我们通过一个对象的引用访问静态成员属性或者方法时 ,访问操作只与所声明的引用类型相关 ;与引用对象是否为 null 无关 ,因为访问静态成员不需要实例化对象 ;即便引用不为 null ,也与运行时多态无关 ,因为静态成员是类相关的 。

 

方法: