黑马程序员 Java基础 面向对象:内部类 异常 包 jar包
来源:互联网 发布:动力it 编辑:程序博客网 时间:2024/05/21 21:40
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
一、内部类当描述事物时,事物的内部还有事物,该事物用内部类来描述。
因为内部事务在使用外部事物的内容。
内部类的访问规则:
1:内部类可以直接访问外部类中的成员,包括私有。之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,格式 外部类名.this
2:外部类要访问内部类,必须建立内部类对象。
访问格式:
1:当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中,直接建立内部类对象。
格式
外部类名.内部类名 变量名 = 外部类对象.内部类对象;
Outer.Inner in = new Outer().new Inner();
2:当内部类在成员位置上,就可以被成员修饰符所修饰。
比如,private:将内部类在外部类中进行封装。
static:内部类就具备static的特性。
当内部类被static修饰后,只能直接访问外部类中的static成员。出现了访问局限。
在外部其他类中,如何直接访问static内部类的非静态成员呢?
new Outer.Inner().function();
在外部其他类中,如何直接访问static内部类的静态成员呢?
Outer.Inner.function();
注意:当内部类中定义了静态成员,该内部类必须是static的。
当外部类中的静态方法访问内部类时,内部类也必须是static的。
例子:内部类在成员位置访问
//外部类class outerc{private int x=3;//内部类class Inner{int x=4;void function(){int x=6;System.out.println("inner:"+this.x);}}//在外部类的方法中建立内部类的对象对其访问 就可以访问内部类void method(){//System.out.println(x);Inner in=new Inner();in.function();}}public class neibuleiDemo {public static void main(String[] args){//outerc out=new outerc();//建立外部类对象//out.method();//调用外部类方法访问内部类方法//直接访问内部类中的成员 内部类不被私有修饰时可以outerc.Inner in=new outerc().new Inner();in.function();}}
内部类定义在局部时
1:不可以被成员修饰符修饰
2:可以直接访问外部类中的成员,因为还持有外部类中的引用。但是不可以访问它所在的局部中的变量。只能访问被final修饰的局部变量。
例子:局部内部类
//外部类class outerc{private int x=3; void method(){//局部内部类调用局部变量需要用 final 修饰final int y=6;//局部内部类class Inner{int i=4;void function(){System.out.println("x:"+x+"y:"+y+"i:"+i);}}new Inner().function();}}public class neibuleiDemo {public static void main(String[] args){new outerc().method(); }}
匿名内部类:
1:匿名内部类其实就是内部类的简写格式。
2:定义匿名内部类的前提:内部类必须是继承一个类或者实现接口。
3:匿名内部类的格式: new 父类或者接口(){定义子类的内容}
4:其实匿名内部类就是一个匿名子类对象。而且这个对象有点胖。 可以理解为带内容的对象。
5:匿名内部类中定义的方法最好不要超过3个。
例子:
//抽象类abstract class AbsDemo{abstract void show();}//外部类class Outer{public void function(){//匿名内部类new AbsDemo(){int num = 9;void show(){System.out.println("num==="+num);}}.show();}}public class neibuleiDemo {public static void main(String[] args){new Outer().function(); }}
二、异常
就是程序在运行时出现不正常情况。
体系:
异常体系:
Throwable
|--Error
|--Exception
|--RuntimeException
异常由来:
问题也是现实生活中一个具体的事物,也可以通过java的类的形式进行描述。并封装成对象。其实就是java对不正常情况进行描述后的对象体现。
对于问题的划分:
两种:一种是严重的问题,一种非严重的问题。
对于严重的,java通过Error类进行描述。对于Error一般不编写针对性的代码对其进行处理。
对与非严重的,java通过Exception类进行描述。对于Exception可以使用针对性的处理方式进行处理。
无论Error或者Exception都具有一些共性内容。比如:不正常情况的信息,引发原因等。
异常的处理语句:
try{需要被检测的代码;}catch(异常类 变量){处理异常的代码;(处理方式)}finally{一定会执行的语句;}
有三个结合格式:
1:
try{}catch (){}
2:
try{}finally{}
3:
try{}catch (){}finally{}
异常的好处:
1:将问题进行封装。
2:将正常流程代码和问题处理代码相分离,方便于阅读。
异常的处理原则:
1:处理方式有两种:try 或者 throws。
2:调用到抛出异常的功能时,抛出几个,就处理几个。一个try对应多个catch。
3:多个catch,父类的catch放到最下面。
4:catch内,需要定义针对性的处理方式。不要简单的定义printStackTrace,输出语句。也不要不写。
5:当捕获到的异常,本功能处理不了时,可以继续在catch中抛出。
对捕获到的异常对象进行常见方法操作。
String getMessage():获取异常信息。
例子:
class Demo{//在功能上通过throws的关键字声明了该功能有可能会出现问题。int div(int a,int b)throws Exception{return a/b;}}class ExceptionDemo{public static void main(String[] args) {Demo d = new Demo();try{int x = d.div(4,1);System.out.println("x="+x);}catch (Exception e)//Exception e = new ArithmeticException();{System.out.println("除零啦");System.out.println(e.getMessage());// / by zero;System.out.println(e.toString());// 异常名称 : 异常信息。//异常名称,异常信息,异常出现的位置。//其实jvm默认的异常处理机制,就是在调用printStackTrace方法。//打印异常的堆栈的跟踪信息。e.printStackTrace();}System.out.println("over");}}
在函数上声明异常。
便于提高安全性,让调用出进行处理。不处理编译失败。
对多异常的处理。
1:声明异常时,建议声明更为具体的异常。这样处理的可以更具体。
2:对方声明几个异常,就对应有几个catch块。不要定义多余的catch块。如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。
建立在进行catch处理时,catch中一定要定义具体处理方式。
不要简单定义一句 e.printStackTrace(),
也不要简单的就书写一条输出语句。
例子:
class Demo{//在功能上通过throws的关键字声明了该功能有可能会出现问题。int div(int a,int b)throws ArithmeticException,ArrayIndexOutOfBoundsException{int[] arr = new int[a];System.out.println(arr[4]);return a/b;}}class ExceptionDemo{public static void main(String[] args){Demo d = new Demo();try{int x = d.div(5,0);System.out.println("x="+x);}catch (ArithmeticException e){System.out.println(e.toString());System.out.println("被零除了!!");}catch (ArrayIndexOutOfBoundsException e){System.out.println(e.toString());System.out.println("角标越界啦!!");}System.out.println("over");}}
因为项目中会出现特有的问题,而这些问题并未被java所描述并封装对象。所以对于这些特有的问题可以按照java的对问题封装的思想。将特有的问题。进行自定义的异常封装。
自定义异常:
必须是自定义类继承Exception。
继承Exception原因:
异常体系有一个特点:因为异常类和异常对象都被抛出。他们都具备可抛性。这个可抛性是Throwable这个体系中独有特点。
只有这个体系中的类和对象才可以被throws和throw操作。
throws和throw的区别:
1:throws使用在函数上,throw使用在函数内。
2:throws后面跟的异常类,可以跟多个用逗号隔开,throw后跟的是异常对象。
class FuShuException extends Exception {private int value;FuShuException(){super();}FuShuException(String msg,int value){super(msg);this.value = value;}public int getValue(){return value;}}class Demo{int div(int a,int b)throws FuShuException{if(b<0)throw new FuShuException("出现了除数是负数的情况------ / by fushu",b);//手动通过throw关键字抛出一个自定义异常对象。return a/b;}}class ExceptionDemo{public static void main(String[] args) {Demo d = new Demo();try{int x = d.div(4,-9);System.out.println("x="+x);}catch (FuShuException e){System.out.println(e.toString());System.out.println("错误的负数是:"+e.getValue());}System.out.println("over");}}
RuntimeException异常:
Exceptoin中有一个特殊的子类异常RuntimeException 运行时异常,如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过,如果在函数上声明了该异常。调用者可以不用进行处理。编译一样通过;之所以不用在函数声明,是因为不需要让调用者处理。当该异常发生,希望程序停止。因为在运行时,出现了无法继续运算的情况,希望停止程序后,对代码进行修正。
自定义异常时:如果该异常的发生,无法在继续进行运算,就让自定义异常继承RuntimeException。
对于异常分两种:
1,编译时被检测的异常。
2,编译时不被检测的异常(运行时异常。RuntimeException以及其子类)
例子:
//自定义异常类class FuShuException extends Exception{FuShuException(String msg){super(msg);}}class Demo{int div(int a,int b)throws FuShuException{if(b<0)throw new FuShuException("除数为负数");return a/b;}}class ExceptionDemo{public static void main(String[] args) {Demo d = new Demo();try{int x = d.div(4,-1);System.out.println("x="+x);}catch (FuShuException e){System.out.println(e.toString());return;}finally{//finally中存放的是一定会被执行的代码。System.out.println("finally");}System.out.println("over");}}
异常在子父类覆盖中的体现;
1:子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类。
2:如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集。
3:如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。如果子类方法发生了异常。就必须要进行try处理。绝对不能抛。
例子:
/*Exception |--AException|--BException|--CException*///a异常继承于Exceptionclass AException extends Exception{}//b异常继承于aclass BException extends AException{}//c异常继承于Exceptionclass CException extends Exception{}class Fu{void show()throws AException{}}class Test{void function(Fu f){try{f.show();}catch (AException e){}}}class Zi extends Fu{//这里只能抛a异常或者a的子类void show()throws AException{try{}catch (CException e)//c异常只能try处理{}}}class {public static void main(String[] args) {Test t = new Test();t.function(new Zi());}}
三、包 package
java中的包就相当于系统中的文件夹。
当我们需要将各个类分门别类的存放的时候,或者含有不同功能的相同类名的时候,需要用到包(package)。包可以将相关的类放在一起,并可以将两个或多个相同文件名的文件放在不同包中。
包的作用:
1:对类文件进行分类管理。
2:给类提供多层命名空间。
规则
1:写在程序文件的第一行。
2:类名的全称的是 包名.类名。
3:包也是一种封装形式。
格式:
package pack;
包与包之间的访问:
1:被访问的包中的类权限必须是public的。
2:类中的成员权限:public或者protected
3:protected是为其他包中的子类提供的一种权限
注意:
1:包与包间进行访问,被访问的包中的类以及类中的成员,需要public修饰。
2:不同包中的子类还可直接访问父类中被protected权限修饰的成员。包与包间可使用的权限有两种:public和protected。
3:其中protected只用于覆盖。
包的导入:
1:为了简化类名的书写,使用import导入
如: import com.limbang.test.*; 是将com包下的limbang包下的test包下的所有类导入进来。
注:如果需要limbang下还有类需要导入,则还需在导入,
如: import com.limbang.*;
注意事项:
1:两个包中有相同类名文件,当再统一类中创建对象时,需要加上包名.类名创建。
2:建议定义包名不要重复,可以使用URL来定义,因为URL是唯一的。
如:www.limbang.com---->package com.limbang.Demo以及com.limbang.Test
3:建议,不要写通配符 * ,需要用到包中的哪个类,就导入哪个类。
例子:
package com.limbang.test; public class FatherDemo { //父类受保护方法 protected void show(){ System.out.println("protected father"); } //父类公有方法 public void fuc(){ System.out.println("public father"); } }
package com.limbang.test.array; public class SonDemo extends com.limbang.test.FatherDemo{ public void showSon(){ //自定义方法 System.out.println("son show"); //调用父类方法 show(); } }
package com.limbang.test.object; import com.limbang.test.FatherDemo; import com.limbang.test.array.SonDemo; public class PackageDemo { public static void main(String[] args) { //创建子父类对象 FatherDemo f = new FatherDemo(); SonDemo s = new SonDemo(); //类PackageDemo可访问其他类公有方法 f.fuc();//public father //访问其他类受保护方法,不可 //f.show();//报错 s.fuc();//public father //子类可访问父类受保护方法 s.showSon();/*son show protected father*/ } }
四、Jar包
Java的压缩包的好处:
1:方便项目的携带。
2:方便于使用,只要在classpath设置jar路径即可。
3:数据库驱动,SSH框架等都是以jar包体现的。
Jar包的操作:通过jar.exe工具对jar的操作
创建jar包 格式:jar -cvf mypack.jar packa packb
查看jar包 格式:jar -tvf mypack.jar [>定向文件]
解压缩 格式:jar -xvf mypack.jar
自定义jar包的清单文件 格式: jar –cvfm mypack.jar mf.txt packa packb
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com
- 黑马程序员 Java基础 面向对象:内部类 异常 包 jar包
- 黑马程序员---面向对象:内部类、异常和包
- 黑马程序员——java第九、十天:面向对象(内部类、异常和包)
- 黑马程序员——Java基础:内部类、异常、包
- 黑马程序员---Java基础---面向对象:多态、内部类、异常
- 黑马程序员--JAVA内部类、异常、包
- 黑马程序员--java基础面向对象 接口 包 内部类 3个关键字
- 黑马程序员—Java面向对象(异常处理机制、package包、import导入包、jar包)
- 黑马程序员——面向对象(多态,内部类、异常、包)
- 黑马程序员--面向对象(接口,内部类,包,Object类)
- 黑马程序员——面向对象(二)---类的继承、多态性、匿名内部类、异常、包、访问控制、命名规范、jar文件
- 面向对象(内部类) 异常 包
- 黑马程序员_内部类 异常 包
- 黑马程序员---多态,内部类,异常,包
- 黑马程序员-----内部类 异常 包
- 黑马程序员——Java多态、内部类、异常、包
- 黑马程序员--内部类、包、异常、多态(Java)
- 【java基础】——java面向对象(下)—多态、内部类、异常、包
- 循环队列实现c++
- 面对现实,做好自己(一)
- 古龙小说精彩段落记录
- split
- 黑马程序员_java基础知识总结(1)面向对象基础总结
- 黑马程序员 Java基础 面向对象:内部类 异常 包 jar包
- man page
- poj2063-完全背包(逃不了tle的命运)
- Spring2.5.6+Hibernate3.0.5升级到Spring3.0.5+Hibernate3.3
- input文本框输入验证
- Mark系统架构
- Java中通过DOM方式提取出XML文档中的内容
- html基础知识点(2)
- 国家天地图API 创建点 覆盖物