JAVA程序设计(3.Java类与对象)

前言
本文是结合《Java程序设计》(黄岚、王岩、王康平)的摘要与上课ppt的笔记。


Java类与对象

3.1 面向对象的基本概念

  • 封装性
  • 继承性
  • 多态性

3.2 Java类

3.2.1 类的定义

[public] [abstract|final] class classname{
    
    
         classbody
         }
  • public是类的访问权限,表示公有类,要求该类所在的文件名与此类名相同。
  • 一个程序文件中最多包含一个公有类,缺省public的类表示普通类。

3.2.2 变量成员与方法成员

  1. 变量成员的定义和访问
  • 变量成员的基本声明格式:
[public|protect|private][static][final][transient][volatile]type variableName
  • 对象可以包含另一个对象
  1. 方法成员的定义和访问
  • 方法成员的基本声明格式:
[public|protected|private][static] returnType methodName([paramList]){
    
    
       //methodBody}
  1. static成员(静态成员)
  • 静态成员变量也称为类变量,类变量由多个对象实例共享一个内存区
  • 类变量既可以通过对象实例名访问,也可以通过类名直接访问
  • static修饰的成员变量或者成员方法,将不再与具体的类对象相关
  • Java在类方法中不能使用this和super

3.2.3 访问控制符

访问权限的大小关系:public>protected>默认(包访问权限)>private

  • private控制符修饰的成员只能在它自己的类中被访问
  • protected控制符修饰的成员能在它自己的类中和继承它的子类中被访问
  • public可以被任何类访问
  • 包访问权限指的是同一个包中的所有类可以访问

访问控制权限

作用范围 public protected 默认 private
同一类 yes yes yes yes
同一包中的类 yes yes yes
不同包中的子类 yes yes
不同包中的非子类 yes

3.2.4 构造方法

  • 在Java中,通过提供构造方法,类的设计者可以确保每个对象都会被初始化
  • 构造方法与类同名
  • 不接收任何参数的构造方法叫做默认构造方法
  • 一个类可以不定义构造方法,在这种情况下,类中隐含定一个方法体为空的默认构造方法,当且仅当类中没有明确定义任何构造方法时才会自动提供它
  • 构造方法没有返回类型,连void都没有
  • 构造方法是在创建一个对象使用new操作符时调用,构造方法的作用时初始化对象

3.2.5 终结处理方法

  • 对于非new创建的特殊内存区域,使用finalize()的方法

3.3 Java对象

3.3.1 对象的创建

type objectName = new type([paramList])
  • new运算符为其分配内存空间
  • 继承时,父类的数据类型等级更高

Java程序运行时的6个存储位置

  • 寄存器:速度最快,由编译器分配,程序员没有控制权
  • :通过堆栈指针控制内存的使用释放,需要知道数据相应的生命周期以控制指针;栈用来存放基本类型的数据和对象的引用
eg:windows为一个写好的类
windows w1=new windows();
————w1放在栈中,w1存储的实际是new windows()生成的对象在堆中的地址
————new windows()生成的对象放在堆中
  • :不需要知道数据的生命周期,会自动分配与清理相应内存,存放所有的java对象
  • 静态域:存放static定义的静态成员
  • 常量池:常量值直接存放在代码内部
  • 非RAM存储:数据完全存放于程序之外,eg:流对象和持久化对象

3.3.2 对象初始化

基本类型 默认值
boolean flase
char NULL
byte (byte)0
short (short)0
int 0
long 0L
float 0.0f
double 0.0d

3.3.3 成员初始化次序

  1. 最先初始化静态(static)成员,静态成员只在第一次访问时初始化一次(static修饰的变量称为类变量,其他的叫做实例变量)
  2. 变量定义的先后顺序决定了变量之间的初始化的顺序
  3. 最后再是调用对应的成员方法

3.3.4 垃圾回收机制

Java虚拟机(JVM)的一个系统级线程会自动释放没有对象指向的内存块。
判断依据:

  1. 引用计数
  2. 对象引用遍历

3.4 包:库单元

3.4.1 命名空间

  • 为了区别于各种平台,java中采用了"."来分割目

3.4.2 package语句

  • package语句放在java源程序文件的第一行
  • 编写java源代码文件(编译单元)时,最多只有一条package语句

3.4.3 import语句

  • 写在package之后

3.5 Java标准类库

3.5.1 Java常用包:java.lang包、java.util包

  • java.lang:java程序中最基础的类
  • java.util:包括许多具有特定功能的工具类
  • java.io:主要包含与输入和输出相关的类
  • java.swing:提供了创建图形用户界面元素的类
  • java.net:包含与网络操作相关的类
  • java.Applet:包含控制HotJava浏览器的类

3.5.2 Object类

  • object类是所有java类的基类
  • 可以使用类型为Object的变量引用任意类型的对象

3.5.3 System类

  • System不能被实例化,所有的方法都可以直接引用

3.5.4 Math类

  • Math类包含在java.lang包中,包含完成基本数学函数所需的方法,这些方法是静态的,不用申明具体的实例
  • Math类中声明了两个double类型的常量:Math.PI Math.E

3.5.5 String类、StringBuffer类和StringBuilder类

  • java中的String类的一大特点是:String类中每一个看起来修改String值得方法,实际上都是创建了一个全新的String对象(包含修改后的字符串内容),并未改动最初的String对象,只是不能再访问最初的对象了

String不提供方法处理字符串内部,并且我们可以从上述语句看到String对于空间和时间的消耗很大,所以StringBuffer类和StringBuilder类进行了改进

  • StringBuilder类能够直接在原有的对象后追加新内容,用于字符串缓冲区被单个线程使用的时候,大多数时间下使用这个类,最快。
  • StringBuffer类是线程安全的

猜你喜欢

转载自blog.csdn.net/KQwangxi/article/details/115145587