A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在做入学测试题,发现自己写的类的构造函数居然不能被访问,后来才发现,必须用public修饰一下。但是不是说默认权限在一个包内可以访问的么?为什么一定要用public修饰才行?我试了protected也不行,这是什么原理?
  1. package com.itheima;

  2. import java.lang.reflect.Constructor;

  3. /**
  4. * 第8题:编写一个类,增加一个实例方法用于打印一条字符串。并使用反射手段创建该类的对象, 并调用该对象中的方法。
  5. * @author A
  6. *
  7. */
  8. public class Test8 {

  9.         public static void main(String[] args) {
  10.                 //调用class字节码文件的方法使用无参的构造函数创建实例,并调用print方法
  11.                 try {
  12.                         PrintClass.class.newInstance().print("www.itheima.com");
  13.                 } catch (InstantiationException | IllegalAccessException e) {
  14.                         throw new RuntimeException("类名错误!");
  15.                 }
  16.                 //当然,也可以先通过class的字节码文件得到构造方法,然后使用构造方法的newInstance方法创建实例,再调用。
  17.                 try {
  18.                         Constructor constructor = PrintClass.class.getConstructor();
  19.                         PrintClass pc = (PrintClass)constructor.newInstance();
  20.                         pc.print("Hellow itheima!");
  21.                 //这里异常太多了,为了方法观看,就先一起处理了。
  22.                 } catch (Exception e){
  23.                         throw new RuntimeException("获取构造方法或创建实例失败。");
  24.                 }
  25.         }       
  26. }

  27. //创建一个类
  28. class PrintClass{
  29.         //空参数的构造方法
  30.         public PrintClass(){}
  31.         //实例方法:打印传入的字符串。
  32.         public void print(String str){
  33.                 System.out.println(str);
  34.         }
  35. }
复制代码

5 个回复

倒序浏览
如果把PrintClass中构造函数的public删掉就不行
回复 使用道具 举报
不知道具体为什么这样设计,反正获得构造方法的两个函数都明确的写着得到的是公共构造方法。
回复 使用道具 举报
水竹 发表于 2014-10-10 12:16
不知道具体为什么这样设计,反正获得构造方法的两个函数都明确的写着得到的是公共构造方法。 ...

我去google了一下也没有查到。坐等大神解惑了。
回复 使用道具 举报
陈兆辉 发表于 2014-10-10 13:04
我去google了一下也没有查到。坐等大神解惑了。

建议“适当囫囵吞枣”吧……
回复 使用道具 举报
水竹 发表于 2014-10-10 13:16
建议“适当囫囵吞枣”吧……

没事,我就偶尔来论坛看一下,没准就有大神来了呢,嘿嘿。谢啦!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马