@System类&抽象类与接口的区别&Date类

增强for循环:

String [ ] arr=“abcde”;
 for(String s:arr){
 System.out.println(s);
 }


增强for循环的好处是不计入循环次数,所以执行速度快效率高,但是也有弊端,增强for循环不可控,从第一个元素遍历到最后一个元素,而且不记入循环次数。
for循环:

  • 迭代for循环(普通for循环):可以控制循环次数
  • for each(增强for循环):运行速度快,但是循环次数不可控。
    if循环和for循环的嵌套最好不要超过三层,因为超过三层以后很容易会有逻辑上的漏洞。

正则表达式:用来校验字符串的规则。
regex表示正则的类。
例题:
判断用户输入的字符串,要求:2位到5位,由数字,字母,下划线组成,不允许有其他字符。
如果不使用正则表达式,那么代码将及其冗长且易出错;

package com;

import java.util.Scanner;

public class Demo {

	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		String str=sc.next();
		char[] arr=str.toCharArray();
		if(str.length()>=2&&str.length()<=5) {
			boolean flag=false;
			for(char s:arr) {
				if(!(s>='a'&&s<='z'||s>='A'&&s<='Z')) {
					if(!Character.isDigit(s)) {
						if(!(s=='_')) {
							flag=true;
						}
					}
				}
			}
			if(flag) {
				System.out.println("不合法");
			}
			else {
				System.out.println("合法");
			}
			
		}
		else {
			System.out.println("不合法");
		}
	}

}

而使用了正则表达式以后,代码会简洁很多

package com;

import java.util.Scanner;

public class Demo {

	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		String str=sc.next();
		String regex="[0-9a-zA-Z_]{2,5}";
		boolean result=str.matches(regex);
		System.out.println(result);
		
				
	}
}

使用了正则表达式的代码,简洁,逻辑清晰,不易出错,这就是正则表达式存在的意义。
正则表达式 [该位置允许出现的字符]{该字符可以出现的次数}
元字符:
.表示任何字符
\d表示数字
\D表示非数字
\s表示空白字符 space
\S表示非空白字符
\w表示单词字符 (数字 字母) word
\W表示非单词字符

*任意多次
+至少一次
?至多一次
matches 匹配 校验方法

使用正则表达式来简单校验手机号 规则: 以1开头,第二位为 3,5,7,8
1[3578]\d{9}另一种非主流写法
1[(3)|(5)|(7)|(8)]\d{9};

使用正则表达式来简单的校验邮箱:
[0-9]\w*@\w+\.com

类只能单继承,也就是说一个类只能继承一个父类,而一个接口,却可以继承多个接口,原因如下:
首先:接口中的方法都是抽象方法,都没有被实现,而抽象类中有的方法不是抽象方法,如果一个类可以继承多个类,恰好这多个类中都有同名的非抽象方法,那么调用时该调用哪一个方法就不知道了,这也是为什么类只能继承一个类的原因,下面将用简单的代码来说明:、

abstract class T{
 public viod fun();
 }
 abstract class T2{
 public void fun();
 }


如果有一个子类同时集成了T 和T2
class Zi extends T,T2{
那么它在调用fun()方法时系统就无法知道它调用的是哪一个父类的fun()方法。
}
下面用接口来说明一下:

interface Y{
 abstract void fun();
 }
 interface Y2{
 abstract void fun();
 }
 interface Y3 extends Y,Y2{


因为父接口的两个fun()方法都是抽象的,都没有被实现,所以这两个方法是完全相同的两个方法,调用哪一个都是一样的,所以接口可以继承多个接口。
}

下面来介绍一次抽象类和接口的区别:
抽象类:为同一事物,有“血缘关系”
接口: 许多事物都具有的共性功能
拿缉毒犬来举一个例子

abstract class Dog{
 //狗的属性和功能
 }
 abstract class Pig{
 //猪 的属性和功能
 }
 interface JD{
 public void jd(); //缉毒方法
 }
 interface DM{
 public void dm(); //导盲方法
 }class JDDog extends Dog implements JD{ //这是一条缉毒犬
 public void jd();
 }
 class DMDog extends Dog implements DM{ //这是一条导盲犬
 public void dm();
 }
 class JDPig extends Pig implements JD{ //这是一只缉毒猪
 public void jd();
 }

缉毒犬有缉毒的功能,但是其他犬没有缉毒的功能,所以将狗的属性,功能写在Dog类中,将缉毒的方法
写在缉毒接口中,不光有缉毒犬,还有缉毒猪,这样缉毒猪也可以实现缉毒接口。还有导盲犬,实现导盲
的接口。各个动物都写在抽象类中,特有的功能写在接口中
假如每个抽象类都是竖着的个体,那么接口就是一个横着贯穿这些抽象类的东西。可以用一幅图来形象的
描述

错误流的输出是随机的,不一定在哪出现