java类加载器的问题

问题描述

看一段代码:public class String {public static void main(String [] args) {System.out.println(1);}}为什么会报错,是不是加载器加载Sting时加载了自己写的String类,求大牛

解决方案

JVM会默认加载你自己写的String,你的main方法参数 String args[] 的类型其实是你自己的String类型,而你又没有定义这个参数类型的main方法
解决方案二:
补充楼上,如果你非要这么写,只能这样public class String {public static void main(java.lang.String [] args) {System.out.println(1);}}
解决方案三:
你这样,系统会搞不清楚,你这个String类 是用户的还是 系统的,它会默认为系统的,,但是系统的String类 没有main这个方法.....所有 控制台报错,说找不到。。。还有 尽量不要 用这些关键字 做用户的类名。。。很忌讳。。。。。。。

时间: 2024-12-02 22:03:15

java类加载器的问题的相关文章

一篇文章读懂Java类加载器

Java类加载器算是一个老生常谈的问题,大多Java工程师也都对其中的知识点倒背如流,最近在看源码的时候发现有一些细节的地方理解还是比较模糊,正好写一篇文章梳理一下. 关于Java类加载器的知识,网上一搜一大片,我自己也看过很多文档,博客.资料虽然很多,但还是希望通过本文尽量写出一些自己的理解,自己的东西.如果只是重复别人写的内容那就失去写作的意义了. 类加载器结构 类加载器结构 名称解释: 根类加载器,也叫引导类加载器.启动类加载器.由于它不属于Java类库,这里就不说它对应的类名了,很多人喜

深入探讨Java类加载器

类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一. 它使得 Java 类可以被动态加载到 Java 虚拟机中并执行.类加载器从 JDK 1.0 就出现了,最初是为了满足 Java Applet 的需要而开发出来的.Java Applet 需要从远程下载 Java 类文件到浏览器中并执行.现在类加载器在 Web 容器和 OSGi 中得到了广泛的使用.一般来说,Java 应用的开发人员不需要直接同类加 载器进行交互.Java 虚拟机默认的行为就已经足够满足大多数情况的需求

Java 类加载器(转)

 java虚拟机中可以安装多个类加载,系统默认三个主要类加载器,每个类负责加载特定位置的类:BootStrap(内嵌在java虚拟机中由C++编写),ExtClassLoader,AppClassLoad    类加载器也是java类,因为其他是java类的类加载器本身也要被类加载器加载,显然必须有第一个类加载器不是java类,这正是BootStrap.    java虚拟机中的所有类装载器采用具有父子关系的树形结构进行组织,在实例化每个类装载器对象时,需要为其指定一个父级类装载器对象    或

java类加载器-关于java类加载的双亲委托机制的一点疑问

问题描述 关于java类加载的双亲委托机制的一点疑问 class Clazz2{ public static void main(String[] args) { ClassLoader classLoader = new ClassLoader() { @Override public Class<?> loadClass(String name) throws ClassNotFoundException { try { FileInputStream fileInputStream =

Java类加载器学习2——自定义类加载器和父类委托机制带来的问题

  一.自定义类加载器的一般步骤   Java的类加载器自从JDK1.2开始便引入了一条机制叫做父类委托机制.一个类需要被加载的时候,JVM先会调用他的父类加载器进行加载,父类调用父类的父类,一直到顶级类加载器.如果父类加载器加载不了,依次再使用其子类进行加载.当然这类所说的父类加载器,不一定他们之间是继承的关系,有可能仅仅是包装的关系.   Java之所以出现这条机制,因为是处于安全性考虑.害怕用户自己定义class文件然后自己写一个类加载器来加载原本应该是JVM自己加载的类.这样会是JVM虚

java 类加载器 疑惑

问题描述 已知信息:1. 不同的类加载器对应不同的命名空间,不同的类加载器加载的类不能相互访问2. String类是由启动类加载器BootStrap加载的加入我自己创建了一个类A,A里用到String类,String类是由启动类加载器加载的,而类A是有应用类加载器(加载类路径中的类)加载的.疑问:类A和String类由不同的类加载器加载,为什么可以相互访问哪? 问题补充:多谢你们的回答,但我觉得你们的回答跟<深入Java虚拟机>第三章安全 3.3节类装载器体系结构讲的不一样啊,里面举了java

Java类加载器(二)——自定义类加载器

  用户定制自己的ClassLoader可以实现以下的一些应用: 自定义路径下查找自定义的class类文件,也许我们需要的class文件并不总是在已经设置好的Classpath下面,那么我们必须想办法来找到这个类,在这种清理下我们需要自己实现一个ClassLoader. 确保安全性:Java字节码很容易被反编译,对我们自己的要加载的类做特殊处理,如保证通过网络传输的类的安全性,可以将类经过加密后再传输,在加密到JVM之前需要对类的字节码在解密,这个过程就可以在自定义的ClassLoader中实现

Java类加载器(一)——类加载器层次与模型

类加载器   虚拟机设计团队把类加载阶段中的"通过一个类的全限定名来获取描述此类的二进制字节流"这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类.实现这个动作的代码模块称为"类加载器". 类加载器层次(等级)   从JVM的角度来讲,只存在两种不同的类加载器.   第一类是启动类加载器(Bootstrap ClassLoader):这个类加载器主要加载JVM自身工作需要的类.这个类加载器由C++语言实现(特指HotSpot),是虚拟机

Java类加载器学习1——类加载器的基本概念

  一.程序使用java类的运行顺序   当程序主动使用某个类的时候,若该类还未被加载至内存中,系统会通过加载,连接,初始化三个步骤对类进行初始化,有事也把这三个步骤称为类加载或者类的初始化.   1 类的加载 将被编译的.java而成为.class字节码读入JVM内存并为之创建一个java.lang.Class对象,也就是说当程序中使用任何类的时候系统都会为之建立一个java.lang.Class对象.类的加载由类加载器完成,类加载器通常有JVM提供,我们称JVM提供的类加载器为系统类加载器.

Java类加载器以及类加载器的委托模型

我们知道,我们在Java中用到的所有的类都是通过类加载器ClassLoader加载到JVM中的,我们还知道类加载器也对应着一个类,既然这样那么我们会想那么ClassLoader类是由谁加载的呢? 其实在Java中有许许多多的类加载器,我们甚至可以写自己的类加载器. 其中主要三个类加载器(他们是树形关系)是: BootStrap:在java虚拟机启动的时候会利用这个类加载器来加载 JDK安装目录下的 /JRE/LIB/rt.jar 也就是系统默认导入的一些类例如System类,这个类加载器不是类