基础规定和语法
Java 常量
常量在程序运行时是不能被修改的。 在 Java 中使用 final 关键字来修饰常量,声明方式和变量类似:
final double PI = 3.1415927;
JSR JCP 是啥
- JSR规范:
Java Specification Request - JCP组织:
Java Community Process为了保证Java语言的规范性,SUN公司搞了一个JSR规范,凡是想给Java平台加一个功能,比如说访问数据库的功能,大家要先创建一个JSR规范,定义好接口,这样,各个数据库厂商都按照规范写出Java驱动程序,开发者就不用担心自己写的数据库代码在MySQL上能跑,却不能跑在PostgreSQL上。
布尔运算
布尔运算的一个重要特点是短路运算
布尔运算是一种关系运算,包括以下几类:
- 比较运算符:>,>=,<,<=,==,!=
- 与运算 &&
- 或运算 ||
- 非运算 !
关系运算符的优先级从高到低依次是:
!
,>=,<,<= ==,!= && ||
字符和字符串
在Java中,字符和字符串是两个不同的类型。
字符类型 字符类型char是基本数据类型,它是character的缩写。一个char保存一个Unicode字符:
字符串连接
Java的编译器对字符串做了特殊照顾,可以使用+连接任意字符串和其他数据类型,这样极大地方便了字符串的处理。例如:
如果用+连接字符串和其他数据类型,会将其他数据类型先自动转型为字符串,再连接
从Java 13开始,字符串可以用"""..."""表示多行字符串(Text Blocks)了
数组变量
定义一个数组类型的变量,使用数组类型“类型[]”,例如,int[]。和单个基本类型变量不同,数组变量初始化必须使用new int[5]表示创建一个可容纳5个int元素的数组。
Java的数组有几个特点:
数组所有元素初始化为默认值,整型都是0,浮点型是0.0,布尔型是false; 数组一旦创建后,大小就不可改变。 要访问数组中的某一个元素,需要使用索引。数组索引从0开始,例如,5个元素的数组,索引范围是0~4。
可以修改数组中的某一个元素,使用赋值语句,例如,ns[1] = 79;
Java的格式化功能提供了多种占位符,可以把各种数据类型“格式化”成指定的字符串:
占位符 说明 %d 格式化输出整数 %x 格式化输出十六进制整数 %f 格式化输出浮点数 %e 格式化输出科学计数法表示的浮点数 %s 格式化字符串 注意,由于%表示占位符,因此,连续两个%%表示一个%字符本身
要判断引用类型的变量内容是否相等,必须使用equals()方法
对于多个==判断的情况,使用switch结构更加清晰。
while循环语句就是让计算机根据条件做循环计算,在条件满足时继续循环,条件不满足时退出循环。
在Java中,while循环是先判断循环条件,再执行循环。而另一种do while循环则是先执行循环,再判断条件,条件满足时继续循环,条件不满足时退出。它的用法是
冒泡排序
命令行參數
Java程序的入口是main方法,而main方法可以接受一个命令行参数,它是一个String[]数组。
JAVA 字符的方法
用StringJoiner的结果少了前面的"Hello "和结尾的"!"!遇到这种情况,需要给StringJoiner指定“开头”和“结尾” (这个内置方法,可以去头尾)
为了让编译器能自动检查某个值在枚举的集合内,并且,不同用途的枚举需要不同的类型来标记,不能混用,我们可以使用enum来定义枚举类:
Math 类
顾名思义,Math类就是用来进行数学计算的,它提供了大量的静态方法来便于我们实现数学计算:
Lambad (兰布达) 希娜字母的11
Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。
Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
使用 Lambda 表达式可以使代码变的更加简洁紧凑 使用 Lambda 表达式需要注意以下两点:
Lambda 表达式主要用来定义行内执行的方法类型接口(例如,一个简单方法接口)。在上面例子中,我们使用各种类型的 Lambda 表达式来定义 MathOperation 接口的方法,然后我们定义了 operation 的执行。
Lambda 表达式免去了使用匿名方法的麻烦,并且给予 Java 简单但是强大的函数化的编程能力
多态
什么是多态呢?通俗的理解,就是同一个事件发生在不同的对象上会产生不同的结果,鼠标左键点击窗口上的 X 号可以关闭窗口,点击超链接却可以打开新的网页。
多态存在的三个必要条件 继承 重写 父类引用指向子类对象:Parent p = new Child(); 虚函数 虚函数的存在是为了多态 当子类对象调用重写的方法时,调用的是子类的方法,而不是父类中被重写的方法。
要想调用父类中被重写的方法,则必须使用关键字 super
继承 inherit
继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。 继承可以使用 extends 和 implements 这两个关键字来实现继承,而且所有的类都是继承于 java.lang.Object,当一个类没有继承的两个关键字,则默认继承 Object(这个类在 java.lang 包中,所以不需要 import)祖先类。 extends 继承类, implements 实现接口
重写 Override
重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。 在面向对象原则里,重写意味着可以重写任何现有方法
子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。 子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。
重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常
当需要在子类中调用父类的被重写方法时,要使用 super 关键字。
重载(Overload)
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
最常用的地方就是构造器的重载
- 方法重载(Overloading):如果有两个方法的方法名相同,但参数不一致,哪么可以说一个方法是另一个方法的重载。
- 方法覆盖(Overriding):如果在子类中定义一个方法,其名称、返回类型及参数签名正好与父类中某个方法的名称、返回类型及参数签名相匹配,那么可以说,子类的方法覆盖了父类的方法。
抽象类
在面向对象中,所有的对象都是通过类来描述的,但是反过来,并不是所有的类都可以用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就叫做抽象类 由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用!一个类可以实现多个接口 引入抽象方法和抽象类,是Java提供的一种语法工具,对于一些类和方法,引导使用者正确使用它们,减少被误用。
封装 Encapsulation
封装是指将一种抽象性函式接口的实现细节部分包装,隐藏起来的方法
接口 interface
接口的特性:
- 接口是隐式抽象的,当声明一个接口的时候,可以不使用abstract 关键字
- 接口中 的每一个方法都是隐式的抽象的,声明时不需要关键字abstract
- 接口中的方法都是公有的
枚举 enum
枚举是一个特殊的类,一般表示一组常量,比如四季,12个月,星期几
枚举跟普通类一样可以使用自己的变量,方法和构造函数, 构造函数只能使用private 访问修饰符,所以外部无法访问
包 package
为了区别类名的命名空间
- 把功能相似的或者相关的类或接口组织在同一个包中,方便类的查找和使用
- 同一个文件夹,包采用树型目录存储方式
- 包也限定了访问权限,拥有包权限的类才能访问某个包中的类
创建包 通常使用小写字母来命名,避免与类,接口名字的冲突
构造函数,
是一种特殊的函数,与函数名称相同,无返回值 一般使用初始化成员的属性和方法,即Nes 对象后,就调用了对象的属性和方法
具有参数的构造函数 称为参数化构造函数
java 的数据结构
枚举 Emumeration
位集合 Bitsit
向量 Vector Vector.sort 方法对向量进行排序
栈 stack
字典 Dictionary
字典就是有个抽象类,它定义了键映射到值的数据结构
哈希表 Hashtable
属性 Properties
数据结构
Linkedlist 线性表
类似于 Arraylist 是一种重圆的数据容器
以下情况使用Linkedlist
- 需要通过循环迭代来访问列表中的某些元素
- 需要频繁的在列表开头,中间,结尾处进行刷出元素操作等
HashSet
HashSet 基于HashMap 来实现的,是一个不允许有重复元素的集合
iterator 迭代器
iterator 不是一个集合,它是一种用于访问集合方法,可用于迭代Arraylist 和 HashSet
泛型 generics 泛型提供了编译时类型安全检测机制,该机制允许在编译时检测到非法的类型
socket 通信
JDBC 内部底层其实是socket 通信
调用另一个文件的类
在java里怎么在一个java程序里调用运行另一个java类? 先把2个文件放在同一个包下面,这样就可以访问另一个java程序了。
java怎么调用另一个类的方法 java类有两种方法一种是类方法就是用static修饰的, 一种是实例方法,就是没有static修饰的方法。类方法可以同时类名.方法名的方式调用。
用静态公有方法的语法是:类名.方法名(参数...); 所以,比如另一个类叫OtherClass,它的静态公有方法是 public static int MethodA()
那么在你自己的类里调用的方式就是:int result = OtherClass.MethodA(); 另外,调用非静态公有方法(也叫成员方法),比如方法叫 public int MethodB() {...} 就必须先创建这个类的对象再调用其方法, 例如:int result2 = new OtherClass().MethodB();
在Java中,静态方法是属于类而不是对象的方法。它们可以直接通过类名调用,而无需创建类的实例。静态方法有以下几个常见的用途和优势:
1. 工具方法:静态方法通常用于实现一些通用的功能,例如数学计算、字符串处理等。由于它们不依赖于特定的对象状态,因此可以直接通过类名调用,方便使用。
2. 简化代码:静态方法可以在不创建对象的情况下执行操作,这样可以避免创建不必要的对象。这对于一些简单的操作或者不需要访问对象状态的方法来说,可以提高代码的简洁性和执行效率。
3. 共享数据:静态方法可以访问和修改静态变量,这些变量在类的所有实例之间是共享的。这使得静态方法可以用于处理和操作共享数据,而不需要每个实例都保存一份副本。
4. 工厂方法:静态方法可以用于创建对象实例,这种模式被称为工厂方法模式。通过在静态方法中封装对象的创建逻辑,可以提供更灵活的对象创建方式,同时隐藏具体的实现细节。
需要注意的是,静态方法不能直接访问非静态成员(例如实例变量和实例方法),因为它们没有隐式的this引用。此外,静态方法不能被子类重写,因为它们属于类而不是对象。
总而言之,静态方法在Java中具有一些特殊的用途和优势,可以提供更简洁、高效和灵活的代码实现方式。然而,过度使用静态方法可能导致代码难以测试和维护,因此应该根据具体的需求和设计原则来合理使用
在Java中,与类名相同的方法被称为构造方法(Constructor)。构造方法是一种特殊的方法,用于创建和初始化对象。构造方法的名称必须与类名完全相同,并且没有返回类型(包括void)。构造方法在创建对象时自动调用,并且可以用于执行必要的初始化操作
set是一种常见的命名约定,用于设置对象的属性或配置。它通常用于通过方法调用来设置对象的属性值
使用set方法的好处是它提供了一种统一的方式来设置对象的属性或配置,使代码更易读和维护。此外,set方法还可以提供一些额外的逻辑,例如验证输入值的有效性或触发其他操作。
扎西记录的内容