前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java基础中的基础—- Java语法必背规律

Java基础中的基础—- Java语法必背规律

作者头像
Maynor
发布2022-11-30 13:53:59
7730
发布2022-11-30 13:53:59
举报
文章被收录于专栏:最新最全的大数据技术体系

1、indexOf题目,若需要寻找 子串"ab"的所有出现索引,

代码语言:javascript
复制
	规律: 
		1、定义查找的起始索引start,从0开始		int start = 0;
		2、每次从起始索引查找。  				int index = 字符串.indexOf("ab",start);
		3、查找完毕,起始索引 = 找到的索引+1   	start = index+1;

2、遍历中,判定当前是否为最后一个元素。

代码语言:javascript
复制
	if(i==arr.length-1){
		//最后一个元素
	}

3、若要将现在时间,向后推 1天 /1周 /1年

代码语言:javascript
复制
	规律:
		1、获取当前毫秒值       getTime();
		2、当前毫秒值+1天 /1周 /1年		
									当前毫秒值+1000L*60*60*24;
									当前毫秒值+1000L*60*60*24*7;
									当前毫秒值+1000L*60*60*24*365;
		3、设置毫秒值			setTime(毫秒值);

4、补0操作

代码语言:javascript
复制
	String m = 值 <= 9 ? "0" + 值 : "" + 值;

5、涉及到 两个字符串日期 进行时间差值运算(相差多少天、相差多少年)

代码语言:javascript
复制
步骤:
	字符串--SimpleDateFormat--》日期--getTime()--》毫秒值-- 未来日期-过去日期 --》天  (1000/60/60/24)
	字符串--SimpleDateFormat--》日期--getTime()--》毫秒值-- 未来日期-过去日期 --》年  (1000/60/60/24/365)

6、日历类的月份设置 月份-1

代码语言:javascript
复制
	日历类对象.set(2019,12-1,31,23,59,59);

7、 //字符串 转 日历类 【常见】

代码语言:javascript
复制
	//字符串---》日期---》日历
        String str3 = "2019年11月11号";
        SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy年MM月dd号");
        Date d3 = sdf3.parse(str3);
        Calendar c3 = Calendar.getInstance();
        c3.setTime(d3);
	
	//日历类 转 字符串【常见】
    //日历===》日期====》字符串
    Calendar c4 = Calendar.getInstance();
    Date d4 = c4.getTime();
    SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy年MM月dd号");
    String str4 = sdf4.format(d4);

8、Calendar日历注意:

代码语言:javascript
复制
		设置月份  真实月份-1    获取月份   获取月份+1

9、指定日期是星期几

代码语言:javascript
复制
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    //4、获取星期几
    int day = c.get(Calendar.DAY_OF_WEEK);		

	周日 1    周一 2   .....   周六 7   switch

10、计算某个程序运行时间:

代码语言:javascript
复制
			//1、记录程序开始前的毫秒值
			//2、开始运行程序
			//3、记录程序结束后的毫秒值
			//4、运行时间 = 结束后-开始前
long startTime=System.currentTimeMillis();//获取开始时间

/*

测试程序代码;

*/

    long endTime=System.curr   entTimeMillis();//获取结束时间

    System.out.println("运行时间是:"+(startTime-endTime)+"ms");//输出运行时间

11、基本数据类型作为参数和返回值:传递真正数据。 相当于方法A把数据复制了一份传递给方法B,方法A和B各操作各自的数据

代码语言:javascript
复制
引用数据类型作为参数和返回值:传递地址值。 
				因为方法A将地址传递给方法B,导致A和B两个方法 操作同一个堆内存对象

12、自定义类,若需要调用ArrayList集合的contains方法,自定义类需要idea生成hashCode和equals方法 若姓名和性别相同,为同一个人, Person类中要在生成两个方法时,同时勾选name和sex

代码语言:javascript
复制
	类似的集合有:
	ArrayList			contains
	LinkedList			contains
	
	HashSet				add
	
	HashMap				containsValue    containsKey    put
	LinkedHashMap		containsValue    containsKey    put

13、Person p1 = new Person(“小宝”,“007”,“传智专修学院A302”); //需要打印: 小宝-007-传智专修学院A302 System.out.println(p1);// p1.toString() 默认打印:地址 在于写:toString方法

14、 ·数字类型之间有转换: byte short int long float double

代码语言:javascript
复制
	小转大: 例如: int ----> double     隐式自动转换
	大转小: 例如: double ---> int      强制手动转换
										例如:    double a = 10.5;
												  int b = (int)a;
										特殊:+=
										double a = 10.5;
										int b = 1;
										b+=a;//隐式强制转换


·基本数据类型---》字符串:
	①【频繁】   ""+基本数据类型    
	②   String 返回值 = String.valueOf(基本数据类型);
	③   基本数据类型.toString(基本数据类型);
	 【频繁】	基本数据类型.toString();


·字符串---》基本数据类型:
	如果出现了不能转换的字符,直接报错。
	int x = Integer.parseInt(字符串);//只能转整数
	double x = Double.parseDouble(字符串);//只能转小数,转整数 小数位会补0
	boolean x = Boolean.parseBoolean(字符串);//只能转布尔

15、普通for:进行遍历中,添加/删除 元素 增强for:进行正向逐个遍历(不能修改集合的长度-添加/删除不能进行) 迭代:进行遍历中 删除 元素

16、 去重复判断: HashSet集合, add方法,返回false,说明为重复元素 HashMap集合: get方法,返回值不为null,说明为重复元素 containsKey, 返回值为true,说明集合中存在该key,key是重复的 containsValue,返回值为true,说明集合中存在该value,value是重复的

17、

代码语言:javascript
复制
切割步骤:
			//1、获取字节数组
			byte[] arr = str.getBytes("utf-8");
			//2、定义切割的起始索引,默认0
			int startIndex = 0;
			//3、定义变量,保存一次切割几个字节 (切割长度) 
			int len = 2;
			//4、循环( 起始索引没有超过 数组的最大索引,就能继续切割 )
			while (startIndex<=arr.length-1){
				//若 起始索引+长度 > 最大索引,会导致索引越界
				if(startIndex+len>arr.length-1){
					FileUtils.writeByteArrayToFile(new File("文件"),arr,startIndex,arr.length-startIndex);
				}else{
					//正常切割
					FileUtils.writeByteArrayToFile(new File("文件"),arr,startIndex,len);
				}
				//切割完成,起始索引需要向后推移
				startIndex += len;
			}
切割技巧总结:
			1、循环条件:										 startIndex<=arr.length-1
			2、当会出现索引越界时,从起始索引,切割到数组最后:  数组长度-起始索引
			3、切割结束,起始索引向后推移:                      起始索引+=切割长度;


			
合并步骤:
			1、查找并获取要合并的碎片文件集合
			2、按指定顺序遍历碎片文件集合 【难点】
			3、遍历一个碎片文件,就变为字节数组,追加写入合并文件
			   遍历结束,文件合并结束
			
			合并三要素:
				  ①确保获取的文件集合正确
				  ②确保碎片是按指定顺序遍历 
				  ③确保是追加方式写入合并文件
			
			合并示例代码:
			public static void main(String[] args) throws IOException {
				//1、获取当前目录下,所有扩展名是 x 的文件,不用查找子目录
				Collection<File> list = FileUtils.listFiles(new File("./"), new String[]{"x"}, false);
				//2、遍历获取的文件
				for (File file : list) {
					//3、遍历中,每个文件变为字节数组,以追加方式写入合并文件
					//3.1、获取当前文件的字节数组
					byte[] arr = FileUtils.readFileToByteArray(file);
					//3.2、把字节数组以追加方式写入合并文件
					FileUtils.writeByteArrayToFile(new File("测试题10.png"),arr,true);
				}
			}

18、文件复制(仅作了解)

代码语言:javascript
复制
//1、定义输入流、输出流
			FileInputStream fis = new FileInputStream("");
			FileOutputStream fos = new FileOutputStream("");
			//2、定义字节数组,长度是1024
			byte[] arr = new byte[1024];//1kb
			//3、定义每次读取的数据长度
			int len = -1;
			//4、while循环
			while((len = fis.read(arr))!=-1){
				fos.write(arr);
			}
			//5、关流倒着关
			fos.close();
			fis.close();

19、方法重写: 返回值类型说明:子类的返回值类型可以 和 父类相同甚至更窄。

代码语言:javascript
复制
	Object
		-----X1
			-----X2
				-----X3

	父类返回值类型:X1
	子类返回值类型:X1 X2 X3

20、 ·(调用成员方法)如何判断this: 最初调用方法时,调用方法的对象是谁,在此次执行中,this表示的就是谁 ·(调用成员变量、构造方法)如何判断this: this关键字在哪个类,就表示哪个类的内容

代码语言:javascript
复制
·关键字如何执行成员方法:
	在类中未找到该方法,去父类中寻找。若父类也找不到,继续去父类的父类中寻找;
	若整个继承树都没有该方法,直接编译报错
·关键字如何执行变量:
	就近原则:局部》》本类成员变量》》父类成员变量
	若整个继承树都找不到该变量,编译报错
·关键字调用构造方法:
	构造方法的第一句若无this或super,Java自动补super()
	Object无参构造一定执行
	this或super调用构造方法,只能出现在构造方法的第一句,只能出现一次
	
·super表示当前类父对象(直接找super代码所在类的 父类即可)

21、多态转换规律: Person父,Student子 大 小 继承树上,越往上,越大。 最大的类:Object

代码语言:javascript
复制
	小转大(Student--》Person):自动转换,子当父用。  两方存在 继承关系 或 实现关系,就可以通过编译
	大转小(Person--》Student):手动强转。 父当子用, 仅做回自己时(或做回自己的向上类型【接口、父类】),可以执行成功
								 注:不能转为无关类型 或 无法做回自己的向下类型
		例如:Student stu1 = new Student();
			  Person per1 = stu1;
			  //做回自己
			  Student stu2 = (Student) per1;

22、多态中变量、常量、方法的使用规律:

代码语言:javascript
复制
			·成员变量、static成员变量、常量、static方法:
				编译是否报错,看左边,执行效果如何,看左边-------------》【编译看左,执行看左】
				
				例如:Person父,Student子
					Person p2 = new Student();
					调用成员变量,看Person中是否存在该成员变量,决定编译是否报错
					执行效果,看Person中该变量的值,决定了执行效果
			
			·非static成员方法:
				编译是否报错,看左边,执行效果如何,看右边-------------》【编译看左,执行看右】

23、instanceof 判断为true有三种情况:  对象就是该数据类型  对象和类型之间存在继承关系(向上判断)  对象和类型之间存在实现接口关系(向上判断)

24、聚合关系: 一对多:一个A中有多个B A类{ private ArrayList blist = new ArrayList<>(); //get set方法 }

代码语言:javascript
复制
	一对一:一个A中有一个B
				A类{
					private B类 b;
					//get set 方法
				}

25、代码块:

代码语言:javascript
复制
	如果类中有静态代码块、构造代码块、构造方法
	
	执行顺序:
		第一次使用该类:  先所有的静态代码块----》再所有的构造代码块----》最后执行构造方法
		第N次使用该类:   再所有的构造代码块----》最后执行构造方法
		
	存在父子继承关系时:
		
		第一次使用该类:父静态代码块--》子静态代码块---》父构造代码块---》父构造方法----》子构造代码块----》子构造方法
		第N次使用该类: 父构造代码块---》父构造方法----》子构造代码块----》子构造方法

26、访问权限: 一个内容,定修饰符之前要考虑:

代码语言:javascript
复制
					任意地方用:public
					当前类内部用:private
					仅 子类能用 并且 同包也能用:protected
					仅 同包能用:无修饰符

27、迭代器删除元素: 固定代码: Iterator it = 集合.iterator(); while (it.hasNext()){ 类型 值 = it.next(); if(条件判断){ //符合要求,进行删除 it.remove(); } }

28、快速数字排序: 从小到大: Collections.sort(集合);

代码语言:javascript
复制
			从大到小:	 Collections.sort(集合);
						 Collections.reverse(集合);

1、排序:【必考点,非难点】 外比较器:Comparator Collections的sort方法的参数中(频率极高) compare 返回值:负数,就会交换两个元素

代码语言:javascript
复制
			Collections.sort(待排序的集合,new Comparator(){
				@Overried
				public int compare(Object o1,Object o2){
					//升序  从小到大  
					//return o1-o2;
					//降序  从大到小
					//return o2-o1;
				}
			});
			
	内比较器:Comparable  需要让排序类,实现该接口(频率低)
			compareTo	返回值:负数,就会交换两个元素
					//升序  从小到大  
					//return this-o2;
					//降序  从大到小
					//return o2-this;
		
		
	注意:
		若 无法直接返回int值,就进行if判断,判断何时返回 正数,何时返回负数

2、 静态内部类访问:Outer.Inner x = new Outer. Inner(); 成员内部类访问:Outer.Inner x = new Outer().new Inner();

代码语言:javascript
复制
记录:Inner前若有new ,必须连接前面的()

3、异常处理机制: ·抓住异常,悄悄处理:try … catch

代码语言:javascript
复制
					一般用于处理常见异常,出现了该异常,知道应该做哪些处理。
					
					例如:
						用户登录时,若用户名为空,提示:请输入用户名
							
							String username = null;
							try{
								username.split(",");
							}catch(Exception e){
								System.out.println("请输入用户名");
							}
							

·不管异常,抛出去:   方法() throws 非运行时异常

					一般用于处理异常时,不明确/不知道 拿到某个异常该做什么。
					
					例如:
						用户查询,查询 用户.txt 文件,查询并展示所有用户信息
					
					分析:若  用户.txt文件找不到,会报FileNotFoundException,
							但题目没有说明,遇到该异常应如何处理,应该抛出去。
							
						public static void main(String[] args) throws FileNotFoundException{
							List<String> xlist = FileUtils.readLines(new File("用户.txt"),"utf-8");
						}

4、 throws: 写在方法声明上 一个抛出多个异常,用逗号分隔 用法:抛出异常 注意:throws一般抛出非运行时异常, 运行时异常不用throws,默认方法抛出

代码语言:javascript
复制
throw:  写在方法体中
		一次抛出一个异常,一般抛出后,方法会结束
		用法:用来生成新异常
		注意:
			throw生成的异常,可以是异常树上的任意异常

5、编码技巧:方法返回数据: 注意: 方法只能有一种数据被返回: 要么是方法返回值,要么是抛出的异常 例如:控制台输入一个整数,若整数大于10,返回true,否则返回false

代码语言:javascript
复制
		·`方法返回值:传递任意类型数据
		
			示例代码:
				public static void main(String[] args){
					boolean f = run1();
				}
			
				public static boolean run1(){
					int x = new Scanner(System.in).nextInt();
					if(x>10){
						return true;
					}else{
						return false;
					}
				}
		
		·`异常信息:仅能传递 字符串 数据
			
			示例代码:
				public static void main(String[] args){
					boolean f;
					try{
						run1();
					}catch(Exception e){
						String str = e.getMessage();
						f = Boolean.parseBoolean(str);
					}
				}
			
				public static void run1(){
					int x = new Scanner(System.in).nextInt();
					if(x>10){
						throw new RuntimeException("true");
					}else{
						throw new RuntimeException("false");
					}
				}

6、finally规律: finally外的代码是否执行,主要看当前try…catch…finally中是否有执行throws或return 若出现,则无法执行finally外的代码,因为方法被结束了

7、继承中的异常抛出和返回值类型

代码语言:javascript
复制
子类抛出异常/子类返回值类型  ≤  父类抛出异常/父类返回值类型 

	例如:
			Object
				------X1
					------X2
						------X3
			
			返回值类型:父X1   子X1、X2、X3
			抛出异常:父X1     子X1、X2、X3
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档