java Abc成功 java java获取bin的上级目录录/Abc 提示找不到main类 java java获取bin的上级目录录.Abc 提示找不到main类 请问如何解决

String fileUrl = "http://file.51bm.net.cn/group1/M00/00/4E/eBrt_lhKrdSAG1PjAAEhA3gxveQ57.docx";String [] str = fileUrl.split("/");String file = str[str.length-1];System.out.println(file);String fileChangeName = "朝花夕拾.doc";String targetUrl = "";for (int i = 0 ; i & str.length - 1 ; i++ ) {targetUrl
= targetUrl+ str[i] + "/";}System.out.println(targetUrl + fileChangeName);
输出结果:
eBrt_lhKrdSAG1PjAAEhA3gxveQ57.docx
http://file.51bm.net.cn/group1/M00/00/4E/朝花夕拾.doc
喜欢的朋友可以扫描我的个人公众号,有好东西可以一起分享。
也可以微信搜索公众号:Java程序员那些事
java字符串截取、替换、删除、添加、查询等常用方法
1、length()字符串的长度
  例:char chars[]={'a','b'.'c'};
    String s=new String(chars);
    int len=s.le...
Java中String字符串的截取、替换、删除等操作
public class Texs {
public static void main(String[] args) {
String string=& abc def/ghi ...
java如何实现一个字符串的反转和替换
一、java字符串的反转
1.利用java字符串的拼接实现字符串的反转,代码如下:
public static String reverse(String s){
java string 字符串替换
i、replace方法
该方法的作用是替换字符串中所有指定的字符,然后生成一个新的字符串。经过该方法调用以后,原来的字符串不发生改变。例如:
java Sting 如何替换指定位置的字符
1、java Sting 如何替换指定位置的字符
public static void main(String[] args) {
String str = &****&;
字符串中替换指定字符String str = &Test string&;
StringBuilder strBuilder = new StringBuilder(str);
strBuilder....
import java.io.BufferedR
import java.io.BufferedW
import java.io.F
import java.io.Fi...
java实现字符串替换
* 请实现一个函数,将一个字符串中的空格替换成“%20”。
* 例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
* @author ...
Java中替换文本中指定字符
package a.b.c;
import java.io.BufferedR
import java.io.CharArrayW
import java.io.F
对字符的替换的两种方式Java实现
对字符的替换的两种方式Java实现
没有更多推荐了,Java程序员的必备知识-类加载机制详解
类加载器的概念
类加载器是一个用来加载类文件的类。
源代码通过javac编译器编译成类文件。然后JVM来执行类文件中的字节码来执行程序。类加载器负责加载文件、网络或其他来源的类文件。
JVM中类加载器的树状层次结构
Java 中的类加载器大致可以分成两类,一类是系统提供的,另外一类则是由 Java 应用开发人员编写的。
引导类加载器(bootstrap class loader):
它用来加载 Java 的核心库(jre/lib/rt.jar),是用原生C++代码来实现的,并不继承自java.lang.ClassLoader。
加载扩展类和应用程序类加载器,并指定他们的父类加载器,在java中获取不到。
扩展类加载器(extensions class loader):
它用来加载 Java 的扩展库(jre/ext/*.jar)。Java 的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 类。
系统类加载器(system class loader):
它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。可以通过 ClassLoader.getSystemClassLoader()来获取它。
自定义类加载器(custom class loader):
除了系统提供的类加载器以外,开发人员可以通过继承 java.lang.ClassLoader类的方式实现自己的类加载器,以满足一些特殊的需求。
Java类加载器基于三个机制:委托、可见性和单一性
是指将加载一个类的请求交给父类加载器,如果这个父类加载器不能够找到或者加载这个类,那么再加载它。
可见性的原理
是子类的加载器可以看见所有的父类加载器加载的类,而父类加载器看不到子类加载器加载的类。
单一性原理
是指仅加载一个类一次,这是由委托机制确保子类加载器不会再次加载父类加载器加载过的类。
类加载过程详解
JVM将类加载过程分为三个步骤:
装载(Load),链接(Link)和初始化(Initialize)
  查找并加载类的二进制数据;
  验证:确保被加载类信息符合JVM规范、没有安全方面的问题。
  准备:为类的静态变量分配内存,并将其初始化为默认值。
  解析:把虚拟机常量池中的符号引用转换为直接引用。
3)初始化:
  为类的静态变量赋予正确的初始值。
解析部分解释
Java 中,虚拟机会为每个加载的类维护一个常量池【不同于字符串常量池,这个常量池只是该类的字面值(例如类名、方法名)和符号引用的有序集合。 而字符串常量池,是整个JVM共享的】这些符号(如int a = 5;中的a)就是符号引用,而解析过程就是把它转换成指向堆中的对象地址的相对地址。
类的初始化步骤:
1)如果这个类还没有被加载和链接,那先进行加载和链接
2)假如这个类存在直接父类,并且这个类还没有被初始化(注意:在一个类加载器中,类只能初始化一次),那就初始化直接的父类(不适用于接口)
3)如果类中存在static标识的块,那就依次执行这些初始化语句。
类加载器的工作原理
当一个类加载和初始化的时候,类仅在有需要加载的时候被加载。假设你有一个应用需要的类叫作Abc.class,首先加载这个类的请求由Application类加载器委托给它的父类加载器Extension类加载器,然后再委托给Bootstrap类加载器。Bootstrap类加载器会先看看rt.jar中有没有这个类,因为并没有这个类,所以这个请求由回到Extension类加载器,它会查看jre/lib/ext目录下有没有这个类,如果这个类被Extension类加载器找到了,那么它将被加载,而Application类加载器不会加载这个类;而如果这个类没有被Extension类加载器找到,那么再由Application类加载器从classpath中寻找。记住classpath定义的是类文件的加载目录,而PATH是定义的是可执行程序如javac,java等的执行路径。
可见性机制
根据可见性机制,子类加载器可以看到父类加载器加载的类,而反之则不行。所以下面的例子中,当Abc.class已经被Application类加载器加载过了,然后如果想要使用Extension类加载器加载这个类,将会抛出java.lang.ClassNotFoundException异常。
单一性机制
根据这个机制,父加载器加载过的类不能被子加载器加载第二次。虽然重写违反委托和单一性机制的类加载器是可能的,但这样做并不可取。你写自己的类加载器的时候应该严格遵守这三条机制。
java.lang.ClassLoader类介绍
java.lang.ClassLoader类的基本职责就是根据一个指定的类的名称,找到或者生成其对应的字节代码,然后从这些字节代码中定义出一个Java 类,即 java.lang.Class类的一个实例。
ClassLoader提供了一系列的方法,比较重要的方法如:
自定义类加载器
public class MyClassLoader extends ClassLoader{
private String rootP
public MyClassLoader(String rootPath){
this.rootPath = rootP
protected Class findClass(String name) throws ClassNotFoundException {
//check if the class have been loaded
Class c = findLoadedClass(name);
if(c!=null){
//load the class
byte[] classData = getClassData(name);
if(classData==null){
throw new ClassNotFoundException();
c = defineClass(name,classData, 0, classData.length);
private byte[] getClassData(String className){
String path = rootPath+&/&+className.replace('.', '/')+&.class&;
InputStream is =
ByteArrayOutputStream bos =
is = new FileInputStream(path);
bos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int temp = 0;
while((temp = is.read(buffer))!=-1){
bos.write(buffer,0,temp);
return bos.toByteArray();
} catch (Exception e) {
e.printStackTrace();
is.close();
bos.close();
} catch (Exception e) {
e.printStackTrace();
测试自定义的类加载器
创建一个测试类HelloWorld
package testO
public class HelloWorld {
在D盘根目录创建一个testOthers文件夹,编译HelloWorld.java,将得到的class文件放到testOthers文件夹下。
利用如下代码进行测试
public class testMyClassLoader {
public void test() throws Exception{
MyClassLoader loader = new MyClassLoader(&D:&);
Class c = loader.loadClass(&testOthers.HelloWorld&);
System.out.println(c.getClassLoader());
说明HelloWorld类是被我们的自定义类加载器MyClassLoader加载的1 新式类和经典类
  查看父类信息的方法
类名.__bases__
  在Python3中默认是新式类, 不管写不写继承
  Python2中默认是经典类, 不继承任何, 父类为空
&&& class A:
&&& A.__bases__
  如果要定义新式类, 需要手动写入继承object
&&& class A:
&&& A.__bases__
2 类的定义
  定义格式为:
class 类名(父类列表):
  其中类名首字母一般大写
  父类可以有多个, Python支持多继承
3 类和对象
  类体中可以直接写入变量, 这是类的属性, 类和对象都可以调用该属性
  类体中可以定义函数, 此函数第一个参数始终是self, 用于给对象绑定方法
  其中有个特殊函数是 __init__(self, 参数列表)
    该函数在生成对象的时候会调用该方法, 且参数列表需要一一对应
  查看类的名称空间
类名.__dict__
  基本的定义情况
class Student:
country = 'China'
def __init__(self, ID, NAME, SEX, PROVINCE):
self.id = ID
self.name = NAME
self.sex = SEX
self.province = PROVINCE
def getScore(self):
print(self.score)
def setScore(self, score):
self.score = score
s1 = Student('000', 'weihuchao', 'male', 'chongqing')
print( s1.name )
s1.setScore(100)
s1.getScore()
Student.getScore(s1)
print( id(Student.getScore ) )
print( id(s1.getScore ) )
  类的作用
    1) 生成对象
对象名 = 类名(参数列表)
    2) 属性引用
类名.类属性
类名.函数(类的对象, 参数列表)
  对象的作用
    调用属性和绑定方法
    其中类的函数和对象的方法是不一样的, 尽管事实上实现的功能一致
    对象会先找自己空间是否有属性, 没有就会调用类中的
    如果实赋值语句, 则会绑定一个新的属性
    解除绑定用del
  继承会继承父类所有公开的属性和方法
  Python支持多继承
  Python3的多继承查找是c3算法, 可以使用__mro__查看顺序
类名.__mro__
  python2中经典类的多继承查找是 深度优先算法
5 组合和派生
  组合是在绑定属性的时候使用别的类的对象
  派生就是继承之后绑定新的属性和方法
6 接口和抽象类
  接口是光定义函数不实现
  但是无法限制子类继承的时候必须实现那些方法
  要实现限制子类必须实现那些方法, 可以定义一个抽象类
  抽象类是导入abc模块来实现
    需要继承内写入 metaclass=abc.ABCMeta
    给方法加入装饰器 abc.abstractmethod
  具体实现如下
import abc
class Animal(metaclass=abc.ABCMeta):
@abc.abstractmethod
def run(self):
@abc.abstractmethod
def speak(self):
class People(Animal):
def run(self):
def speak(self):
peo1=People()
print(peo1.tag)
7 super的写法
  在继承的时候, 可能会调用父类的方法, 但是由于python可以多继承, 所以直接指定父类来调用函数容易出现多种问题
  所以在调用父类方法的时候使用super方法
  格式如下
super(当前类名, self).__init__(参数列表)
  具体实例为
class People:
def __init__(self,name,sex,age):
self.name=name
self.age=age
self.sex=sex
def walk(self):
print('父类的walk()')
class Chinese(People):
country='China'
def __init__(self,name,sex,age,language='Chinese'):
super(Chinese,self).__init__(name,sex,age)
self.language=language
def walk(self):
super(Chinese, self).walk()
print('子类的walk()')
  父类引用指向子类对象
  具体就是 将子类的对象当做参数传入, 传入给他的父类对象, 用父类对象去调用方法, 实际上是调用的子类的方法而不是父类的方法
  具体实例如下
class Animal:
def run(self):
print('动物正在走')
class People(Animal):
def run(self):
print('人正在走')
class Pig(Animal):
def run(self):
print('pig is walking')
class Dog(Animal):
def run(self):
print('dog is running')
def func(obj):
  在类中, 可以通过将名字在前面加上__(双下划线)来标识这是私有变量
  在类中, 可以通过 __属性名 来调用该属性  
  在类外, 无法通过 __属性名 就找到该属性
  事实上, 改变了在定义后该变量名字会变成 _类名__属性名
  但是不建议通过这样的方法来调用该参数
  因而正常情况下, 会编写一个调用该属性的方法当做对外的接口
  具体实例如下
class Student:
def __init__(self, ID, NAME):
self.__id = ID
self.__name = NAME
def getId(self):
print(self.__id)
def setId(self, ID):
self.__id = ID
def getName(self):
print(self.__name)
def setName(self, NAME):
self.__name = NAME
10 使用property
  有的类里面可以通过函数来返回相关的属性值, 比如圆类中, 可以计算周长和面积
  但是这样的用户体验并不好, 我们希望直接通过 调用属性的形式来访问 这个样的属性值, 此时就可以是用装饰器property
  @property装饰器下的函数名, 可以通过 类名.函数名 直接获得该返回值
  具体实现代码如下
import math
class Circle:
def __init__(self,radius):
self.radius=radius
def area(self):
return math.pi * self.radius**2
def perimeter(self):
return 2*math.pi*self.radius
c=Circle(7)
print( c.area )
print( c.perimeter )
  @property只是获取属性, 还可以通过更多的装饰器来形成类似的 设置属性, 删除属性等
  设置属性的装饰器是 @函数名.setter
  删除属性的装饰器是 @函数名.deleter
  获得属性的装饰器是 @函数名.getter (这个的存在就覆盖了@property)
11 静态方法和类方法
  静态方法是使用 装饰器staticmethod来形成的函数
  该函数的特点是不需要写入self, 后面的参数列表是正常的参数列表, 而且调用的时候需要一一对应
  因而该函数也不会绑定给对象, 而是属于类的属性函数
  具体情形如下
class Foo:
@staticmethod
def spam(x,y,z):
print(x,y,z)
print(Foo.spam)
print(Foo().spam)
# &function Foo.spam at 0xB12620&
# &function Foo.spam at 0xB12620&
  类方法是使用装饰器classmethod
  类方法就是将方法绑定给类
  类方法第一个参数始终是cls, 代表调用它这个函数的对象的类传入给cls
  具体使用如下
class Foo:
@classmethod
def test(cls, x, y):
print(cls, x, y)
Foo.test(1,2)
Foo().test(1,2)
# &class '__main__.Foo'& 1 2
# &class '__main__.Foo'& 1 2
  静态方法和类方法可以相互搭配, 形成很好的效果
import time
class Date:
def __init__(self,year,month,day):
self.year=year
self.month=month
self.day=day
@classmethod
def now(cls):
t=time.localtime()
obj=cls(t.tm_year,t.tm_mon,t.tm_mday)
return obj
@classmethod
def tomorrow(cls):
t=time.localtime(time.time()+86400)
return cls(t.tm_year,t.tm_mon,t.tm_mday)
class EuroDate(Date):
def __str__(self):
return '年:%s,月:%s,日:%s' %(self.year,self.month,self.day)
print( EuroDate.now() )
# 年:2017,月:4,日:21
day27-反射&JDK新特性
day27授课目录:27.01_反射(类的加载概述和加载时机)
A:类的加载概述当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。
今日内容介绍
1、多线程安全问题
2、等待唤醒机制
=======================第一节课开始======================================...
div的高宽等于浏览器可见区域的高宽,浏览器滚动,div始终覆盖浏览器的整个可见区域1.&!DOCTYPE HTML PUBLIC&-//W3C//DTD HT...
1.已知一棵二叉树,求它每层结点的平均值。
感觉也也是一道基础高危题,在层次遍历上稍微做了一下调整,在正常层次遍历的基础上多加入一个队列,用于记录每层结点的个数,和计算每层各结点的数值和...
没有更多推荐了,>看图回答问题.ABC以上三位历史人物分别是谁?请选择你最熟悉的一..
问题描述:
>看图回答问题.ABC以上三位历史人物分别是谁?请选择你最熟悉的一..
问题解答:
据魔方格专家权威分析,试题“看图回答问题.ABC以上三位历史人物分别是谁?请选择你最熟悉的一..”主要考查你对新文化运动等考点的理解.关于这些考点的“档案”如下:
我来回答:
剩余:2000字
单项选择:11 A12 A13 B14 C15 C16 选含有【No】的选项.20 B21 D 22 B 23 A 24 B你把其他的题也发过来看下嘛!
(1)48/52=92.3%(2)(37-15)/15=146%
草木皆兵说的是淝水之战时的前秦皇帝苻坚 破釜沉舟说的是巨鹿之战时的楚霸王项羽 退避三舍说的是城濮之战时的晋文公重耳
是情节吗?舜大孝子,经典传说:孝感动天(二十四孝第一孝),宽厚待人,以身作则.尧生活简朴,克己爱民.禹领导人民治理洪水,与群众同甘共苦,在外13年,三过家门而不入. 再问: 嗯,打错了
发现了新大陆,发明了蒸汽机,时代焦点人物,他们都对社会进步起到了一定的作用.
那可多了,你多看看书便知晓.比如,司马迁写出了史记,千古一书,而且是在受了宫刑的情况下,忍辱负重、不忘父命用了13年时间完成的一部巨著.这是何等的毅力和才气!《史记》全书共有本纪十二篇,表十篇,书八篇,世家三十篇,列传七十篇,共一百三十篇.《史记》的编纂年代是从公元前104年至公元前91年.
汲仁、郭昌,王景《史记·河渠书》中记载,公元前109年,汉武帝令“汲仁、郭昌发卒数万人塞瓠子决”,并亲率臣僚到现场参加堵口,说明黄河堵口已经是相当浩大的工程.史书记载最早的一次大规模治河工程是公元69年“王景治河”,“永平十二年,议修汴渠”,“遂发卒数十万,遣景与王吴修渠筑堤,自荥阳东至千乘海口千里”.“永平十三年夏四
康有为维新思想的特点是把西方资产阶级的政治学说同传统的儒家思想相结合.孙中山也差不多.李鸿章是只从工业,军事上进行革命,而不是政治制度上.但是他们都为中国近代化作出了贡献,所以选D 中国近代历史上最能反应列强资本输出特点的条约是:《马关条约》19世纪70年代以后,侵略方式逐步转向以资本输出为主,侵略目的转为争夺并独占投
暗渡陈仓,意思是采取正面佯攻,当敌军被我牵刺而集结固守时,我军悄悄派出一支部队迂回到敌后,乘虚而入,进行决定性的突袭.此计与声东击西计有相似之处,都有迷惑敌人、隐蔽进攻的作用.二者的不同处是:声东击西,隐蔽的是攻击点;暗渡陈仓,隐蔽的是攻击路线.此计是汉大将军韩信创造.“明修栈道,暗渡陈仓”是古代战争史上的著名成功战例
郦道元,再当时交通及其不方便的情况下人家游遍了中国还写了本书,不容易
梭伦 在一定程度上改变了贵族专权的局面,促进了雅典民主政治和商品经济的发展. 克利斯提尼 以新的行政选区制度打破了部落贵族势力对政权的控制,雅典国家由此形成 伯里克利 贵族的政治权力被大大削弱,希腊民主政治进入黄金时代
文成公主 松赞干布
请稍候! 再答: 1、单位体积的质量 ρ=m/V 再答: 2、1*10^3 1立方米的水重1000Kg 3、无关 属性 再答: 4、不变 变小 5、2.4 0.6*10^3 6、A 再答: 如有疑问,请追问!
我最喜欢的一位历史人物——赵云 谈起我最喜欢的历史人物时,我一定会说:“我最喜欢的历史人物是赵云!” 自古以来,赵云就以一个英勇善战、忠心耿耿、智勇双全的人物出现. 作为一个“三国迷”,就不能不了解你喜欢的人物.下面我简要地把赵云的生平说一下. 赵云,常山真定人,字子龙,寿七十二岁,身高八尺余(约合180厘米). 在《
答案是:A 做AD垂直于L3垂足是D,CE垂直于L3垂足为E角ABD+角CBE=90°角ABD+角BAD=90°则角DAB=角CBE 又△DAB 和△CBE都是直角三角形 且AB=BC 得△ABD与△CBE全等 则AD=BE=3 CE=5 勾股定理 BC=AB=根号34AC=2倍根号17
设经济作物植x公顷x/0.34X0.6=x+312x=408粮食作物植x+312=720其他作物植720/0.6X0.06=72
股民委托买入、卖出股票,按照价格优先、时间优先的原则成交.卖五到卖一的价格依次降低,表示当前卖出这个股票的最低的五个报价.反之,买五到买一价格依次提高,表示当前买入这个股票最高的五个报价.这很容易理解,买股票,价高者得,卖股票,价低者得.
1、A(150E,0)即东经150度,0度;2、C(170E,20S)即东经170度,南纬20度;3、C点既在(东)半球,又在(南)半球;4、C点属于(低)纬度,A.B两点实际距离为111千米*10=1110千米.答案绝对正确.
也许感兴趣的知识JAVA 7新特性——在单个catch代码块中捕获多个异常,以及用升级版的类型检查重新抛出异常 - ImportNew
| 标签: ,
在Java 7中,catch代码块得到了升级,用以在单个catch块中处理多个异常。如果你要捕获多个异常并且它们包含相似的代码,使用这一特性将会减少代码重复度。下面用一个例子来理解。
Java 7之前的版本:
catch (IOException ex) {
logger.error(ex);
throw new MyException(ex.getMessage());
catch (SQLException ex) {
logger.error(ex);
throw new MyException(ex.getMessage());
}catch (Exception ex) {
logger.error(ex);
throw new MyException(ex.getMessage());
在Java 7中,我们可以用一个catch块捕获所有这些异常:
catch(IOException | SQLException | Exception ex){
logger.error(ex);
throw new MyException(ex.getMessage());
如果用一个catch块处理多个异常,可以用管道符(|)将它们分开,在这种情况下异常参数变量(ex)是定义为final的,所以不能被修改。这一特性将生成更少的字节码并减少代码冗余。
另一个升级是编译器对重新抛出异常(rethrown exceptions)的处理。这一特性允许在一个方法声明的throws从句中指定更多特定的异常类型。
让我们来看看一个小例子:
package com.journaldev.
public class Java7MultipleExceptions {
public static void main(String[] args) {
rethrow(&abc&);
}catch(FirstException | SecondException | ThirdException e){
//以下赋值将会在编译期抛出异常,因为e是final型的
//e = new Exception();
System.out.println(e.getMessage());
static void rethrow(String s) throws FirstException, SecondException,
ThirdException {
if (s.equals(&First&))
throw new FirstException(&First&);
else if (s.equals(&Second&))
throw new SecondException(&Second&);
throw new ThirdException(&Third&);
} catch (Exception e) {
//下面的赋值没有启用重新抛出异常的类型检查功能,这是Java 7的新特性
// e=new ThirdException();
static class FirstException extends Exception {
public FirstException(String msg) {
super(msg);
static class SecondException extends Exception {
public SecondException(String msg) {
super(msg);
static class ThirdException extends Exception {
public ThirdException(String msg) {
super(msg);
如你所见在rethrow方法中,catch块捕获的异常并没有出现在throws从句中。Java 7编译器会分析完整的try代码块以检查从catch块中什么类型的异常被抛出和重新抛出。
需要注意一旦改变了catch块的参数,编译器的分析将不会被启用。
原文链接:
- 译文链接: [ 转载请保留原文出处、译者和译文链接。]
关于作者:
(新浪微博:)
@Override编译完就丢弃了
关于ImportNew
ImportNew 专注于 Java 技术分享。于日 11:11正式上线。是的,这是一个很特别的时刻 :)
ImportNew 由两个 Java 关键字 import 和 new 组成,意指:Java 开发者学习新知识的网站。 import 可认为是学习和吸收, new 则可认为是新知识、新技术圈子和新朋友……
新浪微博:
推荐微信号
反馈建议:ImportNew.
广告与商务合作QQ:
– 好的话题、有启发的回复、值得信赖的圈子
– 写了文章?看干货?去头条!
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 活跃 & 专业的翻译小组
– 国内外的精选博客文章
– UI,网页,交互和用户体验
– JavaScript, HTML5, CSS
– 专注Android技术分享
– 专注iOS技术分享
– 专注Java技术分享
– 专注Python技术分享
& 2018 ImportNew

我要回帖

更多关于 java返回上级目录 的文章

 

随机推荐