Java基础知识 --类与对象

面向对象的三大特性:封装性、继承性、多态性

  • 封装性:对象、类和消息
    • 对象是变量和相关的方法的集合
    • 类是若干对象所具有的共性
    • 消息是对象之间的交互方式和交互内容
      消息包括:消息的接收者、接受对象应采用的应对方法、方法所需要的参数

一. Java类

1. 类的定义:类是组成Java程序的基本要素

  • 类声明形式:[public][abstract][final] class classname{ classbody }

2. 变量成员:

  • 声明形式:[public | protected | private][static][final][transient][volatile] type variableName
  • 变量成员的作用域为整个类
  • 变量成员的类型可以是基本数据类型,也可以是引用数据类型

3. 方法成员:

  • 声明形式:[public | protected | private][static] returnType methodName([paramList]) { methodbody }

4. 类变量和类方法:用static修饰的变量和方法

  • 类变量由多个对象实例共享一个内存区,共享同一个值,且既可以通过对象实例名访问,也可以通过类名直接访问
  • 实例变量(未用static修饰的变量)各自有各自的内存区,必须在生成对象实例后通过对象实例名访问
  • 类方法中不能使用this或super,类方法不能访问实例变量
  • 实例方法(不用static声明的方法)

5. Java语言的作用域分为类级、方法级、语句块级、语句级

6. 访问控制符

同一个类中 同一个包中 不同包中的子类 不同包中的非子类
public
protected
默认(friendly)
private

7. 构造方法:

  • 构造方法的方法名与类名相同,并且无返回类型,也没有void
  • 如果在定义类时没有定义构造方法,则Java系统会自动提供默认的无参数构造方法
  • 构造方法可以重载
  • 构造方法只能用new关键字调用
  • 若构造方法体定义为空,则自动调用其父类的构造方法

8. 终结处理方法finalize()

  • 负责回收无用对象占据的特殊的内存资源
  • finalize()不是C++中的析构函数,不能将finalize()作为通用的清理方法
  • finalize()与Java垃圾回收器的区别:不仅仅做内存回收,还有其他处理,如擦去屏幕上画的图片

二. Java对象

1. 对象的创建

  • 对象是类在程序中的实例化。对象实例包括生成、使用和清除三个阶段
  • 对象实例的生成包括声明、实例化和初始化三个步骤
  • 声明格式:type objectName = new type([paramList])
  • type objectName声明了一个对象实例的引用,new运算符为其分配内存空间,完成了实例化,type构造方法执行初始化工作
  • 使用成员运算符“.”来访问对象的成员
  • Java运行时系统通过自动垃圾回收机制周期性地清除无用对象,释放内存

2. 内存分配

  • 寄存器:最快的存储区,程序中无法控制
  • 栈:驻留于RAM(随机访问存储器)区域,但通过堆栈指针可以从处理器获得直接支持,存放基本类型的数据和对象的引用
  • 堆:一种通用的内存池(也位于RAM区),用于存放所有的Java对象,即用new产生的数据
  • 静态域:存放在类中用static定义的静态成员
  • 常量池:常量值通常直接存放在代码内部
  • 非RAM存储:数据完全存活于程序之外

3. 对象初始化

  • 对于定义在方法内部的局部变量,Java会以“编译时错误”的形式提示未初始化
  • 对于类的成员变量,会给定初始值
  • 对象成员初始化的几种方式:
    • 默认值
    • 声明时设定初值
    • 非基本类型对象初始化
    • 通过方法返回值赋初值
    • 构造方法初始化
  • 成员初始化次序
    • 最先初始化static成员,静态成员只在第一次访问时初始化一次
    • 在类的内部,变量定义的先后顺序决定了初始化的顺序

4. 垃圾回收机制GC(Garbage Collection)

  • GC通过对象是否被活动对象引用来确定是否收集该对象

三. 包/类库

1. 命名空间

  • Java引入包的机制,以提供类的多重命名空间,同时也负责类名空间管理
  • 使用“.”来分隔目录

2. package

  • package语句放在Java源程序文件的第一行,指明该文件中定义的类存放在哪个包中
  • 程序中可以没有package语句,此时类将存放到默认包中
  • package语句最多只能有一条
  • 声明形式:package pkg1[.pkgs.[pkg3……]]

3. import

  • 声明形式:cimport pkg1[.pkg2……].classname|*;
  • import语句放在package语句之后,类定义之前
  • 一个Java源程序中可以有多个import语句
    要用java.util中的其他类:import java.util.*
    避免冲突:java.util.Vector v = new java.util.Vector();

四. Java标准类库

1. 常用库:

  • java.lang包:提供Java程序设计中最基础的类,如String、Object
  • java.util包:包括许多具有特定功能的类,如Arrays、Date、Calendar和Stack等
  • java.io包:主要包含与输入输出相关的类,这些类提供了对不同的输入和输出设备读写数据的支持
  • java.swing包:提供了创建图形用户界面元素的类,该包中包含定义窗口、对话框、按钮、复选框、列表、菜单、滚动条及文本域的类
  • java.net包:包含与网络操作相关的类,如URL、InetAddress和Socket等

2. java.lang包

  • java.lang包由解释程序自动加载,不需在程序中显示地使用语句import java.lang
  • 提供常用的类、接口、一般异常、系统等编程语言的核心内容

3. java.util包

  • java.util包是Java实用工具类库

4. Object类

  • java.lang.Object
  • Object类是所有Java类的基类,处于Java开发环境的类层次树的根部
  • 可以使用类型为Object的变量引用任意类型的对象
  • 如果一个类在定义时没有包含extends关键字,编译器会将其作为Object类的直接子类
  • Object类定义了所有对象的最基本的一些状态和行为,且会被Java中的每个类所继承
	public Object() //构造方法
	protected Object clone() //建立当前对象的拷贝
	public boolean equals(Object obj) //比较对象
	protected void finalize() //释放资源
	public final Class getClass() //求对象对应的类
	public int hashCode() //求hash码值
	public final void notify() //唤醒当前线程
	public final void notifyAll() //唤醒所有线程
	public String toString() //返回当前对象的字符串
	public final void wait() //使线程等待
	public final void wait(long timeout) //timeout为最长等待事件,单位为毫秒
	public final void wait(long timeout, int nanos) //nanos为附加时间,单位为纳秒,取值范围位0~999999

5. System类

  • java.lang.System
  • System不能被实例化,所有的方法都可以直接引用
  • System类提供了标砖输入(in)输出(out)和错误(error)流
  • 常用的一些方法:
	getProperties() //获取系统属性
	System.getProperty("os.name") p//获得当前系统的操作系统名字
	System.getProPerty("java.version") //获得Java版本号
	setProPerties() //设置或修改系统的属性
	currentTimeMillis() //获取当前时间
	exit() //使程序退出系统
	arraycopy() //拷贝数组

6. Math类

  • java.lang.Math
  • 静态方法,不用声明具体的实例
  • 声明了两个double型的常量,PI和E

7. String类

  • java.lang.String
	String s1 = "hello";
	String s2 = "hello" //此时s1和s2指向同一个内存
	System.out.println(s1 == s3) //true
	
	String s1 = new String("hello")
	String s2 = new String("hello") //此时s1hes2指向不同的内存
	System.out.println(s1 == s3) //false

常用的方法:
	public char charAt(int index) //返回指定索引处的char值
	public int length() //返回此字符串的长度
	public int indexOf(String str) //返回指定字符在第一次出现处的索引
	public boolean equalsIgnoreCase(String another) //忽略大小写的相等
	public String replace(char oldChar, char newChar) //替换所有匹配字符
	public String toUpperCase() //转化成大写
	public String toLowerCase() //转化成小写

8. StringBuilder类、StringBuffer类

  • java.lang.StringBuilder、java.lang.StringBuffert
  • 比String类更灵活,可以给一个StringBuilder或StringBuffer删除、插入或追加新的内容
  • String对象一旦创建,它的值就确定了
  • StringBuilder和StringBuffer功能上是相同的,StringBuffer是线程安全的,StringBuilder类被设计用作StringBuffer的一个简易替换
  • 建议优先使用StringBuilder类,因为在大多数实现中,它比StringBuffer要块
在java中text = text + i是通过下面的形式实现的:
	StringBuilder builder = new StringBuilder(text);
	builder.append(String.valueOf(i));
	text = builder.toString();
StringBuilder中常用的方法:
	public StringBuilder append(……) //追加参数(多种类型)中的内容到字符串中
	public StringBuilder insert(……) //将任意参数的字符串形式插入到原有字符串指定的位置
	public StringBuilder delete(int start, int end) //删除从start开始到end-1为止的一段字符序列
	public StringBuilder reverse() //将字符序列逆序

9. 正则表达式

  • java.util.regex.*
  • 常用类:Pattern、Matcher

你可能感兴趣的:(Java,java)