十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
java本就是开源的,你加密感觉怪怪的。
创新互联从2013年开始,是专业互联网技术服务公司,拥有项目成都网站设计、成都网站制作、外贸网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元宝山做网站,已为上家服务,为宝山各地企业和个人服务,联系电话:028-86922220
想防止反编译,最简单的方法就是你可以向Jar注入无效代码。比如建一个类,建一个没有意义的方法private class Invalid{ },然后输出为jar。用解压缩软件打开这个jar,以文本方式找到那个类的class,然后将那个方法名的一个字母删掉,然后更新入压缩文件中。用jd-gui反编译提示错误。这种方式不能用于android中。
还有种方法就是混淆代码,加密class和高级加密class,方式比较复杂,可以自行百度。
java的虚拟机有一个GC守护线程,在启动程序后就会自动监管程序内所有存在堆里的对象,在其没有指向本体的变量名或者引用,失去指针时就会自动被GC回收。
当然也有一些需要手动回收的,比如流之类的,以及一些用java对象名指向其他(如IBM公司的DOMINO中C,C++)底层语言对象的情况也要手动回收,但是这种情况很少见,也一般有专门的回收方法,不是一个=null就可以回收的
看注释:
import java.awt.GridLayout;
import javax.swing.*;
public class LoadForm extends JFrame{
private JPanel jpanel1;
private JTextField jtext1;
private JPasswordField password;
private JLabel jlable1;
private JLabel jlable2;
private JButton button1;
private JButton button2;
public LoadForm()
{
super("商品管理系统");
this.setLayout(null);
GridLayout layout=new GridLayout(3,3,10,10);//这句保留
jpanel1=new JPanel();
//jpanel1.setLayout(null);//jpanel1的布局不能为空
jlable1=new JLabel("用户名");
jlable2=new JLabel("密 码");
jtext1=new JTextField();
password=new JPasswordField();
button1=new JButton("确定");
button2=new JButton("取消");
jpanel1.add(jlable1);
jpanel1.add(jtext1);
jpanel1.add(jlable2);
jpanel1.add(password);
jpanel1.add(button1);
jpanel1.add(button2);
//this.add(jpanel1);//写法错误
this.setContentPane(jpanel1);//设置jpanel1为Frame的内容面版
this.setBounds(200,200,100,100);
//this.setSize(200,200);
this.setVisible(true);
}
//main方法测试
public static void main(String args[]){
new LoadForm();
}
}
JVM具有自己的内存回收机制:
参考
对象创建-对象丢弃-对象回收
1)对象丢弃
JAVA中的回收机制包含的一种叫引用计数法,用来回收垃圾。当所有对该对象的引用不存在时,则将该对象置于待回收列表中,但并不立即销毁。
2)对象回收
因为对象回收需要较大的系统开销,JAVA中的回收机制包含其它其它算法用于判断何时及如何做回收。一般来说,当满足两个条件:有对象要回收并且系统需要回收,如JVM内容空间紧张时,立即回收。
根据上述,要影响回收的话,可以使用方法:1、把所有对该对象引用移走;2、调用System.gc(),一般来说JVM自己的回收器会在某些情况下自动扫描需要回收的对象,调用该方法可以让扫描提前,但不是立即。
回收时会调用对象的finalize方法,所以可以修改该方法来对控制对象的销毁。不过它与C++中的析构函数不同的地方在于析构函数是在对象离开作用域时调用的。