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方法
}
}
}