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

@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类中,将缉毒的方法
写在缉毒接口中,不光有缉毒犬,还有缉毒猪,这样缉毒猪也可以实现缉毒接口。还有导盲犬,实现导盲
的接口。各个动物都写在抽象类中,特有的功能写在接口中
假如每个抽象类都是竖着的个体,那么接口就是一个横着贯穿这些抽象类的东西。可以用一幅图来形象的
描述

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值