zoukankan      html  css  js  c++  java
  • 再看Java基础 换种方式看Java

    现在回想基础,其实就之前翁大大讲得那些还是记忆尤新的.
    比如一个软件,建立一份.java文件,其实已经预备着你要输入些什么?
    输入什么呢?
    比如输入一下自己的新年目标啊~

    package com.example.waitspringdemo.goal;
    
    /**
     * @Author: zhangQi
     * @Date: 2021-12-28 13:55
     */
    public class MakeMoney {
    }
    
    

    感谢编辑器,仿佛瞬间自己赚了很多钱,不过要赚钱则需要有一定的属性.
    那么需要什么呢?可能需要一定的学历,一定的知识,个人素养以及强大的内心.
    那这个class就可以进行填充了.

    package com.example.waitspringdemo.goal;
    
    /**
     * @Author: zhangQi
     * @Date: 2021-12-28 13:55
     */
    public class MakeMoney {
        //let's achieve it
    
        /**
         * 学历等级
         */
        private String highSchoolDegree;
    
        /**
         * 知识储备
         */
        private String knowledgeReserves;
    
        /**
         * 个人素养
         */
        private String personalQualities;
    
        /**
         * 强大内心
         */
        private String strongHeart;
    
    }
    
    

    好的,现在这个class类看上去是这样了.

    光有这些还不足够,要有行动力.不能只做思想上的巨人,行动上的矮子.

    点击亲爱的idea编辑器,进行项目编译,查看这个赚钱class

    
      // IntelliJ API Decompiler stub source generated from a class file
      // Implementation of methods is not available
    
    package com.example.waitspringdemo.goal;
    
    public class MakeMoney {
        private java.lang.String highSchoolDegree;
        private java.lang.String knowledgeReserves;
        private java.lang.String personalQualities;
        private java.lang.String strongHeart;
    
        public MakeMoney() { /* compiled code */ }
    }
    

    complied code是构造器的注解,表示这些是编译后的代码
    通过记事本查看:

    漱壕   4 
         highSchoolDegree Ljava/lang/String; knowledgeReserves personalQualities strongHeart <init> ()V Code LineNumberTable LocalVariableTable this +Lcom/example/waitspringdemo/goal/MakeMoney; 
    SourceFile MakeMoney.java 	 
     )com/example/waitspringdemo/goal/MakeMoney java/lang/Object !                            	 
         /     *? ?            
                     
    

    这个乱码也是醉了,用sublime打开看一下:

    cafe babe 0000 0034 0015 0a00 0300 1207
    0013 0700 1401 0010 6869 6768 5363 686f
    6f6c 4465 6772 6565 0100 124c 6a61 7661
    2f6c 616e 672f 5374 7269 6e67 3b01 0011
    6b6e 6f77 6c65 6467 6552 6573 6572 7665
    7301 0011 7065 7273 6f6e 616c 5175 616c
    6974 6965 7301 000b 7374 726f 6e67 4865
    6172 7401 0006 3c69 6e69 743e 0100 0328
    2956 0100 0443 6f64 6501 000f 4c69 6e65
    4e75 6d62 6572 5461 626c 6501 0012 4c6f
    6361 6c56 6172 6961 626c 6554 6162 6c65
    0100 0474 6869 7301 002b 4c63 6f6d 2f65
    7861 6d70 6c65 2f77 6169 7473 7072 696e
    6764 656d 6f2f 676f 616c 2f4d 616b 654d
    6f6e 6579 3b01 000a 536f 7572 6365 4669
    6c65 0100 0e4d 616b 654d 6f6e 6579 2e6a
    6176 610c 0009 000a 0100 2963 6f6d 2f65
    7861 6d70 6c65 2f77 6169 7473 7072 696e
    6764 656d 6f2f 676f 616c 2f4d 616b 654d
    6f6e 6579 0100 106a 6176 612f 6c61 6e67
    2f4f 626a 6563 7400 2100 0200 0300 0000
    0400 0200 0400 0500 0000 0200 0600 0500
    0000 0200 0700 0500 0000 0200 0800 0500
    0000 0100 0100 0900 0a00 0100 0b00 0000
    2f00 0100 0100 0000 052a b700 01b1 0000
    0002 000c 0000 0006 0001 0000 0007 000d
    0000 000c 0001 0000 0005 000e 000f 0000
    0001 0010 0000 0002 0011 
    

    在我删除了比较大段的字节码后,发现.java文件依旧如初.
    加入lombok @Data并main一下

        public static void main(String[] args) {
            MakeMoney makeMoney = new MakeMoney();
            System.out.println(makeMoney);
    
            makeMoney.setHighSchoolDegree("本科");
            makeMoney.setKnowledgeReserves("计算机");
            System.out.println(makeMoney);
        }
    
    MakeMoney(highSchoolDegree=null, knowledgeReserves=null, personalQualities=null, strongHeart=null)
    MakeMoney(highSchoolDegree=本科, knowledgeReserves=计算机, personalQualities=null, strongHeart=null)
    

    加上测试后发现该.java文件似乎没受到什么影响

    后来觉得也没问题啊,因为是.java编译后生成的.class,反之则不是.
    我继而清空.class文件
    运行同样这个类中的main方法,爆出如下错误:

    ava.lang.ClassFormatError: Truncated class file
    	at java.lang.ClassLoader.defineClass1(Native Method)
    	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    	at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
    	at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
    	at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
    	at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    	at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)
    Error: A JNI error has occurred, please check your installation and try again
    Exception in thread "main" 
    

    错误说是一个类格式化Error:被删节了的class文件
    执行亲爱的idea的重新编译.java文件选项,再次输出正常结果

    MakeMoney(highSchoolDegree=null, knowledgeReserves=null, personalQualities=null, strongHeart=null)
    MakeMoney(highSchoolDegree=本科, knowledgeReserves=计算机, personalQualities=null, strongHeart=null)
    

    参考:https://www.cnblogs.com/mar-q/p/7295088.html

  • 相关阅读:
    protected、public、private
    第十五章 面向对象程序设计
    第十四章 重载运算与类型转换
    聚合类
    explicit构造函数
    allocator类
    直接管理内存——new和delete
    智能指针
    Bugku-CTF之点击一百万次
    Bugku-CTF之flag在index里
  • 原文地址:https://www.cnblogs.com/ukzq/p/15740358.html
Copyright © 2011-2022 走看看