欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java课堂笔记

程序员文章站 2022-07-10 19:25:42
10.13Java课堂笔记数组二维数组声明:类型 [ 行 ] [ 列 ] 数组的名字///直接为每一维分配内存空间int [][]a = new int [2][3];///分别int [][]b = new int [2][];b[0] = new int[3];b[1] = new int[2];二维数组可以静态初始化,内存不是连续分配,所以每一维长度不一定相等引用时,要给出两维的下标,比如:b[1][1];另外数组下标从0开始,遍历的时候要注意不...

10.13Java课堂笔记

数组

二维数组

声明:

类型 [ 行 ] [ 列 ] 数组的名字

		///直接为每一维分配内存空间
		int [][]a = new int [2][3];
		///分别
		int [][]b = new int [2][];
		b[0] = new int[3];
		b[1] = new int[2];

二维数组可以静态初始化,内存不是连续分配,所以每一维长度不一定相等

引用时,要给出两维的下标,比如:

b[1][1];

另外数组下标从0开始,遍历的时候要注意不能大于等于length;

Java中含有 java.util.Arrays 类,能方便进行数组操作;

fill 给数组元素负值

sort 升序排序

比较数组时可以使用equals

binarySearch 二分查找

搜索
查询元素出现的位置
需要注意的是,使用binarySearch进行查找之前,必须使用sort进行排序
如果数组中有多个相同的元素,查找结果是不确定的

clone 可以克隆数组

匿名数组

可以作为现用现写

增强for循环

可以遍历数组,也可以遍历集合

for(type name: 集合名) {

}

迭代变量必须在()中进行

类似C++中的 iterator 迭代器,不会出现数组越界的问题

※ 不能再增强for循环中给数组赋值

要想初始化要用普通的for循环来解决

二维数组怎么通过增强for循环实现输出 ?

int [][] arr = {{1,2},{3,4},{5,6}};
for(int [] row : arr) {
    for(int j : row) {
        System.out.println(j);
    }
}

使用for 循环对数组元素进行复制,要考虑到目标数组大小

System.arrary.copy 可以对数组进行拷贝

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OTKdBw6v-1609761105596)(C:\Users\wuyan\AppData\Roaming\Typora\typora-user-images\image-20201016104735416.png)]

错误的赋值方式:

int [][]num = new int[3][];
num[0][0]= 1;
num[0][1]= 2;
num[1][0]= 0;

字符串

双引号包裹着的一串字符:

“hello,world” "123.435"等

字符串存储在char 类型的数组中,一个字符占两个字节

String s1 = new String();
char[] a = {'b','o','y'};

常量字符串创建后会存储在字符串常量池中——享元模式

不提倡的创建字符串常量的方式

String s = new String("xyz");

字符串中常用的API

https://www.cnblogs.com/qiuqiu001/p/7806725.html

https://www.cnblogs.com/caigq/archive/2017/06/11/6985974.html

public int compareTo(String S)

当前字符串与S相同, 返回0,大于 正值,小于 负值

比较时采用Unicode来进行比较,字典序

如果不想区分大小写的时候可以使用 equalsIgnoreCase

字符串对比

问题描述
  给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一:
  1:两个字符串长度不等。比如 Beijing 和 Hebei
  2:两个字符串不仅长度相等,而且相应位置上的字符完全一致(区分大小写),比如 Beijing 和 Beijing
  3:两个字符串长度相等,相应位置上的字符仅在不区分大小写的前提下才能达到完全一致(也就是说,它并不满足情况2)。比如 beijing 和 BEIjing
  4:两个字符串长度相等,但是即使是不区分大小写也不能使这两个字符串一致。比如 Beijing 和 Nanjing
  编程判断输入的两个字符串之间的关系属于这四类中的哪一类,给出所属的类的编号。
输入格式
  包括两行,每行都是一个字符串
输出格式
  仅有一个数字,表明这两个字符串的关系编号
样例输入
BEIjing
beiJing
样例输出
3

Code:

package shifengshou;
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		
		//字符串对比
		Scanner in = new Scanner(System.in);
		String s1 = in.next();
		String s2 = in.next();
		
		
		if(s1.length() != s2.length())
		{
			System.out.println("1");
		}
		
		else
		{
			if(s1.equals(s2))//区分大小写的判断
			System.out.println("2");
			
			else if(s1.equalsIgnoreCase(s2))//忽略大小写的判断
			System.out.println("3");
		}
	}
}

getChar() 获得字母

subString() 字符串截取(注意函数值的问题)

concat字符串拼接

isEmpty()判断是否非空""注意和 isBlank() 的区别关系

indexOf(String s);

indexOf(String s,int startpoint);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s46E1Shp-1609761105599)(C:\Users\wuyan\AppData\Roaming\Typora\typora-user-images\image-20201016113748110.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6sPwWQiU-1609761105600)(C:\Users\wuyan\AppData\Roaming\Typora\typora-user-images\image-20201016114004045.png)]

10.22java课堂笔记

substr截取字符串左闭右开

public static void main(String []args) {
		//System.out.println("hello world");
		Scanner cin=new Scanner(System.in); 
		String s1 = new String();
		s1 = cin.nextLine();
		int pos = s1.indexOf('@');
		int len = s1.length();
		String a = new String();
		String b = new String();
		a = s1.substring(0, pos);
		b = s1.substring(pos+1,len);
		System.out.println(a);
		System.out.println(b);
	}

API

format方法,可以创建一个格式化的字符串

字符串转换为整型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F3UkIX7V-1609761105602)(C:\Users\wuyan\AppData\Roaming\Typora\typora-user-images\image-20201022101512908.png)]

字符串转换为浮点型

Float.parseFloat();

Double.parseDouble();

数值转换为字符串

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AmVAGW0k-1609761105603)(C:\Users\wuyan\AppData\Roaming\Typora\typora-user-images\image-20201022101949282.png)]

工厂方法:

可以将任何对象任何基本类型转换为字符串

String.valueOf()

字符串与字符、字符数组

String (char[]);

字符串与字节数组

getByte("编码方式");

StringBuffer

可以创建能够进行修改的字符串序列,该对象实体的内存空间可以自动改变大小,便于存放改变大小的字符串

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9wiVHilp-1609761105605)(C:\Users\wuyan\AppData\Roaming\Typora\typora-user-images\image-20201022103820971.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4V7Xz9FQ-1609761105606)(C:\Users\wuyan\AppData\Roaming\Typora\typora-user-images\image-20201022103933078.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GdU8vTIK-1609761105607)(C:\Users\wuyan\AppData\Roaming\Typora\typora-user-images\image-20201022104121123.png)]

基本类型数据的类包装器

java对所有基本数据类型都在java.lang包提供了对应的包装类

Double类的构造方法:

Double(double num1)/Double (String num1)

静态工厂方法:

valueOf(double d);

valueOf(string d);

Character类:

构造方法:Character (char c);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AWlvrxa7-1609761105608)(C:\Users\wuyan\AppData\Roaming\Typora\typora-user-images\image-20201022105517712.png)]

装箱和拆箱:

装箱

Interge int1 = 55; 或者是

int i = 3;

Interage int2 = i;

拆箱

注意:

防止没有初始化就使用的空型情况;

java编程要尽可能使用工厂方法

正则表达式与模式匹配

一个含有特殊意义字符的字符串称为正则表达式(模式),特殊字符称为元字符

比如说:"\\dok" 中的\\d 就是元字符,代表从0–9的任何一个数

模式匹配:

模式匹配就是检索和指定模式匹配的字符串

java中提供了指定的类;

在正则表达式中使用一堆方括号括起来的若干个字符,代表任意一个字符;

方括号嵌套方括号可以构成交并差 &&并且 ^除了 - 到

限定字符模式;

模式的逻辑或

模式匹配

的情况

10.23课堂笔记

switch语句新特性

改进1

case 1->执行语句

case 1->System.out.println(); 冒号改成箭头

必须要有default

case 1,2,3->执行语句

改进2

之前要先声明,然后再赋值改变变量大小

int b = switch(a){
	case 1,2,3-> 6;
    ...
    default-> 0;
}
int b = switch(a){
	case 1:{
		yield 1;///相当于return
	}
    default-> 0;
}

"\\s"空白字符

封装

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gF7AyfFk-1609761105609)(C:\Users\wuyan\AppData\Roaming\Typora\typora-user-images\image-20201023103147070.png)]

default:

是一种默认的权限,仅能够用同一个包的方法进行访问

protected :

可以被这个类本身、它的子类(继承得到,同一个包中的以及不同包中的子类)和同一个包中的所有其他类访问

(protected && default)跨包继承也要谨慎使用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fZ5yNG7q-1609761105610)(C:\Users\wuyan\AppData\Roaming\Typora\typora-user-images\image-20201023103756916.png)]

来源:https://www.cnblogs.com/sunyubin/p/9683860.html

继承

降低冗余问题,提高了可维护性

extends 是继承的时候的关键字

例子:

class A{
	
}
public class B extens A{

}

这里B将A继承

public 为继承方式

方法的覆盖

重写override

**子类拥有与父类相同的成员的情况称为覆盖(Override

子类通过覆盖父类的成员变量和方法,可以把父类的状态和行为

改变为自身的状态和行为。

**成员变量的覆盖:**变量名相同

**成员方法的覆盖:**返回值类型、方法名、形参都相同

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VjjHf6lA-1609761105611)(C:\Users\wuyan\AppData\Roaming\Typora\typora-user-images\image-20210104193541110.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TFNCfw36-1609761105612)(C:\Users\wuyan\AppData\Roaming\Typora\typora-user-images\image-20210104193613822.png)]

通过super来实现对父类成员的访问

继承中的 is a问题:cat is a animal

A animal = new Cat();/// okay子类是父类的类型,这叫做上转型

但是 Cat cat = animal;///就不行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GA2MyHry-1609761105613)(C:\Users\wuyan\AppData\Roaming\Typora\typora-user-images\image-20210104193751708.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DLKnU5hN-1609761105614)(C:\Users\wuyan\AppData\Roaming\Typora\typora-user-images\image-20210104193817909.png)]

强制类型转换

多态

提高系统可拓展性,可以拓展新功能

是通过上转型(类型的向上转换,子类转换成父类)实现的多态

如果不能确定对象的类型,类型强制转换之前先用instanceof确定对象的类型

任务: 确定 instanceof的新用法:

instance:实例的意思, A instanceof 可以用来判断A是不是B的一个实例

在稳定的情况下实现新功能,依靠的是=>继承,上转型,方法的重写

equals方法:

判断两个基本数据类型的变量是否相等,比较两个对象的引用两个变量是否指向了相同的新变量

10.30java课堂笔记

instanceof新特性

检查对象是不是指定的类型,通常在将父类引用强制转换为子类引用的时候使用

抽象类

封装、继承、多态、抽象是JAVA四大特性,不能明确描述的要进行抽象

在某一层次,没有具体的状态,不能具体地进行描述,所以要进行初始化

为了系统的可拓展性,就要进行抽象

语法 abstract 修饰类、方法叫做抽象类,抽象方法

抽象方法的好处是多态。

抽象类除了被继承之外,没有别的用途

如果一个非抽象类是某一个抽象类的子类,他必须重写父类中所有抽象方法!!!

抽象方法只需声明,无需实现

子类对抽象方法的重写,不能降低访问权限

如何实现多态

抽象可以屏蔽一切变化

重要概念:接口

一个类可以有多个接口。接口克服了单继承的缺点。

接口不是类层次结构的一部分,接口可以看作是一种规则和约束。

一个类在继承另一个类的同时,还可以实现多个接口

声明接口 :

具体使用interface

page 113

public interface interfaceName

抽象方法当然定义格式 : returnType

接口中方法默认使用public & abstract(可以省略)

java中的implement

接口回调(接口类型的使用)

两种方法: 接口做上转型,接口做参数

接口不是类,不能进行实例化一个接口,只能实例化它的实现类

接口的默认方法(拓展方法)

主要是提供一种拓展方法

默认重写加上public,去掉default

多级继承

默认方法支持行为的多级继承

类实现的优先级别高于接口的默认实现

接口和抽象类的区别

1.抽象层次

2.建模关系

3.设计层次

尽量以interface取代abstract class

interface 可以用来构建非层次类型框架,减少因继承带来的束缚

继承与组合

优先考虑继承,然后才是组合,因为继承破坏了封装性

提倡在一个package中进行继承,跨越package的是不建议的

面型对象的程序设计原则

page 123

11.13课堂笔记

java中的异常问题:

异常的的分类:

Java课堂笔记

好博客

RuntimeException以及Error 是非受查异常,CheckException 是受查异常

java异常处理机制

1.捕获异常

try-catch-finally

2.声明异常

throws

3.抛出异常

throw

抛出的异常必须是Throwable或者是其子类的实例才可以抛出异常

Throwable中API的用法

getMessage() && toString() 方法

异常栈轨迹

Final语句的问题

final语句中抛出的异常以及跳转语句会覆盖try中抛出的异常

避免使用final

链式异常

通过链式异常可以为异常关联另一个异常,第二个异常描述第一个异常的原因,称为引发异常或者是背后异常

带有资源的try语句(io读取文件等)

try with resources;

更加精确的抛出异常

隐匿异常对象的栈轨迹

filllnStackTrace() 方法

反射与注解

反射:

能够在运行时了解对象的一切信息,比如:父类型,方法,字段,构造方法等,还可以动态生成对象,改变权限

这种结果就是通过反射得到的

.class字节码文件

java.lang.Class;

字节码对象的创建:共三种方法

Role.calss;

对象.getClass();

Class.forName("")

class获取构造函数四个方法分两组

详解博客

在使用反射的时候,常用到的几个方法老是傻傻的分不清楚是干吗的,功能差不多的啊,
比如:

Class.getFields();
Class.getField(String);
Class.getDeclaredFields();
Class.getDeclaredField(String);
和
Class.getMethods();
Class.getMethod(String, Class[]);
Class.getDeclaredMethods();
Class.getDeclaredMethod(String, Class[]);

主要的就是有没有Declared单词的区别,
经过仔细研究有Declared单词的是获取的是某个类自己定义的成员,包括公开的,私有的,保护的等等的字段或方法,
如果没有Declared单词的一般都是获取某个类所拥有的所有公开的成员,包括自己定义的和继承下来的公开成员,如公开的字段和继承的公开的方法.

主要的就是有没有Declared单词的区别,
经过仔细研究有Declared单词的是获取的是某个类自己定义的成员,包括公开的,私有的,保护的等等的字段或方法,
如果没有Declared单词的一般都是获取某个类所拥有的所有公开的成员,包括自己定义的和继承下来的公开成员,如公开的字段和继承的公开的方法.

先获取构造函数类型,在通过构造函数获取新的对象newInstance

class…///泛型

…表示不定长

获取成员变量field

获取任意指定名字的成员

public Field getDeclaerFields();

field封装的方法

get();

getInt();

getShort();

获取数组:

数组容量动态调整

11.19 java课堂笔记

OCP原则

抽象意味着一切皆有可能

用对象组合代替继承

内部类

课本第118页

面向对象的基石:抽象 abstraction

静态内部类,非静态内部类,局部内部类,匿名内部类

内部类可以定义为:abstract public private default protected,可以加入任意的访问权限

内部类都是一个独立的类

静态内部类只能访问内部类的静态变量或者是静态方法,非静态的不能访问

可以实现顶层类的内部接口

局部内部类

在一个方法中实现,因此也叫方法内部类,不能用访问修饰符修饰

局部内部类不能从方法外访问

匿名内部类

匿名类没有名字,只能用一次,出现在表达式的一条语句中

new[类A OR 接口A()]{

}

得到的匿名类是类A的子类(可以继承A的成员或者是重写继承的方法),或者是实现接口A的类(在匿名类中实现接口的抽象方法)

内部类可以很好地实现隐藏,降低外部耦合性,更好地实现封装性

内部类拥有外围类的所有元素的访问权限

实现多重继承,单继承之后的类再继承一个内部类,就可以实现多继承的效果

避免修改接口而实现同一个类中两种同名方法的调用,用内部类去实现一个接口

函数式编程

lambda表达式

8.0提出

把函数作为参数进行传递

​ ©PushyTao

本文地址:https://blog.csdn.net/weixin_45712255/article/details/112197898

相关标签: java