JAVA中构造器可以放在方法上面吗

如题,JAVA类中属性,方法,构造器,代码块位置有规定吗,还是说可以随意变动呢

如题是给了题目了吗,这边没有显示呢。

如你所说,题主是不明白 Java 类中属性构造器、方法到一些编程规范是吗?

简单说一下:

顺序其实是没有的,不会影响最终类使用的一致性,但从类加载上来说的话,顺序不同会导致谁先执行先后执行。

因为编译器总是从上往下执行的嘛

一个类变量和类方法会先于实例变量和实例方法。
怎么区分?有 static 的就是类变量或者类方法。

从执行次数上来讲代码块,类代码块也就是静态代码块只会执行一次,实例代码块当你每次创建实例都是执行,区分跟上面一样。

类代码块(静态代码块)

static {
System.out.println("静态代码块");
}

实例代码块(代码块)

{
System.out.println("代码块");
}

没有规定顺序,随意

随意变动,但是建议构造器放在方法上面,因为jdk源码就是怎么弄点顺序,至于其他地方顺序你也是可以参考源码中怎么排序的

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/232316
  • 这篇博客你也可以参考下:java开发中遇到的问题及解决方法
  • 这篇博客也不错, 你可以看下java开发中遇到的问题及解决方法
  • 除此之外, 这篇博客: Java 反射判断类中是否包含某个方法 Java反射判断类中是否存在某个属性(字段)中的         Java 反射判断类中是否包含某个方法 Java反射判断类中是否存在某个属性(字段) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    一、前言

            在java中,可以通过反射获取类中的所有属性和方法,要判断类中是否包含某个方法或某个属性,使用常见的 getMethod() / getDeclaredMethod() 和 getField() / getDeclaredField() 即可获得对象方法、属性;再判断对象是否为null,即属性是否存在。

            这里有一个问题,若当前类的父类的私有属性、私有方法;是获取不到的,这导致判断并不是很准确,有什么更好的办法呢?

    二、是否存在某个方法

            1、常规判断方法如下 --- 不够完善 :

        /**
         * @Description: 判断是否包含某个方法
         * @param clzz  
         * @param methodName 方法名称
         * @param argsType 参数类型
         * @return boolean
         * @version v1.0
         * @author wu
         * @date 2022年5月3日 下午5:50:13
         */
        public boolean hasMethod(Class clzz, String methodName, Class[] argsType) {
            // 从当前类查找
            try {
                Method declaredMethod = clzz.getDeclaredMethod(methodName, argsType);
                if (declaredMethod != null) {
                    return true;
                }
            } catch (NoSuchMethodException e) {
            }
    
            // 从父类中查找
            try {
                Method method = clzz.getMethod(methodName, argsType);
                if (null != method) {
                    return true;
                }
            } catch (NoSuchMethodException e) {
            }
            return false;
        }

            2、新的方法 --- 判断父类的私有方法

        /**
         * @Description: 判断类中是否包含某个方法
         * @param clzz
         * @param methodName
         * @param argsType
         * @return
         * @return boolean
         * @version v1.0
         * @author wu
         * @date 2022年5月2日 下午11:03:56
         * @see org.springframework.util.ReflectionUtils
         */
        public boolean hasMethod2(Class clzz, String methodName, Class[] argsType) {
            Method method = ReflectionUtils.findMethod(clzz, methodName, argsType);
            if(null != method){
                return true;
            }
            return false;
        }

    三、是否存在某个字段

            1、判断是否存在某个字段 --- 不够完善:

    public boolean hasField(Class clzz, String fieldName) {
        // 从当前类中查找
        Field declaredField = null;
        try {
            declaredField = clzz.getDeclaredField(fieldName);
        } catch (NoSuchFieldException e) {
    
        }
        if (null != declaredField) {
            return true;
        }
        // 从父类中查找 -- 仅限public方法
        Field field = null;
        try {
            field = clzz.getField(fieldName);
        } catch (NoSuchFieldException e) {
    
        }
        if (null != field) {
            return true;
        }
        return false;
    }

            2、新的方法 --- 判断父类的私有属性

      /**
         * @Description: 判断类中是否包含某个字段
         * @param clzz
         * @param fieldName
         * @return boolean
         * @version v1.0
         * @author wu
         * @date 2022年5月2日 下午11:03:34
         * @see org.springframework.util.ReflectionUtils
         */
        public boolean hasField2(Class clzz, String fieldName) {
            Field field = ReflectionUtils.findField(clzz, fieldName);
            if (field != null) {
                return true;
            }
            return false;
        }

    四、总结

            1、ReflectionUtils 工具类:位于 spring-core 包,完整包名是:org.springframework.util.ReflectionUtils

            2、ReflectionUtils.findField() 方法能获取到父类的私有属性,原理也是很简单的:

    • 获取当前类的所有属性,判断有没有获取到
    • 获取上一级父类的Class对象 ,继续获取所有属性判断
    • 当上级父类 不等于 Object.class 时,重复执行上一个步骤

    参考资料: 

    getFields和 getDeclaredFields 方法的区别

                      getMethods 和 getDeclaredMethods 方法的区别​​​​​​​


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^