JavaSE-类

Posted threejinblogs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaSE-类相关的知识,希望对你有一定的参考价值。

 

 

一、基础概念:计算机语言的发展是接近人的思维方式演变:汇编语言(面向机器)、C语言(面向过程)、java(面向对象)

二、成员变量和局部变量:

  1.全名定义一个类:

Package 包名;

Class 类名 extends 父类 implements 接口名{

成员变量;

构造方法;

成员方法;

}

  2.类名的首字母大写;对象的创建:可以先声明再创建;也可以采用一步到位法;创建对象时,可以先声明再创建,也可以采用一步到位法

  2.成员变量一般是基本数据类型,也可以是引用类型(指向了另外一个类)

  3.二者区别:

    技术分享图片

三、匿名对象:

  技术分享图片

  1.在内存里面,第一段代码在堆里面之开辟出一个;而第二段代码会有两个空间,因为new一下就是一个空间;

  2.匿名对象可以调用属性,并且可以赋值,但是之后马上会变成垃圾,没有意义

  3.运用场景:

  技术分享图片

四、成员方法(成员函数):

  1.成员方法的定义:

Public 返回数据类型 方法名 (参数列表)

{

    语句;//方法(函数)的主体

}

  2.注意事项:

    (1)变量名首字母是小写的、类名首字母大写、方法名的首字母是小写的,(驼峰法也叫匈牙利法、下划线法)

    (2).方法的参数列表可以是多个,方法可以没有返回值

    (3)成员变量和成员方法不是一个类的必需品

五、构造方法:

  1.存在的意义:可以实现在创建类对象的时候,就已经直接指定这个对象的某些属性

  2.特点:方法名和类名相同;没有返回值;创建一个类的新对象时,系统会自动的调用该类的构造方法完成对新对象的初始化 ;一个类可以构造多个构造方法;如果没有定义构造方法,系统会自动生成一个默认的空参构造方法

  3.构造函数前面可以有修饰符,public、默认修饰符(没有)、protected、private都可以

  4.技术分享图片

六、this:

  1.This只能在类定义里面使用,不能在类定义的外部使用

  2.代替当前对象的引用,用来区分成员变量和局部变量重名

  3.当一个类创建之后,在内存中发生如下操作:

    技术分享图片

    技术分享图片

七、静态变量/静态方法

  1.定义语法:访问修饰符+数据类型+变量名

Public class Cal

{

    Static int i=1;

    Static                   //(静态区块,只被执行一次,当类被定义的时候就已经被执行了,即使不创建类的实例它也已经运行了)

{

       i++;

}

}

  2.在内存中存在的形式:

    技术分享图片

  3.static关键字特点:

    技术分享图片

    (1)优先于对象存在:因为含有静态变量的字节码会先加载到方法区里面去,此时对象还没有加载到堆里面

    (2)可以被任何一对象访问,甚至直接用类名访问,类变量原则上用类方法去访问

    (3)类方法中不能访问非静态变量,但是非静态方法既可以访问非静态变量也可以访问静态变量

  4.静态变量和实例变量的区别:

    (1)加上static称为类变量或者静态变量,否则称为实例变量;类变量是与类相关的,公共的属性;实例变量是属于每个对象个体的属性;类变量可以通过类名.类变量名直接访问

    (2)

     技术分享图片

    (3)技术分享图片

    (4)目的是不让其他类来创建该类的实体对象

  5.静态变量和成员变量的区别:

    (1)

    技术分享图片

  6.main方法格式详解

    技术分享图片

    说明:static是因为正常的对象方法需要先建立类对象才能使用,而类方法可以直接使用类名调用

八、代码块

  1.技术分享图片

  2.

    技术分享图片

  3.静态代码块是优先于主方法执行的

九、类编程四大特征

  1.抽象:实际就是把一类事物的共有属性和行为提取出来,形成一个物理模板,这种方法就是抽象

  2.封装:

    (1)封装就是把抽象出的模型和对模型变量要进行的操作封装在一起,程序的其他部分只有通过被授权的操作才能对数据进行操作,java中一般会把类封装成private的

    (2)访问控制修饰符的级别

第一种:public,对外公开

第二种:protected,受保护的级别,对子类和同一个包中的类公开

第三种:默认的没有修饰符,向同一个包的类公开

第四种:private,私有级别,只有类本身可以访问,不对外公开

技术分享图片

(3)包

打包命令:package XXX.XXX;包名一般都是小写的,通过.来分级,一般打包命令放在文件开始的地方

引入包:import 包;//目的是要使用该包下的类

作用:区分相同名字的类;当类很多的时候可以起到管理类的作用;用包来控制访问的权限

常用的包:java.lang.*(这是自动引入的)

Java.until.*

Java.net.*

Java.awt.*

  2.继承

    (1)继承可以解决代码复用,父类中定义的相同属性和方法,所有的子类不需要重新定义这些属性和方法,只需要通过extends语句来继承父类

    (2)共有属性提取出来可以做为一个父类,希望被继承的属性不能写成private;父类中的public、protected和默认的属性方法可以被继承,private属性不能被继承;所以编程中,如果不希望子类继承某个属性或者方法,则将其声明为private

    (3)子类最多只能继承一个父类

    (4)Java所有的类都是object的子类,所有类都是它的孩子

    (5)继承不是只能有一层继承,可以有多层次的继承,层次不做限制

    (6)技术分享图片

    (7)this和super的区别:

        技术分享图片

    (8)继承中构造方法的关系

      技术分享图片

    (9)方法重写、方法重载、方法覆盖的区别:

      技术分享图片

      重载:方法名相同,参数列表不同,与返回类型无关,方法的修饰符可以不同,但如果只是修饰符不一样的话是不能构成重载的

      覆盖:子类有一个方法和父类的某个方法的名称、返回类型、参数一样,那么就说子类的这个方法覆盖了父类的那个方法

  3.多态:

    (1)多态就是一个引用(类型)在不同情况下的多种状态;或者通过指向父类的指针,来调用在不同子类中实现的方法

    (2)前提:

      技术分享图片

    (3)多态中访问成员

      技术分享图片

    (4)编译的时候,先看的是父类中所要求的方法存在与否,主要是为了顺利编译,实际在运行的时候则运行子类的要求方法,没有的话再运行父类中的方法,也叫动态绑定

    (5)Java允许父类的引用变量引用它的子类的实例(对象)

    (6)优点和缺点:

      技术分享图片

      把父类当做参数使用的时候最好,因为这个时候扩展性最好

十、抽象类

  1.当父类的一些方法或者类不能确定的时候,可以用abstract关键字来修饰它们

  2.当一个类继承的父类是抽象类的话,需要把抽象楼中的所有抽象方法全部实现

  3.抽象方法在父类类里面是不能实现的

  4.抽象类不能被实例化;抽象类不一定需要有抽象方法;一旦一个类里面有了抽象的方法,那么这个类必须声明为抽象类;抽象方法不能有主体,(就是后面不能接大括号{})

  5.

    技术分享图片

  6.

    技术分享图片

十一、接口

  1.

    技术分享图片

  2.

    技术分享图片

  3.

    技术分享图片

  4.接口和抽象类的区别:

    技术分享图片

  5.含义就是给出一些没有内容的方法,封装到一起,到某个类要使用的时候,再根据具体的情况把这些方法写出来

Class 类名 implements 接口{

           方法;

           变量;

}

  6.当一个类实现了一个接口,就要求该类要将这个接口的所有方法统统实现,且一个类可以实现多个接口,中间用逗号隔开

  7.接口通过interface创建,接口中的方法都是抽象的,即接口不能被实例化

  8.接口中的所有方法都不能有主体,也就是说接口中所有的方法都不能被实现,或者说接口是更加抽象的抽象类;作为对比,抽象类中不一定需要有抽象方法但是可以有实现的方法也就是带有主体的非抽象方法

  9.接口中可以有变量,但是变量不能用private和protected修饰:接口中的变量本质上都是static,而且是final类型的,不管加不加static的修饰符;在实际编程中,经常把常用的变量定义在接口中作为全局变量使用,访问形式    接口名.变量名

  10.一个接口不能继承其他的类但是可以继承别的接口

  11.实现接口和继承类的区别:子类继承父类之后,可以拥有父类的属性,但是如果需要父类没有的方法或者变量的时候,可以通过接口来实现;实现接口可以看做是对继承的一种补充;实现接口可在不打破继承关系的前提下,对某个类功能扩展,非常灵活

  12.前期绑定和后期绑定的区别:在编译的时候就已经知道是什么类型的就叫做前期绑定,如果是要到后续使用的时候才能知道是什么类型的就叫做后期绑定

十二、final

  1.

    技术分享图片

 

  2.当修饰局部变量(基本类型+引用类型)的时候

    技术分享图片

    技术分享图片

    也就是说可以在构造方法中初始化

十三、包

  1.

    技术分享图片

  2.生成包文件

    技术分享图片

    -d后面接路径,“.”代表默认路径,即当前文件夹

  3.

    技术分享图片

  4.

    技术分享图片

十四、类与修饰符

  1.修饰符

    技术分享图片

  2.类的修饰符

    技术分享图片

  3.成员变量的修饰符

    技术分享图片

  4.构造方法的修饰符

    技术分享图片

  5.成员方法的修饰符

    技术分享图片

十五、内部类、局部内部类、匿名内部类

  1.内部类:

   (1) 技术分享图片

   (2)例子:技术分享图片

   (3)注意与调用静态内部类区别:

    技术分享图片

  2.局部内部类:其实与局部变量有点像

    技术分享图片

技术分享图片

  3.匿名内部类(属于局部内部类的一种):

    技术分享图片

    即代表接口的子类对象

    技术分享图片

    匿名内部类只针对重写一个方法时候使用,因为多个方法的话需要每一个都要重写

    匿名内部类在使用方法中的局部变量时,局部变量必须用final修饰

以上是关于JavaSE-类的主要内容,如果未能解决你的问题,请参考以下文章

javaSE 常用类

JavaSE学习之枚举

[javaSE] 反射-动态加载类

JavaSE-反射-获取类或者对象的四种方法

JavaSE-13 内部类

JavaSE - 集合类-工具类