URL类的实例化 [Java]

URL类的实例化

首先我们要知道获得URL类的实例化都是通过构造方法直接获取的
为了表示URL,java.net包中实现了类URL,我们就可以通过下面的四种构造器来初始化一个URL对象
  1. public URL(String spec);
    
    • 通过一个表示URL地址的字符串可以直接构造一个URL对象
    • eg: URL url = new URL("http;//www.atguigu.com/’);
  2. public URL(URL context , String spec);
    
    • 通过基URL和相对URL构造一个URL对象
    • eg: new URL(url , “download.html”);
  3. public URL(String protocol , String host , String file);
    
    • 通过: 协议名,主机名/域名,文件名来构造一个URL对象
      • 一个域名之下可以有多个主机名
    • eg: new URL(“http” , “www.atguigu.com” , “download.html”);
  4. public URL(String protocol , String host , int port , String file);
    
    • 通过 : 协议名,主机名/域名,端口号,文件名来构造一个URL对象
    • eg: new URL(“http” , “www.atguigu.com”,8080,“download.html”);
注意:URL类的构造器都会声明出一个编译器异常: java.net.MalformedURLException;
  • java.net.MalformedURLException继承于java.io.IOException
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
A: 要实例化同一个包中所有,可以遵循以下步骤: 1.获取包名: ```java String packageName = "com.example.packageName"; ``` 2.获取包下的所有名 ```java Class<?>[] classes = PackageUtil.getClasses(packageName); ``` 3.遍历所有实例化 ```java for(Class<?> cls : classes){ Object obj = cls.newInstance(); // 对obj进行操作 } ``` PackageUtil.getClasses()方法实现如下: ```java public class PackageUtil { public static Class<?>[] getClasses(String packageName) throws ClassNotFoundException, IOException { ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); assert classLoader != null; String path = packageName.replace('.', '/'); Enumeration<URL> resources = classLoader.getResources(path); List<File> dirs = new ArrayList<>(); while (resources.hasMoreElements()) { URL resource = resources.nextElement(); dirs.add(new File(resource.getFile())); } ArrayList<Class<?>> classes = new ArrayList<>(); for (File directory : dirs) { classes.addAll(findClasses(directory, packageName)); } return classes.toArray(new Class[0]); } private static List<Class<?>> findClasses(File directory, String packageName) throws ClassNotFoundException { List<Class<?>> classes = new ArrayList<>(); if (!directory.exists()) { return classes; } File[] files = directory.listFiles(); assert files != null; for (File file : files) { if (file.isDirectory()) { assert !file.getName().contains("."); classes.addAll(findClasses(file, packageName + "." + file.getName())); } else if (file.getName().endsWith(".class")) { classes.add(Class.forName(packageName + '.' + file.getName().substring(0, file.getName().length() - 6))); } } return classes; } } ``` 注意:该方法只能实例化无参构造方法的,如有参数构造方法要进行额外处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值