java开发基本语法——总结

1.定义类的属性全部私有,在类中使用set,get函数改变属性值。

2.当成员函数中的局部变量和类的成员变量同名,且在一起使用,必须使用this来标记成员变量。

3.如果类中成员函数没有访问(非静态)数据成员时,就把该成员函数定义为static的,可以使用类名调用。(静态函数中不可以出现成员变量(否则,没有对象,成员就不存         在,类只是声明,不占空间))

4.成员变量和局部变量的区别?

    区别1.定义位置不同。 成员变量定义在类中,局部变量定义在方法中以及语句里。

    区别2.在内存中位置不同。成语变量存储在堆内存的对象中,局部变量存储在栈内存的方法中。

    区别3.生命周期不同。成员变量随着对象的出现而出现,随着对象的消失而消失。局部变量随着方法的运行而运行,随着方法的弹栈而消失

    区别4.初试化不同。成语变量因为在堆内存中,所有默认初始化值。局部变量没有默认初始化值,所以局部变量必须初始化后才能使用。

5.同一个类中一个构造函数想要调用其余构造函数,使用this(对应构造函数参数列表),有点类似重载方式调用,但是this()必须放在第一行。

6.静态函数没有this指针(this指针只能在非静态成员函数中调用),因为用类名调用时,this没有对象可指。

7.静态变量和成员变量的区别?

     区别1.所属范围不同。静态变量属于类,成员变量属于对象。静态变量也称为类变量,成员变量也称为实例变量。

     区别2.调用不同。静态变量可以被对象和类调用(强烈建议用类名调用),成员变量只能被对象调用。

     区别3.加载时期不同。静态变量随着类的加载而加载。成员变量随着对象的加载而加载

     区别4.内存存储区域不同。静态变量存储在方法区,成员变量存储在堆内存(随着对象存储)。

8.静态代码块。是定义在类中(不需要对象即可调用,完成初始化工作),   static {  类初始化代码    }     特点:随着类的加载而执行,仅仅执行一次。作用:给类初试化。

9.构造代码块。类似于构造函数,必须定义对象方可调用 ,   {   将构造函数中相同代码写入  }     若所用构造函数中都有相同的代码,可放在构造函数代码块中,避免重复。

10.java中的静态函数不能调用非静态函数/变量是指不能通过this调用非静态函数/变量(可以通过对象调用非静态函数)。像在主函数所在类中如果有静态成员函数则可以直接在主     函数中用函数名调用(其实是this.函数名,只不过this隐藏了)否则提示不能对非静态函数进行静态引用,所以加上对象调用就ok啦,如:new 主函数所在类名().函数名()。

11.定义静态函数的目的:通过类名访问。


面向对象

12.java中继承使用extends关键字(c++使用  class B :public A),java中支持单继承,不支持多继承。多继承通过接口方式实现。

13.子类和父类都定义了相同的成员函数和数据成员,用对象对其访问,对象先访问自己的数据成员/成员函数,若找到则结束(不在父类中进行查找)(类似局部变量和全局变        量重名)

14.子类和父类中有相同的函数(相同返回值类型,函数名,参数列表)(子类权限也要大于父类)则一定是子类重写父类的函数,不是子类中定义的。

15 .子类和父类中定义了相同的数据成员,都会存在于子类对象中(不发生重载),子类通过super关键字来实现。super.成员变量。this和super用法很相似。this:代表本类对象      的引用。super:代表父类的内存空间。

16.java中构造函数调用同c++,父类->子类成员对象->子类构造函数。(java子类对象是如何实现调用父类构造函数?子类构造函数第一条语言默认super(),所以默认调用父类空     参构造函数,但是如果父类中定义了有参构造函数,那么无参构造函数就不会存在,发生编译错误(不建议在父类中定义空父类的构造函数,我们不知道它究竟发生了什             么),所以当父类没有空参构造函数是必须在子类构造函数的第一句人为添加super(参数),选择调用父类构造函数)。

     细节:

      如果子类的构造函数第一行谢了this调用本类的其他构造函数,那么super调用父类的语句还有吗?  没有,因为super()或this(),只能定义在构造函数第一行。因为初始化动作要先完成。

     父类的构造函数中是否也有super()?是的只要是构造函数,默认 第一行都是super(),父类的父类调用所有对象的父类Object的构造函数。

17.final关键字。final修饰的类是一个最终类,不能派生子类。final修饰的方法不能够被重写。final修饰的变量是一个常量,定义时初始化。

18.含有abstract修饰符的class 即为抽象类,并不是说抽象类必须有抽象方法(可以一个也没有,目的是不让该类创建对象),但是含有abstract方法的类必须定义为abstract class ,abstract类不能创建实例(对象),抽象类中定义抽象方法必须放在具体子类中实现,所以呀,不能有抽象的构造方法或抽象的静态方法,如果子类没有实现抽象父类中的所有方法,那么,子类也必须定义为抽象类。

19.接口(interface)可以说成是抽象类的特例。接口中的所有方法都必须是抽象的,接口中的方法定义默认为public  abstract 。接口中的变量是全局常量,即必须是public static final修饰的。

  抽象类和接口的区别详情请看:  http://blog.csdn.net/u010355144/article/details/44944387

20 抽象子abstract不可以与那些关键字共存。

   final修饰最终类,没有子类。而抽象类必须要有子类继承。

   private是私有的,子类的函数要实现对父类成员函数的全面覆盖,古抽象类中不能有私有成员。

   static修饰的函数可以用类名调用,但是调用抽象函数没有意义。

21.类与类之间关系是继承extends ,类与接口之间关系为实现 implements,接口和接口之间关系是继承关系。   类负责描述事物的基本功能,接口负责描述事物的拓展功能

22 java中多态,注意和c++比较(similar)。

      Java中其实没有c++中虚函数的概念,它的普通函数就相当于C++的虚函数,动态绑定是Java的默认行为

   父类的引用或者接口的引用指向子类的对象。如:Animal  a=new Dog();//a只能使用父类中已用的方法,不能使用子类的方法。若发生重写则相当于c++中虚函数,调用子类中的方法。

   Animal a=new Dog();//向上转型

        Dog d=(Dog) a;//向下转型(为了调用子类中的特有方法)         无论是向上转型还是向下转型,最终都是子类对象做着类型变化。 向 Animal a=new Animal(); Dog d=(Dog)a;是错误的。

       //但是c++中却有这样的笔试题,http://blog.csdn.net/u010355144/article/details/45115321

        结论:(父类 object =new 子类)

    object对象指向的是子类对象空间继承父类那部分(局部引用)。若子类和父类中有相同的函数则发生重写(c++中多态),调用的是子类中的那个函数(因为指向的是子类中空间),若其他父类中函数,子类完全继承,调用时和父类对象调用完全相同。(若在父类中定义抽象函数,此时object对象调用时,会在子类中找到函数的实现部分,不会出现调用子类特有函数而编译错误)

      在多态中,想要调用子类函数,子类方法必须覆盖(重写)父类中的方法,如果调用子类特有的方法,就必须向下转型了

java多态中 ,成员变量,静态函数的调用只需看左边对象即可,非静态成员函数的调用,遵循“编译看左边,运行看右边(可能发生重写)”,若运行时右边没有再看左边,都没有就会报错原则。

需要使用子类中特有方法,使用向下转型时要使用关键字instanceof进行类型判断,避免发生ClassCastException。 if(a instanceof Dog){ }//因为a可能此时指向另一个子类Cat的对象。


23.内部类(实现两个类互相访问的简单方式)

A类中的内容要B类直接访问,而A类还需要访问B的内容时(此时需要在A中创建B的对象),可以将B类定义到A类的内部。这样访问更为便捷。B称之为内部类(内置类,嵌套类)

总结:(重点)访问方式:

内部类可以直接访问外部类中的所有成员,包括私有

而外部类要想访问内部类中的成员,必须在外部类中创建内部类的对象。

若想单独用内部类定义对象,则有特殊格式如下(内部类的编译文件为Outer$Inter.class)   (此时内部类为public型)。内部类名为:外部类.内部类


若内部类是静态内部类

因为内部类是静态(随着外部类的加载而加载),所以不需要创建Outer的对象,直接创建内部内对象就可以。

Outer.Iner   in =new Outer.Iner( );

静态内部类中的静态方法的访问:直接用类名(静态内部类随着外部类加载,或者说静态随着类的加载而加载,而且静态成员随着类的加载而加载)

注意:

内部类的类名为Outer.Iner

非静态内部类中不允许定义静态成员,仅允许非静态内部类中定义静态常量static final

23.匿名内部类(其实就是一个带有内容的子类对象。格式 :new 父类或接口().{子类的重新内容})

匿名内部类是对内部类的一种简写方式。匿名内部类中的方法不要过多(建议不超过两个),否则阅读性差。

但是抽象父类之所以不能创建对象是因为抽象内中的抽象方法没有重写(具体实现)。那我人为实现抽象的话抽象类就可以创建对象。


匿名内部类中new Object创建的可是Object子类对象。从而形成多态,编译时查看左边,但是Object对象中没有show方法。但是AbsDemo中可有show1,show2,所以可以。

总结:匿名内部类创建子类对象

异常

24  throw 和throws的区别?

  1.throw用在函数内。throws用在函数上。

  2.throw抛出的是异常对象,throws用于进行异常类的声明,后面异常类可以有多个,用逗号隔开。

  抛出异常后,可以让程序从抛出异常点全部停下来。程序无法继续执行。 但是用return语句在非主函数中使用的话,仅仅是终止本函数,如果主函数在调用函数后面还有语句的话将继续执行。

    编译异常是为了让调用者进行代码修改,运行异常(使用最多)不是代码的错误,而是使用者传递参数的问题,所以结束程序让使用者重新输入。

  运行时异常:可能发生异常的地方直接抛出运行异常类(RuntimeException)对象。(或者直接定义异常类,再抛出)

  编译时异常:在编译时可能发生异常的地方加上处理方法(通过申明异常类或者捕获异常类进行处理,此时处理完毕后,异常后面的语句会继续执行。和运行异常类不同)

      运行异常类(RuntimeException)在编译时不会出现错误,而在执行时若不满足条件怎会发生终止。如直接使用系统异常类则出错信息不明显。如下所示。

运行异常类的定义和使用:





下面在看下throws抛出的编译异常类的定义和使用:


58行的声明应该写成throwsIllNumberException; 80行同时写为IllNumberException ex;因为声明多个异常类要写多个catch,建议全部写成子类名,否则如果有一个先写父类名易出错。


多个异常类之间若有继承关系一定要先写子类的catch(子类 对象),在写父类catch(子类 对象)。

因为catch从上往下执行,若是先写父类的话会出现已捕获异常的错误。catch的个数取决于throws声明的个数。


25. 自定义异常类到底继承Exception还是继承RuntimeException呢?(定义异常类,只有构造函数,在jdk的src的的java.lang中看)

      

如果继承Exception类,则1.在抛出异常对象的函数后用 throws 类名 进行申明  2.在调用该函数的地方进行捕获(try{ } catch(异常){ 处理} finally{ }),一旦处理了调用者的问题,程序会继续执行。(声明的目的是让调用者处理,遇见声明异常的方法是必须有处理,1.捕获,2.继续往上声明)。若一次都不想往上声明则抛出异常后立马捕获处理。

    如果继承RuntimeException则不用写捕获代码,直接用throw new 异常对象 (" xxx "),不用声明和捕获,一旦出现问题程序就会终止,

         如:if(p==null) {throw new  NullPointException(" 指针不存在")}   (不声明的目的是不让调用者处理,就是为了让程序终止,让调用者看到现象,进行代码修正)


26.先执行try 在执行finally 在执行catch。finally到底什么时候用?

      只要程序中使用到了具体的资源(文件操作,数据库连接,IO资源,网络连接socket等)需要释放,都必须定义在finally中。你定义的程序,不管问题发生与否都要执行,就定义在finally中。

27.异常在继承或实现时的使用细节。


28 .包的定义:使用关键字 package  //包名中的所有字母都是小写。 package  mypack.hu.zhi  多级包用 .

     包的作用:1.对类文件进行管理(.class文件)2. 给类文件提供了名称空间

     1.在包里的类和成员函数没有用public修饰,外面是无法访问的(相当于被封装)

     2.有了包的类,类名变为包名.类名(如:包名.Demo d=new 包名.Demo())(通过导入包名来简化书写)若两个包中有相同的两个类名,只能用new  包名.类名()创建对象

    注意:在包中,被public修饰的类或接口,所属的java文件名必须和类或接口名称一致(否则编译失败)。(在包中要求公共的类名和文件名必须相同

29.

     

    在包与包的继承中,如果将父类函数的权限改为protected,则在包外只有子类可以访问父类中的方法,父类对象在包外是不可访问的。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值