走进Java2

走进 Java2

什么是构造方法

 1.方法名和类名一致
 2.没有具体的返回值类型
 3.连void都没有
 public 方法名和类名一致(要么空参要么带上形式参数列表)
 构造方法支持方法重载
 注意事项:
        1.一个类中如果没有提供任何构造方法,系统会默认提供一个无参构造方法.
        2.一个类中如果提供了很多有参构造方法,系统不会提供无参构造方法.如果还要使用无参构造方法来创建
           对象,会报错,永远给出无参构造方法.
           类名 对象名 = new 类名();  默认为无参构造方法执行
           快捷键  alt+ins  constructor  全选 生成有参无参 ,给所有成员变量赋值
           给成员变量的赋值方式  1.set xxx(xx)  赋值  2.有参构造方法赋值
  关于变量的使用问题(细节):
        什么是将变量定义为成员变量?
              变量定义的时候,如果能够描述这个事物的属性-----定义成员变量
  一个类的成员:
                        成员变量:属性私有化
                        构造方法:有参构造和无参构造
                        成员方法:带参无参有无返回值类型 都用void代替

static关键字

本身含义:共享,共用的意思,随着类的加载而加载
特点:
        1.随着类的加载而加载,类在加载的时候,静态相关成员(类成员:静态的变量或静态方法)
          随着类的加载先进内存(静态区)
        2.优先于存在,不能和this共存
        3. 体现的是共享共用的意思,如需求中有"共有"的含义 ,这个变量直接使用static修饰
        4. 被static修饰的成员(变量/方法),推荐的访问方式是使用类名.静态变量   或   类名.静态方法名
            不推荐使用对象名来访问静态方法/静态成员方法
 使用静态相关变量/方法注意事项:
           1.静态方法既可以访问静态也可以访问非静态(静态变量/静态方法)
           2.静态只能访问静态的东西(静态变量/静态方法)
           私有方法加入 static  可以访问
        **工具类中  构造方法私有化,对外提供静态的公共的方法

代码块

Java中的代码块   重点掌握代码块的优先级(静态>构造>方法)
     局部代码块:比较简单  在局部位置(方法定义中)定义的{}
                        作用:限定某个变量的生命周期
     构造代码块:  在类的成员位置
                        作用:在执行构造方法之前,如存在构造代码块,优先执行构造代码块然后执行构造方法
                                可将构造方法的共性内容放在构造代码块中,优先级  构造代码块>构造方法       
      类加载一次,静态代码块也就执行一次就完毕(构造代码块还会继续执行)
      执行优先级:静态代码块>构造代码块>构造方法

继承

      概念:将多个事物的共性内容抽取到一个独立的事物中,这个事物和其他事物之间产生一种关系,称为继承
             这个事物也就是类
             关键字"extends"
      
       继承的好处:
            1.提高了代码的复用性
            2.提高了代码的维护性(方便后期维护)
            3.类与类产生的继承关系是多态的前提条件
   
       弊端:   
               继承关系存在局限性,不要为了使用部分功能去使用继承
      
       开发原则:
               低耦合(类与类的关系越少越好,耦合度只能降低不能避免)
               高内聚(某个类完成某件事情的能力,一个类能完成尽量一个类去完成)
      
       什么时候使用继承?
                       如果类A是类B 的一种,或者B是A的一种,这时候使用继承体现的是一种 is  a  的关系
        
        继承的特点:
               1.类和类之间的关系只支持单继承
               2.不支持多继承但是可以多层继承
        
        成员变量和静态变量的区别?
                   1.存储位置不同
                   2.生命周期不同
                   3.初始化不同
                   4.访问方式不同         
        
        继承的注意事项:
            1.子类继承父类,只能继承父类的非私有成员,私有成员可以间接访问
            2.子类继承父类,构造方法不能继承,只能间接访问
                通过super访问   super()  默认访问父类无参构造  super(xx)访问父类有参构造方法
                子类所有构造方法都是默认访问父类无参构造方法,因为jvm校验语法时,存在继承,需要先让父类初始化,
                因为子类可能用父类的数据,所以采用分层初始化,子类所有构造方法第一句话的super()可省略不写
        
        继承中关于成员变量访问的问题:
               1.如果子类继承父类,子类成员变量名称和父类成员变量不一致,分别访问即可
               2.如果子类继承父类,两个成员变量名称一致,如何访问?
                   就近原则机制:1>首先在子类 局部位置(成员方法)找,如果有就用
                                          2>如果子类局部位置没有,那么就在子类的成员位置找,有就使用
                                          3>如果子类没有,就在父类的成员位置找,有就使用
                                          4>如果父类也没有,继续往上找,顶层父类中没有会报错
         this:代表当前类的对象地址值
         super:代表父类的空间表示,理解为父类对象地址值用
         构造方法的目的就是类成员进行数据初始化
         
         继承中的成员方法访问问题:
                 1.子类继承父类,如果子类和父类成员方法名(公共的)不一致,分别调用即可
                 2. 如果子类出现江河父类一模一样的方法,子类会将父类方法进行覆盖,也就是方法重写override
                 什么是方法重写:
                         继承中使用,子类与父类出现一模一样的方法,目的就是为了将父类的方法进行重写
                         注意事项:   访问权限不能更低   有时候子类继承父类,父类不想让子类将父类方法重写,为了保证数据的安全性
          Java提供关键字 final   (状态修饰符)  最终的无法更改
          关键字final的特点:
                               1.可以修饰类,该类不能被继承
                               2.修饰成员变量,此时这个变量是常量(自定义常量)
                               3.final也可以修饰成员方法,此时这个方法不能被重写
                               实际开发中,static和final是一块的
           面试题:  final 修饰基本数据类型和修饰引用类型区别?
                                 修饰基本数据类型,他的数据值不能被改变(不能在赋值了)
                                 修饰引用类型,引用类型空间地址值不在改变(不能重新new)
                         this和super的区别:
                                 this代表当前类对象
                                 super代表父类对象的地址值用
                                 使用方式不同:   .变量名/.方法名/.()/.(xx)只要是this就是和本类有关 , 只要是super 就和父类有关
                    
            方法重载和重写的区别?
                        overload重载    override 重写
                        方法重载:定义方法的时候,多个方法名相同,参数列表不同,与返回值无关(目的:提高方法扩展性) 
                        方法重写:在继承中子类出现和父类一模一样的方法声明(一模一样,返回值,方法名,参数列表)
                                        子类将父类的方法覆盖,使用子类的一些自己的功能,重写时,要保证访问权限足够大
                                        目的为了沿用父类功能,然后还可以优化自己的功能

多态

         从现实世界事物考虑:一个事物的多种形态,从程序中考虑,一个类体现出内存的变化
         多态:能够体现书事物的不同形态(程序中内存的变化)
         多态的前提条件:
                                  1.必须有继承关系,如果没有继承,不谈多态
                                  2.必须存在方法重写
                                  3.必须存在父类引用指向子类对象    父类名  对象名  =  new  子类名();向上转型
          多态的成员访问特点:
                    1.成员变量:编译看左,运行看左
                    2.成员方法:编译看左,运行看右
                    3.构造方法:由于存在继承构造方法,执行时,分层初始化,先让父类初始化再让子类进行构造初始化
          
          多态的好处:
                       1.可以提高代码的扩展性,父类引用指向子类对象
                       2.可以提高代码的复用性以及维护性(继承保证)
          多态的弊端:
                   无法访问子类特有功能
                   解决方案:
                           1.直接创建子类对象
                           2.推荐向下转型   将父类引用转子类引用  强制类型转换,大类型转为小类型
                              向下转型的前提是必须有向上转型
           多态使用向下转型可能会出现问题,使用不当会造成程序异常classCastException,类型转换异常

抽象类

		      什么是抽象类:
		              一个事物的某个行为 具体的事物的具体体现,将这个事物定层次父类定义"抽象"
		              有抽象方法的类一定是抽象类
		              抽象方法:仅仅给出一个方法声明,没有方法体
		              有抽象方法的类一定是抽象类,抽象类不一定都是抽象方法
		              非抽象不需要被子类重写     抽象的方法,强制子类必须重写	
		      抽象类的特点:
		              1.抽象类不能进行实例化,不能new
		              2.抽象类的子类如果也是抽象类,不能实例化,一定会提供一个具体子类
		                  父类名  对象名 = new 具体子类名   (抽象类多态)
		              3.强制子类必须完成的事情,将抽象类中的抽象方法必须重写
		      抽象类的成员特点:
		              成员变量:既可以是变量也可以是常量
		              成员方法:既可以存在抽象方法(强制重写)也可以定义非抽象方法
		              构造方法:无参有参都可存在,构造方法都需要让父类先初始化,然后再是子类进行初始化
		      如果一个类没有任何抽象方法,把这个类定义为抽象类的意义?
		             意义:不让外界类直接创建对象,需要提供具体子类进行实例化
            abstract和哪些关键字冲突:
                     private 被private修饰成员,需在当前类进行访问,加入abstract强制子类转换
                     final  被final修饰的成员方法,不能被重写
                     static  被static修饰的成员方法,算不上重写
            abstract  的应用范围
                       1.定义类   抽象类    
                       2.定义方法   抽象方法

接口

       什么是接口?
               接口就是体现的事物本身不具备的工具,额外的功能;
       接口的定义:
                interface   接口名  {}   
                要实现接口里面的额外的功能,才具备这功能
        开发中接口的实现类名  
                 class 接口名+Impl  inplement   接口名{}
        接口的特点:
                1.接口的方法是不能有方法体的,只能是抽象方法,二亲隐藏public abstract(可省略不写)
                2.接口不能实例化(不能new)
                3.如果接口的实现类他是一个抽象类,肯定有一个具体的接口的实现类来进行new
                       接口名  对象名  = new  具体子实现类   (接口多态)
        接口成员特点:
                成员变量:只能是常量  存在默认修饰符  public static  final  可省略
                成员方法:只能是抽象方法  村子默认修饰符     public abstract 可省略
                构造方法:接口没有构造方法
        类与接口的关系:
                是实现关系   implements     class 子实现类名  implement 接口名{}      

类与类 接口与类 接口与接口

         Java中最基本的单元就是类        
                 类与类    只支持单继承    不支持多继承  但不支持多层继承
                 类与接口    是实现关系  一个类继承另一个类的同时  可实现多个接口
                                    class 子类extends  父类  implent  接口1,接口2....{}
                 接口与接口    是继承关系   不仅可以单继承也可以多继承    
         
         面试题:
                接口和抽象类的区别?
                         1.成员的区别:
                         2.关系区别:
                         3.设计理念区别

方法形参问题

         方法形参如果是引用类型
                   数组:需传递数组对象
                   类:
                       具体类: 实际参数 需传递当前类对象
                       抽象类: 实际参数  需传递抽象类的子类对象(抽象类多态)
                   接口:实际参数  需传递该接口的子实现类对象(接口多态)

方法返回值问题

      1.返回值基本类型:需要什么基本数据类型就使用对应类型接收
      2.研究引用类型:
                 类:  具体类: 需要返回当前类的具体对象
                        抽象类: 需要返回的是当前抽象类的子类对象
                 接口:需要返回接口的子实现类对象(接口多态)

关于权限修饰符的应用范围

      在同一个包下的本类   private   默认修饰符   protected   public
      在同一个包下的子类或同一个包下的无关类    默认修饰符  protected public
      在不同包下的子类   protected public
      在不同包的无关类  public
      私有权限修饰符private的权限最小    public的权限最大

包 package

    包的本质就是文件夹(目录)
    程序员在编写代码存储的地址   包在开发中(公司域名反写.多个包中间.隔开)    
                                                      包是为了维护代码结构的
    带包的编译和运行:
              1.不推荐手动方式
              2.自动方式(推荐)
                   如果使用另一个包下的类,进行导包之后的下面操作一样
                   1>进入dos黑窗口,进入到xx.java文件目录
                   2>javac - d.java源文件     ---->会自动将pacakge包的结构创建出来将类名.class放进去
                   3>直接java 包名.类名  运行即可    

内部类

      一个类A中,有一个类B,将类B称为类A的内部类   类A也就是类B的外部类 
      内部类的两种格式:
               1.成员内部类: 在一个外部类的成员位置(类中方法外)定义的类
               2.局部内部类:在外部成员的局部位置(方法定义中)的类
       成员内部类:
               员内部类可以访问外部类的成员,包括私有相关的
               如何直接通过外部类去访问内部类的成员?
               外部类名.内部类名   对象名  =   new   外部类名().new 内部类名
                    成员内部被私有修饰,保证数据安全这个方式就不能使用了
       成员内部类修饰符:
                 可以有private修饰,目的是为了数据安全性
                
              **可以有static修饰符                       
                            1.静态的成员内部只能外部类的静态成员
                            2.静态的成员内部类中无论是静态方法还是非静态方法,访问外部类的成员必须静态
                            3.想直接通过外部类来访问静态成员内部类的成员信息
                                  访问格式:   外部类名.内部类名  对象名  =  new 外部类名.内部类名();
                                  访问静态成员内部类成员
                                                     外部类名.内部类名  对象名  =  new  外部类名.内部类名();
                                                        对象名.静态成员内部类成员;
                                  如果静态的成员内部类的成员方法也是静态的:   外部类名.内部类名.静态方法名(); 

匿名内部类

        没有名字的类
        应用范围:在局部位置中的方法定义或者声明上
        匿名内部类本质就是继承该类(抽象类)或者是实现类的该接口的子类对象
        匿名内部类在开发中的应用:
               形参问题:
                             如果方法形参是一个抽象类,调用方法时实参需为抽象类的子类对象
                             如果方法形参是一个接口,调用方法时实参需为子实现类对象 

Object

       java常用类之  java.lang.Object
       表示所有类的跟类(超类或者父类)
       所有的类默认继承自Object 拥有这个类的所有非私有方法
       用==符号连接的两个引用类型比较的是地址值是否相同
       获取任意字节码文件对象   .class类对象
             public final class getClass();   返回值表示正在运行的那个类
       面试题:
                  在java中获取一个类的字节码文件对象的方式有几种?
                  三种:
                           public final class getClass();     任意java对象调用getClass ();
                           任意java类型的class属性
                           Class类有一个静态方法forName('"包名.类名")     "反射"                                                                    

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值