学习收获:改进星星、正则表达、线程
1.面向对象
什么是面向对象?面向过程?
-
类、对象、类定义、对象的创建、对象的使用
-
成员变量、方法、方法的重载,构造方法、this关键字
-
继承、方法的重写 //重写和重载的区别思考一下?
-
多态、父类型的引用指向子类的对象
-
动态绑定:多态+重写
-
封装、访问修饰符:四种(用法)
-
静态代码块
static{ 代码; } //final //abstract //接口 //内部类
**2.截取字符串 **
package cn.tude.api;
import jdk.nashorn.internal.objects.NativeString;
public class Demo01 {
public static void main(String[] arge){
String card="341302xxxxxxxx1834";
//1.截取区域编码
//2.截取出生年月
//3.输出格式年月日
//4.判断男女
//substring()截取字符串中的元素,也可以是一段,中间用逗号隔开
NativeString sb;
System.out.println(card.substring(0,6));//截取区域编码
System.out.println(card.substring(6,10) + "年" + card.substring(10,12)+ "月" +card.substring(12,14)+"日");//截取出生年月
String a=card.substring(16,17);
int b=Integer.parseInt(card.substring(16,17));//判断男女
if (b%2==0)
System.out.println("女");
else{
System.out.println("男");
}
}
}
效果如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xg2J9ON7-1626223195007)(C:\Users\ALIENWARE\AppData\Roaming\Typora\typora-user-images\image-20210713110233540.png)]
正则表达式:
package cn.tude.api;
/**
* javaweb
* 工具 IDEA
* 语言 java
* 数据库 mysql/oracle/db2
* 知识 java语法、API
* HTLM+CSS+JS
* maven搭建项目
* 框架 SSM/springboot/spring/springmvc/mybatis/jquery/ajax/cookie/session/jsp/servlet/tomcat
* 云服务器--阿里云等
*/
//正则表达式
public class Demo02 {
public static void main(String[] args) {
String str = "1234";
//任意的四个数
String regex = "[123456][1345][12345][5678]"; //结果为false
System.out.println(str.matches(regex));
regex="[0-9][0-9][0-9][0-9]"; //也可以表示为regex="[0-9]{4}";
System.out.println(str.matches(regex)); //结果为ture
String str1 = "123456789";
regex="[0-9]{8,16}"; //表示为8-16位数字
System.out.println(str1.matches(regex)); //结果为ture
//转义字符\d转义为数字
regex="\\d{8,16}"; //表示为8-16位数字
System.out.println(str1.matches(regex)); //结果为ture
//转义字符\D转义为非数字
String str2 = "abcd;;;;;";
regex="^\\D{8,16}$";
System.out.println(str2.matches(regex)); //结果为ture
}
}
package cn.tude.api;
//最少的5位字母
public class Demo03 {
public static void main(String[] args) {
String str ="zbcdQ";
String regex = "^[a-zA-Z]{5,}$";
System.out.println(str.matches(regex)); //ture
//通配符* ? +
//一位1-9的数字和一位a-z的组合,组合可以出现任意次数
str = "1q2w3e4r";
regex = "^([1-9][a-z])*$";
System.out.println(str.matches(regex)); //ture
}
}
对昨天星星的改进,增加移动和弹幕
package cn.tedu;
import javax.swing.JFrame;
class MyJFrame extends JFrame{
//构造方法:方法名与类名相同,没有任何返回值类型
//作用:初始化
//导包快捷方式Ctrl+shift+O
//代码提示alt+/
public MyJFrame(){
//设置窗体
this.setTitle("满天星");
//设置窗体宽高
this.setSize(1600,800);
this.setLocationRelativeTo(null);
//优化以下,自动关闭进程
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//显示可见
this.setVisible(true);
MyJPanel mj=new MyJPanel();
this.add(mj);
}
public static void main(String[] args){
new MyJFrame();
}
}
package cn.tedu;
import javax.swing.JPanel;
import java.awt.*;
import java.util.Random;
public class MyJPanel extends JPanel implements Runnable{
int[] x = new int[50];
int[] y = new int[50];
//全局变量
int x1=160;
int x2=1000;
int x3=500;
int x4=800;
int y1=3;
String[] strarr = {"233333","66666","99999","awsl","蚌埠住了","下次一定!"};
//构造方法(用来初始化)
public MyJPanel(){
Random rand=new Random();//生成随机数
for (int i=0;i<x.length;i++){
x[i]= rand.nextInt(1600);
y[i]= rand.nextInt(800);
}
//启动线程
new Thread(this).start();
}
public void paint(Graphics g){
super.paint(g);
//画月亮
g.setColor(Color.YELLOW);
g.fillOval(100,100,150,150);//x,y坐标为左上角
g.setColor(Color.BLACK);
g.fillOval(x1,100,150,150);//遮盖形成月牙
//画一颗星
this.setBackground(Color.BLACK);
for (int i=0;i<x.length;i++) {
//随机颜色
int red=(int)(Math.random()*256);
int green=(int)(Math.random()*256);
int blue=(int)(Math.random()*256);
Color color=new Color(red,blue,green);
g.setColor(color);
Font font1=new Font("微软雅黑",Font.BOLD,60);
g.setFont(font1);
g.drawString("制作人:陈雪晨",x2,80);
g.setFont(font1);
int j=200;
for (int a=0;a<strarr.length;a++) {
g.drawString(strarr[a], x3+x4, j);
j+=100;
}
g.setFont(font1);
g.drawString("好好学习!",x4,600);
g.setColor(color);
Font font=new Font("微软雅黑",Font.BOLD,50);
g.setFont(font);
g.drawString("*", x[i], y[i]+y1);
y[i]=y[i]+y1;
if (y[i]>800){
y[i]=1;
}
}
}
@Override
public void run() {
while (true){
x1-=2;
if (x1<0)
x1=160;
x2-=5;
if (x2<0)
x2=1000;
x3-=10;
if (x3<0)
x3=500;
x4-=7;
if (x4<0)
x4=800;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
repaint();//重绘,重复使用paint方法
}
}
}
模拟售票:
package cn.tedu;
/**
* 作者:陈二胖
* 时间:2021/7/13 14:19
* 目的:TODO 模拟售票
*/
public class Demo01 extends Thread{
//现有10张票
private int ticket=10;
@Override
public void run() {
super.run();
while (true){
if (ticket<=0){
break;
}
System.out.println("线程:" + Thread.currentThread().getName() + "剩余的票" + ticket--);
}
}
public static void main(String[] args) {
//创建线程(三个售票窗口)
Demo01 obj1 = new Demo01();
Demo01 obj2 = new Demo01();
Demo01 obj3 = new Demo01();
Thread thread1=new Thread(obj1,"窗口1");
Thread thread2=new Thread(obj2,"窗口2");
Thread thread3=new Thread(obj3,"窗口3");
//启动线程
thread1.start();
thread2.start();
thread3.start();
}
}
package cn.tedu;
/**
* 作者:陈二胖
* 时间:2021/7/13 14:41
* 目的:TODO 线程的实现方法2
*/
public class Demo02 implements Runnable{
//现有10张票
private int ticket=10;
@Override
public void run() {
while (true){
if (ticket <= 0){
break;
}
//时间缓冲
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程:" + Thread.currentThread().getName() + "剩余的票" + ticket--);
}
}
public static void main(String[] args) {
Demo02 obj = new Demo02();
Thread t1 = new Thread(obj,"窗口1");
Thread t2 = new Thread(obj,"窗口2");
Thread t3 = new Thread(obj,"窗口3");
t1.start();
t2.start();
t3.start();
}
}
package cn.tedu;
/**
* 作者:陈二胖
* 时间:2021/7/13 15:11
* 目的:TODO 线程的实现方法3
*/
public class Demo03 extends Thread {
//现有10张票
private int ticket = 20;
@Override
public void run() {
while (true) {
synchronized (this){//对象锁
if (ticket <= 0) {
break;
}
//时间缓冲
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程:" + Thread.currentThread().getName() + "剩余的票" + ticket--);
}
}
}
public static void main(String[] args) {
//目标线程
Thread obj = new Demo03();
for (int i=0;i<3;i++){
new Thread(obj).start();
}
}
}