2021-07-13

这篇博客探讨了Java编程中的面向对象概念,包括类、对象、继承和多态。此外,还展示了如何创建和操作数组,以及使用System.arraycopy()进行数组复制。博主通过示例演示了线程的创建和并发问题,强调了同步锁在解决并发问题中的应用。最后,文章提到了Swing库用于创建图形用户界面,并展示了如何实现动态的星星图动画。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

day01作业

创建一个数组,向数组中添加元素。

1、动态的方法参数,必须是方法中的最后一个元素。
2、方法中以数组的方式处理动态参数。

package cn.tedu.homework;

import java.util.Arrays;

/**
*@author 作者:mumu
*@version 时间:2021年7月13日上午8:51:12
*@desc 描述:创建一个数组,向数组中添加元素。
*/
public class Test01 {
	public int[] addElement(int[] src,int...elements) {
		int[] dest=new int[src.length+elements.length];
		//数组复制
		/** 
		 * arraycopy实现数组复制
         * public static void arraycopy(Object src, int srcPos,Object dest, int destPos, int length)
         * src		– 源数组
         * srcPos	– 源数组中的起始位置
         * dest		– 目标数组
         * destPos	– 目标数组中的起始位置
         * length 	– 要复制的数组元素的数量
		 */
		System.arraycopy(src, 0, dest, 0, src.length);
		System.arraycopy(elements, 0, dest, src.length, elements.length);
		return dest;
	}
	public static void main(String[] args) {
		Test01 test=new Test01();
		int[] src= {1,2,3};
		int[] dest=test.addElement(src,4,5,6,7);
		System.out.println(Arrays.toString(dest));
	}
}

面向对象

一、什么是面向对象?面向过程?
OOP

   *类、对象、类定义、对象的创建、对象的使用
   
   *成员变量、方法、方法的重载、构造方法、this关键字
  
  * 继承、方法的重写
  
  * 多态、父类型的引用指向子类的对象
              动态捆绑:多态+重写
    
    *封装、访问修饰符:4种
    public protected default private
    
    *static 静态的 类变量和实例变量
    静态代码块
    static{
    代码;
    } 
    
    *final
    
    *abstract
    
    *接口
    
    *内部类

API

String类:
身份证号码:350 302 2004 0809 3122

package cn.tedu.homework;
/**
*@author 作者:mumu
*@version 时间:2021年7月13日上午9:59:19
*@desc 描述:字符串取出特定位,以及转化为int类型
*/
public class Demo01 {
	public static void main(String args) {
		String card="350302200408093122";
		//1、截取出区域编码
		String str1 = card.substring(0, 6);
		System.out.println(str1);
		//2、截取出出生年月
		//3、输出格式:XXXX年XX月XX日
		String bir = card.substring(6, 14);
		int year;
		year=Integer.parseInt(bir.substring(0,4));
		int month;
		month=Integer.parseInt(bir.substring(4,6));
		int day;
		day=Integer.parseInt(bir.substring(6,8));
		System.out.println(year+"年"+month+"月"+day+"日");
		//4、截取出倒数第二位,判断性别
		String sex = "";
		sex=card.substring(card.length()-2,card.length()-1);
		int num=Integer.parseInt(sex);
		if(num%2==0)
			System.out.println("女");
		else
			System.out.println("男");
	}
}

Javaweb

工具:IDEA
技术:
语言:Java
数据库:MySQL、oracle、db2
知识:Java语法、API
HTML+CSS+JS
maven搭建项目
框架:SSM / springboot
spring / springmvc / mybatis
jquery / ajax
cookie / session
jsp / servlet / tomcat
云服务器——阿里云等等——Linux

正则表达式

多线程

1、Thread继承

package cn.tedu.api;
/**
*@author 作者:mumu
*@version 时间:2021年7月13日下午2:19:57
*@desc 描述:线程————模拟售票(多线程并发问题。总共10张票。但是每个窗口都卖出了10张票
*本代码并发在于输出语句的ticket--处
*/
public class Demo04 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--);
			//Thread.currentThread().getName():获取当前线程名称
		}
	}

	public static void main(String[] args) {
		//创建线程......三个售票窗口
		//ctrl+O查看具体内容
		
		Demo04 obj1 = new Demo04();
		Demo04 obj2 = new Demo04();
		Demo04 obj3 = new Demo04();
		
		Thread thread1 =new Thread(obj1,"窗口1");
		Thread thread2 =new Thread(obj2,"窗口2");
		Thread thread3 =new Thread(obj3,"窗口3");
		//线程开始
		thread1.start();
		thread2.start();
		thread3.start();
	}
}

2、Runnable接口

package cn.tedu.api;
/**
*@author 作者:mumu
*@version 时间:2021年7月13日下午2:42:59
*@desc 描述:线程————模拟售票(存在并发问题,ticket--)
*/
public class Demo05 implements Runnable{
	private int ticket = 10;
	
	//TODO 自动生成的方法存根
	@Override
	public void run() {
		while(true) {
			if(ticket <=0) {
				break;
			}
			System.out.println("线程:"+Thread.currentThread().getName()+"剩余的票:"+ticket--);
		}
	}
	
	public static void main(String[] args) {
		Demo05 obj = new Demo05();
		
		Thread t1 =new Thread(obj,"窗口1");
		Thread t2 =new Thread(obj,"窗口2");
		Thread t3 =new Thread(obj,"窗口3");
		
		t1.start();
		t2.start();
		t3.start();
	}
}
        //休眠,可放慢速度,看出更多问题
		try {
			Thread.sleep(100);
		}catch(InterruptedException e) {
			e.printStackTrace();
		}
package cn.tedu.api;
/**
 *@author 作者:mumu
 *@version 时间:2021年7月13日下午3:13:27
 *@desc 描述:买票,加了锁,以及main函数里面的修改
 *锁:一个线程启动时,封锁其他的线程不启动
 */
public class Demo06 extends Thread{
	private int ticket = 10;

	//TODO 自动生成的方法存根
	@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 Demo06();
		for(int i=0;i<3;i++) {
			new Thread(obj).start();
		}
	}
}

优化后的星星图

1、图形移动
2、关闭后结束进程

package cn.tedu.pro;
import javax.swing.JFrame;
/**
 * java swing;
 * 窗体类:JFrame
 * 常量用  类名. 就可以调用
 */
public class MyJFrame extends JFrame{//只有单继承
    //构造方法:方法名与类名相同,没有任何返回值类型
    //作用:初始化
    public MyJFrame(){
            //this:指代当前类对象,在此指MyJFrame
            this.setTitle("满天星");
            //设置窗体的宽和高
            this.setSize(1600,800);
            //显示居中
            this.setLocationRelativeTo(null);
            //优化一下,退出时关闭进程
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//EXIT_ON_CLOSE是常量,用 类名. 调用
            //显示可见
            this.setVisible(true);
            //创建画布对象
            MyJPanel mj=new MyJPanel();
            //将画布添加到窗体
            this.add(mj);
            }
	//主方法:程序的入口
    public static void main(String[] args){
    	new MyJFrame();
    	}
    }
package cn.tedu.pro;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.util.Random;

import javax.swing.JPanel;

public class MyJPanel extends JPanel implements Runnable{
	//重写
	//Graphics g:画笔
	int[] x=new int[400];
	int[] y=new int[400];
	//弹幕效果
	/*String[] strArr= {"姐妹暴富带我富","纯纯找对象","(#^.^#)","WvW"};
	int[] strx=new int[20];
	int[] stry=new int[80];*/
	
	//全局变量
	int x1=450;
	int y1=20;
	int x2=1550;
	int x3=20;
	//构造方法
	public MyJPanel() {
		Random rand=new Random();//随机数
		for(int i=0;i<x.length;i++)
		{
			x[i]=rand.nextInt(1600);//0~1599
			y[i]=rand.nextInt(800);
		}
		//弹幕坐标
	/*	for(int i=0;i<x.length;i++)
		{
			strx[i]=10;
			stry[i]=20;
		}*/
		//启动线程,用匿名内部类的方法也可以实现
		//Thread()里面需要加东西,线程才会调用
		new Thread(this).start();
	}
	public void paint(Graphics g){
		super.paint(g);
		//修改画布背景
		this.setBackground(Color.BLACK);
		//加名字
		g.setColor(Color.GREEN);
		Font font1=new Font("宋体",Font.BOLD,80);
		g.setFont(font1);
		g.drawString("阿木木",x2,y1);
		g.setColor(Color.PINK);
		Font font2=new Font("宋体",Font.BOLD,40);
		g.setFont(font2);
		g.drawString("纯纯我爱你",x3,80);
		//画月亮
		g.setColor(Color.YELLOW);
		g.fillOval(100, 100, 150, 150);
		g.setColor(Color.BLACK);
		g.fillOval(x1, 100, 150, 150);
		for(int i=0;i<x.length;i++) {
			//0~255,随机颜色
			int red=(int)(Math.random()*256);
			int green=(int)(Math.random()*256);
			int blue=(int)(Math.random()*256);
			Color color=new Color(red,green,blue);
			Font font=new Font("微软雅黑",Font.BOLD,10);
			g.setColor(color);
			g.setFont(font);
			g.drawString("★",x[i],y[i]);
		}
	}
	@Override
	public void run() {
		// TODO 自动生成的方法存根
		while(true) {
			x1-=7;
			y1+=20;
			x2-=30;
			x3+=10;
			if(x1<=0) {
				x1=450;
			}
			if(y1>800)
			{
				y1=20;
			}
			if(x2<=0) {
				x2=1550;
			}
			if(x3>=1550) {
				x3=20;
			}
		/*	for(int i=0;i<strArr.length ;i++) {
				strx[i]+=6;
				if(strx[i]>1550)
					strx[i]=20;
			}*/
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
			repaint();//重绘,重复调用paint方法
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值