初始化与清理 & 访问权限 & 组合与继承 & final、static

发布时间:2020-08-11 14:30:38 作者:PengSY_b
来源:ITPUB博客 阅读:175

                   一.内容简介
1.初始化与清理
2.访问权限
3.继承概要
4.final,static
5.练习一

二.内容梳理
1.初始化与清理

1.1构造函数
构造函数:用来初始化成员变量的函数,没有返回值,函数名与类名一致。
默认构造器:没有参数的构造函数。类中如果没有构造器,编译器会自动创建 默认构造 器。
构造函数的嵌套:可以在构造器中调用被重载的其他构造器,用 this(parameter )调用。且只可以调用一个并放在起始处。
继承中的构造函数:构造函数不会被继承,子类的构造函数自动调用父类的默认构造函数,如果父类没有默认构造函数,则手动调用父类的构造函数。super(parameter).


1.2重载
重载: 方法名相同,参数列表不同。与返回值无关,返回值无法区分,如果返回值不同,方法名相同,参数列表相同,编译出错。
重载的参数 匹配:对应类型对应匹配。如果匹配不到: (常数与char )当做int用来 匹配,其他的数据类型逐渐提升数据类型来匹配
重写的返回类型必须一样或协变,否则编译错误。


1.3初始化
局部变量不初始化会报错,成员变量有默认的初始化。
初始化顺序:静态优于非静态,父类优先子类,变量优先于代码块优先于构造器。

静态数据的初始化:静态数据属于类,只占用一份存储区域,有标准的初值。静态数据的初始化时间是(静态数据被访问或对象被创建时)


1.4清理
垃圾回收机制只释放new的内存
类内定义finalize()方法,当垃圾回收发生时,finalize()被调用


(5)可变参数列表
例子:

点击( 此处 )折叠或打开

  1. static void printArray(Object[] args){


  2. }

  3. printArray(1, 2, 3);

  4. printArray((Object[])new integer[](1, 2, 3));


——构造函数使用可变参数列表会与默认构造函数弄混


2.访问权限

1.1

类内

包内(子类与非子类)

包外子类

包外非子类

Public

√    

Protected

×

默认

×

×

private

×

×

×

1.2修饰类只有public和默认
3.继承概要
extends指明继承关系,未说明隐式继承Object.
向上转型:子类可以作为实参传入父类作为形参的方法。
this.value先找自己的成员,找不到去父类找的.
构造方法不会被继承


4.final,static
1.1 final强调不变。static强调跟随类。
1.2final
类不希望被继承
方法不希望被重写
变量不希望被改变
final修饰的值不一定是常量还是变量,DJ反编译看。

1.3static
静态变量
静态方法: 不能访问非静态成员方法和非静态成员变量
静态代码块
static不允许修饰局部变量;



5.练习一
(1)需求
——汽车销售人员销售汽车,款式有凯越,君威
——汽车与款式和编号,款式编号不可修改
——汽车销售人员有姓名
——销售人员按车型及数量销售

(2)代码
AutoType.java

点击( 此处 )折叠或打开

  1. package  biz ;


  2. public   class  AutoType  {

  3.      public   static   final   String  KAI_YUE  =   "凯越" ;

  4.      public   static   final   String  JUB_WEI  =   "君威" ;

  5. }



Auto.java

点击( 此处 )折叠或打开

  1. package  biz ;


  2. public   class  Auto  {

  3.      private   String  autoType ;      // 款式

  4.      private   String  autoNumber ;      // 编号

  5.      private   boolean  isSelled ;

  6.     Auto ( String  autoType ,   String  autoNumber ) {

  7.          this . autoType  =  autoType ;

  8.          this . autoNumber  =  autoNumber ;

  9.          this . isSelled  =  false ;      // 默认未销售

  10.      }

  11.      public   String  getAutoType ( )   {

  12.          return  autoType ;

  13.      }

  14.      public   String  getAutoNumber ( )   {

  15.          return  autoNumber ;

  16.      }

  17.      public   boolean  isSelled ( )   {

  18.          return  isSelled ;

  19.      }

  20.      public   void  setSelled ( boolean  isSelled )   {

  21.          this . isSelled  =  isSelled ;

  22.      }

  23.     

  24.     

  25. }



seller.java

点击( 此处 )折叠或打开

  1. package  biz ;


  2. public   class  Seller  {

  3.      private   String   name ;

  4.     

  5.     Seller ( String   name ) {

  6.          this . name   =   name ;

  7.      }

  8.      /**

  9.      * 

  10.      * @param autos 所用的车

  11.      * @param autoType 要销售的类型

  12.      * @param num 要销售的数量

  13.      */

  14.      public   void  sell ( Auto [ ]  autos ,   String  autoType , int  num ) {

  15. //        if(auto == null || autoType == null || num < 0) {

  16. //            

  17. //        }

  18.          int  selledNum  =  0 ;

  19.          for ( Auto curAuto :  autos )   {

  20.              int  i  =  0 ;

  21.             i + + ;

  22.              if ( ! curAuto . isSelled ( )   & &  curAuto . getAutoType ( ) . equals ( autoType )

  23.                      & & selledNum  <  num )   {

  24.                 curAuto . setSelled ( true ) ;

  25.                  System . out . println ( "准备售出-" +  curAuto . getAutoType ( )   +   "-"

  26.                          + curAuto . getAutoNumber ( ) ) ;

  27.                 selledNum + + ;

  28.              }

  29.          }

  30.          if ( selledNum  <  num )   {

  31.              System . out . println ( "库存不够。"   +   "只可售出"   +  selledNum  +   "辆"   +  autoType ) ;

  32.          }

  33.         

  34.      }

  35.      public   String   getName ( )   {

  36.          return   name ;

  37.      }

  38.      public   void   setName ( String   name )   {

  39.          this . name   =   name ;

  40.      }

  41.      public   static   void  main ( String [ ]  args )   {

  42.         Seller s1  =   new  Seller ( "小明" ) ;

  43.         Auto auto1  =   new  Auto ( AutoType . JUB_WEI ,   "001" ) ;

  44.         Auto auto2  =   new  Auto ( AutoType . JUB_WEI ,   "002" ) ;

  45.         Auto [ ]  autos  =   new  Auto [ 2 ] ;  

  46.         autos [ ]   =  auto1 ;

  47.         autos [ 1 ]   =  auto2 ;

  48.         s1 . sell ( autos ,  AutoType . JUB_WEI ,  3 ) ;

  49.      }

  50.     

  51. }



三.总结与随笔
(1)entity层:只有属性没有方法,主要用于数据跨层传输
(2)同一块作用域,局部变量优先于成员变量。
(3)char 类型可以' + ', ' - '
(4)方法传参:基本类型传值,函数内改变参数值对函数外无影响。引用类型传引用,函数内改变参数值对函数外有影响。
(5)删掉set方法,private修饰的成员变量只读

推荐阅读:
  1. Java如何初始化类与对象
  2. Java的单例模式与final及抽象类和接口实例分析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

amp 访问 final

上一篇:dede中第一次登陆密码错误的解决方法

下一篇:字符串之间的排序

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》