黑马程序员——07Java面向对象3


------------ android培训 java培训 、期待与您交流!------------

1,     成员内部类。将一个类定义在另一个类的里面,对里面那个类就称为内部类(内置类,嵌套类)。
访问特点:
1)内部类可以直接访问外部类中的成员,包括私有成员,之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,格式 外部类名.this.
                 
2)而外部类要访问内部类中的成员必须要建立内部类的对象。
 
class Outer{
         
private int x = 3;
         
class Inner{    //内部类
                 
//int x = 4;
                 
void function(){
                         
//int x = 6;
                         
System.out.println("innner :"+Outer.this.x);
                 
}
         
}
        void method(){
                 
Inner in = new Inner();
                 
in.function();
         
}
 
}
class  InnerClassDemo{
         
public static void main(String[] args) {
                 
Outer out = new Outer();
                 
out.method();
                 
//直接访问内部类中的成员。
                 
Outer.Inner in = new Outer().new Inner();
                
in.function();
         
}
 
}

2,     静态内部类。
访问格式:1)当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中。可以直接建立内部类对象。格式:外部类名.内部类名 变量名=外部类对象.内部类对象;
                 2)
当内部类在成员位置上,就可以被成员修饰符修饰。比如,private:将内部类在外部进行封装。static:内部类就具备static的特性。当内部类被static修饰后,只能访问外部类中的static成员。出现了访问局限。
在外部其他类中,如何直接访问静态内部类的非静态成员呢?
 
new Outer.Inner().function();
在外部其他类中,如何直接访问静态内部类的静态成员呢?
 
Outer.Inner.function();
注意:当内部类中定义了静态成员,该内部类必须是static的。
class Outer{
         
private static  int x = 3;
         
static class Inner{    //静态内部类
                 static void function(){
                         System.out.println("innner :"+x);
                }
        }
        static class Inner2{
                void show(){
                         
System.out.println("inner2 show");
                }
        }
        public static void method(){
             
Inner.function();
             
new Inner2().show();
         
}
 
}
class  InnerClassDemo{
         
public static void main(String[] args) {
                 
Outer.method();
                 
//Outer.Inner.function();
                 
//new Outer.Inner().function();
                 
//直接访问内部类中的成员。
                
//Outer.Inner in = new Outer().new Inner();
                
//in.function();
         
}
 
}

 

3,     局部内部类。1)不可以被成员修饰符修饰。
           
2)可以直接访问外部类中的成员,因为还持有外部类中的引用。但是不可以访问它所在的局部中的变量,只能访问被final修饰的局部变量。
 
class Outer{
         
int x = 3;
         
void method(final int a){
                 
final int y = 4;
                 
class Inner{
                         
void function(){
                                 
System.out.println(y+“...”+Outer.this.x+a);
                         
}
                 
}
                //此句必须写在内部类定义的后面,否则编译器不识别而报错
                 
new Inner().function();
         
}
 
}
 
class  InnerClassDemo{
         
public static void main(String[] args) {
                 
Outer out = new Outer();
                 
out.method(7);
                 
out.method(8);
         
}
 
} 

4,     匿名内部类:1)匿名内部类其实就是内部类的简写格式。
          
2)定义匿名内部类的前提:内部类必须是继承一个类或者实现接口。
          
3)匿名内部类的格式:new 父类或者接口(){定义子类的内容}
          
4)其实匿名内部类就是一个匿名子类对象。而且这个对象有点胖。可以理解为带内容的对象。
          
5)匿名内部类中定义的方法最好不要超过3个。

5,     异常:就是程序在运行时出现的不正常情况。
异常由来:问题也是现实生活中一个具体的事物,也可以通过
java的类的形式进行描述。并封装成对象。其实就是java对不正常情况进行描述后的对象体现。
对于问题的划分:两种:一种是严重的问题,一种是非严重的问题。
对于严重的,
java通过Error类进行描述。对于Error一般不编写针对性的代码对其进行处理。
对于非严重的,
java通过Exception类进行描述。对于Exception可以使用针对性的处理方式进行处理。无论Error或者Exception都具有一些共性内容。比如:不正常情况的信息,引发原因等。

Throwable
     
|--Error
    
 |--Exception
                |--RuntimeException

   6,     异常体系有一个特点:因为异常类和异常对象都被抛出。他们都具备可抛性,这个可抛性是Throwable这个体系中的独有特点。只有这个体系中的类和对象才可以被throwthrows操作。
throwthrows的区别:1)throws使用在函数上。throw使用在函数内。
                     
2)throws后面跟的异常类,可以跟多个,用逗号隔开。throw后面跟的是异常对象。

7,     对于异常分两种:1)编译时被检测的异常。
                         
2)编译时不被检测的异常(运行时异常。RuntimeException以及其子类)
 
Exception中有一个特殊的子类异常RuntimeException运行时异常。
             
1)如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过。
             
2)如果在函数上声明了该异常。调用者可以不用进行处理。编译一样通过。
        之所以不用在函数上声明,是因为不需要让调用者处理。当该异常发生,希望程序停止。因为在运行时,出现了无法继续运算的情况,一般不处理,希望停止程序后,对代码进行修正。

8,     异常语句格式:第一种格式try{}catch(){}
            第二种格式
try{需要被检测的代码;}catch(异常类 变量){ 处理异常的代码; }finally{一定会执行的语句;}
            第三种格式
try{}finally{}catch是用于处理异常的,如果没有catch就代表异常没有被处理过,如果该异常是检测时异常,那么必须声明。
 
finally代码块。定义一定执行的代码。
          
1)通常用于关闭资源,因为资源必须要释放。
          
2)finally只有一种情况不会执行,即System.exit0)。

9,     自定义异常:按照java面向对象的思想,将程序中出现的特有问题进行封装,定义类继承Exception或者RuntimeException
 
1)为了让该自定义类具备可抛性。
 
2)让该类具备操作异常的共性方法。当定义自定义异常的信息时,可以使用父类已经定义好的功能,异常信息传递给父类的构造函数。
 
ClassMyException extends Exception{
           MyException(String message ){
                Super(message);
          }
 
}
如果该异常的发生无法再继续进行运算,就让自定义的异常继承RuntimeException

10,     异常的处理原则:1)处理方式有两种:try 或者throws
               
2)调用到抛出异常的功能时,抛出几个,就处理几个。一个try,多个catch
               
3)多个catch,父类catch块放在最下面。
               
4)catch内,需要定义针对性的处理方式,不要简单定义一句e.printStackTrace(),输出语句,也不要不写。当捕获到的异常,本功能处理不了,可以继续在catch中抛出。
 
try{
           throw new AException();
}
catch(AExceptione){
           Throw e;
}

如果该异常处理不了,但并不属于该功能出现的异常。可以将异常转换后,在抛出和该功能相关的异常。或者异常可以处理,但需要将异常产生的和本功能相关的问题提供出去,让调用者知道并处理。也可以将捕获异常处理后转换新的异常抛出。

try{
           throw new AException();
}
catch(AExceptione)
{
           //AException处理。
           throw new BException();
}

11,     异常的注意事项:
在子父类覆盖中的体现:
             
1)子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法只能抛出父类的异常的子类或者子集。
                (子类重写父类方法时特别注意此点)
             
2)如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时出现异常,只try不抛。

//自定义三个异常
class LanPingException extends Exception
{
             
LanPingException(String message){
                     
super(message);
             
}
 
}
class MaoYanException extends Exception{
         
MaoYanException(String message){
                 
super(message);
         
}
 
}
 
class NoPlanException extends Exception{
         
NoPlanException(String msg){
                 
super(msg);
         
}
 
}
//定义电脑类
class Computer{
         
private int state = 3;
         public void run()throws LanPingException,MaoYanException{
                 
if(state==2)
                         
throw new LanPingException("蓝屏了");
                
if(state==3)
                         
throw new MaoYanException("冒烟了");
                
System.out.println("电脑运行");
         
}
         
public void reset(){
                 
state = 1;
                 
System.out.println("电脑重启");
         
}
 
}
//定义老师类
class Teacher{
         
private String name;
         
private Computer cmpt;
         
Teacher(String name){
                 
this.name = name;
                 
cmpt = new Computer();
         
}
         
public void prelect()throws NoPlanException{
                 
try{
                         
cmpt.run();
                 
}
                 
catch (LanPingException e){
                         
cmpt.reset();
                 
}
                
catch (MaoYanException e){
                         
test();
              
throw new NoPlanException("课时无法继续"+e.getMessage());
                 
}
                 
System.out.println("讲课");
         
}
         
public void test(){
                 
System.out.println("练习");
         
}
 
}
//运行测试类
 
class ExceptionTest {
         
public static void main(String[] args) {
                 
Teacher t = new Teacher("毕老师");
                 
try{
                         
t.prelect();
                 
}
                 
catch (NoPlanException e)  {
                         
System.out.println(e.toString());
                         
System.out.println("换老师或者放假");
                 
}
         
}
 
}


12,     包(package)。对类文件进行分类管理。给类提供多层命名空间。写在程序文件的第一行。类名的全称是包名.类名。包也是一种封装形式。建议定义包名不要重复,可以使用url来完成定义,url是唯一的。 
包与包之间进行访问,被访问的包中的类以及类中的成员,需要public修饰。不同包中的子类还可以直接访问父类中被protected权限修饰的成员。包与包之间可以使用的权限只有两种,publicprotected

public            protected               default               private

同包同类中                  ok                     ok                      ok                      ok

同包不同类                  ok                     ok                      ok                      no

不同包子类                  ok                     ok                      no                      no

不同包无关类               ok                     no                      no                       no

                    注意:1)import 导入的是包中的类。建议不要写通配符*,需要用到包中的哪个类,就导入哪个类。
                  2)当导入包中出现同名类,此类就必须加包名,否则编译失败。

13,     jar包。java压缩包

jar –cfv haha.jar pack packa //jar

jar –tvf haha.jar      //查看jar

setclasspath=c:\myclass\haha.jar    //设置jar文件到classpath下面

java pack.PackageDemo      //运行jar包下的类文件

jar –tvfhaha.jar>c:\1.txt      //haha.jar信息导入c:\1.txt文件中

注意:D:\jdk1.7.0_11\lib\tools.jar是所编写的java开发工具的类文件。
        因为
java编译工具也是由java语言写的,运行也依赖JVM,所以JDK中包含JRE文件夹。
        其中
D:\jdk1.7.0_11\jre\lib\rt.jar中存放的是java语言所有的基本类文件。
        
dos下输入javac.exe实际是JVM运行一下路径的类文件D:\jdk1.7.0_11\lib\tools.jar\com\sun\tools\javac\Main.class
 
java虚拟机的启动步骤:
    
1)jre文件夹,java.dll所在的文件夹即为jre文件夹,先找\bin,再\jre\bin,最后注册表。
    
2)装载jvm.cfg:利用系统方法找到:JRE路径+\lib+\ARCHCPU构架)+\jvm.cfg D:\ jdk1.7.0_11\jre\lib\i386\jvm.cfg
    
3)根据提供信息找到jvm.dll在系统平台运行虚拟机D:\jdk1.7.0_11\jre\bin\client\jvm.dll


------------ android培训 java培训 、期待与您交流 !------------

详情请查看: http://edu.csdn.net/heima  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
黑马程序员的tb_brand是指在JavaWeb基础教程中创建的一个表。这个表是用来存储品牌信息的,具体的表结构和数据类型需要和JavaBean类中的成员变量保持一致。\[1\]在这个教程中,使用了Maven来构建项目,并且使用了MyBatis作为持久层框架,通过配置pom.xml文件来引入相关依赖。\[2\] Maven是一个用于管理和构建Java项目的工具,它提供了一套标准化的项目结构、构建流程和依赖管理机制。\[3\] #### 引用[.reference_title] - *1* [【JAVAWEB开发】黑马程序员java web案例资料(含Element的删除与修改)](https://blog.csdn.net/aasd23/article/details/126940147)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [黑马程序员-MyBatis 框架-最全入门笔记、阿伟看了都得说真大、真细、真全!!!](https://blog.csdn.net/qq_57383364/article/details/128103058)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [JavaWeb——黑马程序员课程笔记](https://blog.csdn.net/King_ZACC/article/details/128573804)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值