-
2021-02-12 11:17:29
直接运行下发代码就能看到美丽的烟花啦,如下图:
package com.inossem.mdm.controller;
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.net.URL;
import java.util.Random;
/**
* 放烟花
*
* @author 吕兴
*/
@SuppressWarnings("serial")
public class MissileDemo extends Applet implements Runnable {
public int speed, variability, Max_Number, Max_Energy, Max_Patch,
Max_Length, G;
public String sound;
private int width, height;
private Thread thread = null;
private BeaClassDemo bcd[];
public void init() {
int i;
this.setSize(400, 400);
width = getSize().width - 1;
height = getSize().height - 1;
speed = 60; // 烟花绽放的速度
variability = 10;
Max_Number = 180; // 可发出烟花的最大数目
Max_Energy = width + 50;
Max_Patch = 60; // 最大的斑点数
Max_Length = 180; // 斑点的最大距离
G = 50; // 向地面弯曲的力度
bcd = new BeaClassDemo[Max_Number];
for (i = 0; i < Max_Number; i++)
bcd[i] = new BeaClassDemo(width, height, G);
}
public void start() {
if (thread == null) {
thread = new Thread(this);
thread.start();
}
}
@SuppressWarnings("deprecation")
public void stop() {
if (thread != null) {
thread.stop();
thread = null;
}
}
@SuppressWarnings({"unused", "static-access"})
public void run() {
int i;
int E = (int) (Math.random() * Max_Energy * 3 / 4) + Max_Energy / 4 + 1;
int P = (int) (Math.random() * Max_Patch * 3 / 4) // 烟花的斑点数
+ Max_Patch / 4 + 1;
int L = (int) (Math.random() * Max_Length * 3 / 4) // 烟花可发射出的距离
+ Max_Length / 4 + 1;
long S = (long) (Math.random() * 10000);
boolean sleep;
Graphics g = getGraphics();
URL u = null;
while (true) {
try {
thread.sleep(1000 / speed);
} catch (InterruptedException x) {
}
sleep = true;
for (i = 0; i < Max_Number; i++)
sleep = sleep && bcd[i].sleep;
if (sleep && Math.random() * 100 < variability) {
E = (int) (Math.random() * Max_Energy * 3 / 4) + Max_Energy / 4
+ 1;
P = (int) (Math.random() * Max_Patch * 3 / 4) + Max_Patch / 4
+ 1;
L = (int) (Math.random() * Max_Length * 3 / 4) + Max_Length / 4
+ 1;
S = (long) (Math.random() * 10000);
}
for (i = 0; i < Max_Number; i++) {
if (bcd[i].sleep && Math.random() * Max_Number * L < 1) {
bcd[i].init(E, P, L, S);
bcd[i].start();
}
bcd[i].show(g);
}
}
}
public void paint(Graphics g) {
g.setColor(Color.black);
g.fillRect(0, 0, width + 1, height + 1);
}
}
class BeaClassDemo {
public boolean sleep = true;
private int energy, patch, length, width, height, G, Xx, Xy, Ex[], Ey[], x,
y, Red, Blue, Green, t;
private Random random;
public BeaClassDemo(int a, int b, int g) {
width = a;
height = b;
G = g;
}
public void init(int e, int p, int l, long seed) {
int i;
energy = e;
patch = p;
length = l;
// 创建一个带种子的随机数生成器
random = new Random(seed);
Ex = new int[patch];
Ey = new int[patch];
Red = (int) (random.nextDouble() * 128) + 128;
Blue = (int) (random.nextDouble() * 128) + 128;
Green = (int) (random.nextDouble() * 128) + 128;
Xx = (int) (Math.random() * width / 2) + width / 4;
Xy = (int) (Math.random() * height / 2) + height / 4;
for (i = 0; i < patch; i++) {
Ex[i] = (int) (Math.random() * energy) - energy / 2;
Ey[i] = (int) (Math.random() * energy * 7 / 8) - energy / 8;
}
}
public void start() {
t = 0;
sleep = false;
}
public void show(Graphics g) {
if (!sleep)
if (t < length) {
int i, c;
double s;
Color color;
c = (int) (random.nextDouble() * 64) - 32 + Red;
if (c >= 0 && c < 256)
Red = c;
c = (int) (random.nextDouble() * 64) - 32 + Blue;
if (c >= 0 && c < 256)
Blue = c;
c = (int) (random.nextDouble() * 64) - 32 + Green;
if (c >= 0 && c < 256)
Green = c;
color = new Color(Red, Blue, Green);
for (i = 0; i < patch; i++) {
s = (double) t / 100;
x = (int) (Ex[i] * s);
y = (int) (Ey[i] * s - G * s * s);
g.setColor(color);
g.drawLine(Xx + x, Xy - y, Xx + x, Xy - y);
if (t >= length / 2) {
int j;
for (j = 0; j < 2; j++) {
s = (double) ((t - length / 2) * 2 + j) / 100;
x = (int) (Ex[i] * s);
y = (int) (Ey[i] * s - G * s * s);
g.setColor(Color.black);
g.drawLine(Xx + x, Xy - y, Xx + x, Xy - y);
}
}
}
t++;
} else {
sleep = true;
}
}
}
更多相关内容 -
Java—代码块详解
2021-09-16 20:36:40在java中,{ } 括起来的代码被称为代码块 代码块分类 普通代码块 类中方法的方法体 public class Main{ public static void main(String[] args) { { ...普通代码块 } } } 普通代码块使用不多,这里不...代码块概念
在java中,{ } 括起来的代码被称为代码块
代码块分类
普通代码块
类中方法的方法体
public class Main{ public static void main(String[] args) { { ...普通代码块 } } }
普通代码块使用不多,这里不过多讲解
构造代码块
也叫:实例代码块
定义在类中的代码块(不加修饰符)
构造代码块一般用于初始化实例成员变量public class Person { String name; String sex; int age; { //构造代码块 name = "花花"; sex = "女"; age = 3; } }
构造代码块会在创建对象时被调用,每次创建时都会被调用,优先于类构造函数执行
验证:
public class Person { String name; String sex; int age; { this.name = "花花"; this.sex = "女"; this.age = 3; } public static void main(String[] args) { Person person1 = new Person(); Person person2 = new Person(); Person person3 = new Person(); } }
打断点调试代码,你会发现:person对象均被初始化
使用打印再次验证:{ this.name = "花花"; this.sex = "女"; this.age = 3; System.out.println("我是实例代码块!!"); }
提供构造方法:public Person() { System.out.println("我是构造方法!!!"); }
输出结果:
以上验证了 构造代码块会在创建对象时被调用,每次创建时都会被调用,优先于类构造函数执行
JVM层面理解:
编译器在编译代码时,会将实例代码块中的内容拷贝到构造方法第一条语句前多个实例代码块最终会按照定义的先后顺序合并成一份,并将其拷贝到每个构造方法中
验证:public class Demo { int a; { a = 10; System.out.println("实例代码块1"); } { System.out.println("实例代码块2"); } public static void main(String[] args) { Demo demo = new Demo(); } }
就地初始化
//就地初始化 public class Person { String name = "嗯哼"; String sex = "Unknown"; int age = 0; // { //实例代码块 this.name = "花花"; this.sex = "女"; this.age = 3; System.out.println("我是实例代码块!!"); } //构造方法 public Person(){ System.out.println("我是构造方法!!!"); } public static void main(String[] args) { Person person1 = new Person(); Person person2 = new Person(); Person person3 = new Person(); } }
JVM层面理解:
编译期间,编译器会将就地初始化的内容拷贝到构造方法中,且拷贝在实例代码块之前
静态代码块
用 static{ } 包裹起来的代码片段
只会执行一次,静态代码块优先于构造代码块执行,一般用于初始化静态成员变量//静态代码块 static { System.out.println(money); money = 100; System.out.println(money); System.out.println("我是静态代码块!!!"); }
输出结果:
打断点,看调试过程:静态代码块在类加载时只执行一次
在类加载阶段执行,在编译阶段时,编译器会将多个静态代码块按照定义的先后次序依次合并,最终放在生成的方法中
验证:
public class Demo { static int b; static { b = 20; System.out.println("静态代码块1"); } static { System.out.println("静态代码块2"); } public static void main(String[] args) { Demo demo = new Demo(); } }
总结:
- 静态代码块不管生成多少个对象,其只会执行一次
- 静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
- Java代码在经过编译器编译之后,如果要运行必须先要经过类加载子系统加载到JVM中才能运行
- 如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次合并,最终放在生成的<>方法中,该方法在类加载时调用,并且只调用一次
补充:
javac:
用纯 Java 语言编写的一个编译器
.
按照 Java 语言的语法对源文件进行检测,是否违反语法规范
若不符合Java语法规范,则编译失败—报错;
若符合,则按照字节码文件规范生成相对应的字节码文件编译过程:简单了解Java编译原理
同步代码块
(后面再来进行补充~~)
-
25行Java代码将普通图片转换为字符画图片和文本
2021-04-23 10:34:06新建普通java 项目,Java单类实现代码,复制到java项目中,用idea编辑器 主方法运行。(引入的Class 都是JDK中自有的) import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.Buffer.原图
生成字符画文本(像素转换字符显示后,打开字符画显示相当于原图的好几倍大,不要用记事本打开,建议用notepad++等软件打开)
生成字符画图片(背景颜色和画笔颜色代码里可设置调节)
新建普通java 项目,Java单类实现代码,复制到java项目中,用idea编辑器 主方法运行。&#
-
关于Java类中的代码块 普通代码块和初始化代码块
2017-10-23 20:20:16在Java中存在代码块这一结构这一结构又主要分为普通代码块和初始化代码块两类。 一、普通代码块 普通代码块仅出现于方法中,起到分隔不同功能代码的作用,其运行顺序依据代码块出现的先后。 public static void main...在Java中存在代码块这一结构这一结构又主要分为普通代码块和初始化代码块两类。
一、普通代码块
普通代码块仅出现于方法中,起到分隔不同功能代码的作用,其运行顺序依据代码块出现的先后。
public static void main(String[] args){ { int x=3; System.out.println("1,普通代码块内的变量x="+x); } { int x=1; System.out.println("主方法内的变量x="+x); } { int y=7; System.out.println("2,普通代码块内的变量y="+y); } } }
二、初始化代码块
初始化代码块分为静态初始化代码块和非静态初始化代码块两类。
初始化代码块出现于类的主体中,在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。如果使用 static 修饰初始化块,就称为静态初始化块。这些初始化代码块起到了类的构造方法的作用,当无参实例化一个类的对象时,完全可以用代码块代替构造方法的位置。
非静态初始化块隐性运行于创建类的对象时,顺序依据代码块的先后排列,且这些代码块间可以存在其他方法。也就是说在实例化这个对象时,会从类的头到尾检索一遍来运行初始化代码块。
注意:
1.这些静态代码块运行于类的初始化方法之前,且因为其没有名称,故只会在创建对象时隐性运行一次。
2.定义多个初始化代码块无意义。
现在再说静态初始化代码块,静态初始化代码块又被称为是“类初始化代码块”,因其早在系统将类初始化时就执行了,而不是在创建对象时执行。同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。
而且要注意的是,系统在初始化类时,不仅会初始化该类中的静态初始化代码块,还回上溯到引用的包中的类的静态初始化代码块。
-
Java 很普通的代码执行很慢
2021-03-08 07:05:55大家好,我们生产系统上面现在有一个接口,这个接口里面的代码有的时候运行很慢,后来...我去生产上把日志下载下来,发现在 2020/4/7 14:25:22 的时候,有一段很普通的 JAVA 代码(就是从一个对象上面调 get 方法,获... -
Java 静态代码块详解
2020-05-31 11:22:14静态代码块及多种代码块的相关知识 -
JAVA 的普通加法运算
2021-03-15 02:37:05利用Scanner类,其中数字输入的函数,利用while循环结构来得到输入的实数,当输入的是字母时,结束循环源代码:package ccc;import java.util.*;public class vvv {public static void main(String[] args){System.... -
Java:构造方法与普通/静态/构造代码块
2020-07-26 10:28:15文章目录声明构造方法普通代码块静态代码块构造...在java中,普通方法可以和构造方法同名,但是必须带有返回值。 2.构造方法的功能主要用于在类创建时定义初始化的状态。没有返回值,也不能用void来进行修饰。这就保 -
java软件里面的跳转页面代码实现
2021-02-25 18:50:391.RequestDispatcher.forward()是在服务器端起作用,当使用forward()时,Servletengine传递HTTP请求从当前的ServletorJSP到另外一个Servlet,JSP或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向... -
抽象类和普通类的区别是什么?java类和抽象类的区别
2021-02-27 14:38:55你知道java当中的普通类和抽象类之间有什么区别吗?这两者的不同之处究竟是什么呢?下面就和小编一起来详细的了解一下吧。一、抽象类和普通类区别抽象类和普通类的区别我们做了以下7点简单的总结,相信看了的朋友应该... -
java抽象类介绍及代码
2022-01-18 23:20:58public void eat() { } } 5.abstract不能和final一起使用,final禁止重写,与abstract冲突 6.abstract不能和static一起使用? 7.抽象类不能实例化 8.privated abstract 不能实现,因为抽象类需要继承和重写,而... -
java代码的执行顺序
2022-04-21 10:20:24java代码的执行顺序如下: 开始 --> 父类的静态代码块 --> 子类的静态代码块 --> 父类的普通代码块 --> 父类的构造方法--> 子类的普通代码块 --> 子类的构造方法 --> 结束 -
JAVA代码Review
2018-03-28 11:08:45代码review是指在软件开发过程中,通过对源代码进行系统性检查来确认代码实现的质量保证机制 为什么不做代码Review? 业务需求大,工作时间紧张 项目小,协作的人少,没必要 为什么要做代码Review? 提高... -
用java写一个登陆界面代码。
2021-02-12 18:20:27展开全部概述具体框架使用jframe,文本框组件62616964757a686964616fe58685e5aeb931333365656631:JTextField;...标签组件:JLabel;复选框组件:JCheckBox;...登录界面:代码实例import javax.swing.*;import... -
java代码执行顺序详解
2019-07-15 11:15:19今天我们来聊一聊Java的基础:类中方法的执行顺序。 首先直接给出类代码的执行顺序 但是我们必须要注意的是: 静态代码块只执行一次,也就是说你不管创建的多少对象,静态代码只执行一次。 这是为什么啦? ... -
L2-039 清点代码库 - java
2021-05-15 11:18:29Java (javac) 时间限制 1500 ms 内存限制 128 MB Python (python3) 时间限制 1500 ms 内存限制 64 MB 其他编译器 时间限制 500 ms 内存限制 64 MB 上图转自新浪微博:“阿里代码库有几亿行代码,但其中有很多功能... -
java判断是否是三角形的方法(附代码)
2021-03-10 08:11:24java中判断是否三角形的方法:(推荐:java视频教程)package Angle;import java.util.Scanner;public class Angle {//判断是否能构成三角形public static int JudgeAngle(int a,int b,int c){if(a+b>c&&a+... -
Java语言课程设计——简易计算器(详细含报告和源代码)
2021-10-08 14:23:46欢迎来到<IT_WEH_coder>的博客。...系统分析与设计2.1设计目的2.2功能需求2.3系统运行结构图2.4系统功能代码设计2.4.1包和类的说明2.4.2简易计算器的源代码清单3.系统调试3.1编写源程序界面3.. -
java代码混淆
2018-12-01 10:38:28代码打包以及加入混淆, 代码混淆是为了防止反编译。如果没有对代码混淆,那么其他人很容易就可以得到你的项目中的所有代码。而混淆之后,其他人就没那么容易获得了。 保护软件有着双重意义: 一是保护软件的知识... -
java入职新公司如何快速熟悉和看懂代码建议!
2021-03-24 18:51:24项目都不知道是干什么的,千万不要一开始就选择看代码看技术,项目的技术往往是结合业务相关联的 1.公司入职java,前3天或前一周,正常来说是不会接手开始做项目。达环境配启动项目,不要浪费太多时间,最多半天... -
Java初始化块(静态代码块和非静态代码块)
2018-03-19 10:24:41Java使用构造器来对单个对象进行初始化操作,使用构造器先完成整个Java对象的状态初始化,然后将Java对象返回给程序,从而让该Java对象的信息更加完整。与构造器作用非常类似的是初始化块,它也可以对Java对象进行... -
java课程设计(简易计算器)源代码 JAVA 源代码有解析 免费分享
2020-12-07 14:13:48标题:java课程设计简易计算器源代码 JAVA 源代码有解析 免费分享 先言 这是我挺久以前课程设计java写的计算器,只能实现基本的功能,我现在分享出来希望能帮助到别人。写得其实挺一般的,见谅见谅。有课程设计任务... -
javaweb 图书管理系统完整代码_基于Java web的图书管理系统
2020-10-25 17:11:00B-E00029点击查看(分类规则)项目类型:Java EE项目(非开源)项目名称:基于Java web的图书管理系统(library_system)当前版本:V2.0.2版本难度等级:✩✩复杂程度:✩✩点击查看难度等级用户类型:普通用户和管理员(双... -
JAVA实现普通用户和管理员用户同页面登录
2021-03-08 14:57:30现在把用Java实现这个功能的代码和思想写一下。1.前端JSP页面效果及代码:1.1效果图 1.2前端表单代码用户名:密码:${error_msg }2.后台java代码:2.1IndexServlet里的Login方法代码:public void Login... -
Java爬虫实战代码
2018-02-26 17:57:32java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.net.URLConnection; import java.util.... -
java之在普通代码中获取bean的几种方式
2018-08-29 16:00:48普通代码中获取bean的几种方式 最近在项目中,因代码模式要求,需要在普通类中去主动调用bean实例,经过参考分析,做乐如下的整理。 在初始化时保存ApplicationContext对象 通过Spring提供的utils类获取... -
Java代码如何进行优化?
2018-04-02 15:34:03Java代码优化是Java编程开发很重要的一个步骤,Java代码优化要注重细节优化,一个两个的细节的优化,产生的效果不大,但是如果处处都能注意代码优化,对代码减少体积、提高代码运行效率是有巨大帮助的,还能在一定...