学习Java,你需要知道这些——类与对象

   日期:2020-05-03     浏览:88    评论:0    
核心提示:文章目录类声明与对象创建类与对象的关系类声明对象引用声明对象的创建数据成员数据成员声明方法成员类声明java

文章目录

  • 类声明与对象创建
    • 类与对象的关系
    • 类声明
    • 对象引用声明
    • 对象的创建
  • 数据成员
    • 数据成员声明
    • 实例变量
    • 类变量(静态变量)
  • 方法成员
    • 语法形式
    • 实例方法
    • 类方法
    • 包的作用
    • 包的命名
    • 编译单元
    • 包的声明
    • 包与目录
    • 引入包
  • 类的访问权限控制
    • 类的成员访问权限控制
    • 类成员在不同范围是否可以被访问
    • this关键字
  • 对象初始化
    • 构造方法
    • 默认构造方法
    • 自定义构造方法与方法重载

类声明与对象创建

类与对象的关系

  • 类是对一类对象的描述
  • 对象是类的具体实例

类声明

  • 方括号中的内容为可选项
[public] [abstract| final] class类名称 [extends父类名称][implements接口名称列表]
{
	数据成员声明及初始化;
	方法声明及方法体;
}

注意:光理论是不够的,在此送大家一套2020最新Java架构实战教程+大厂面试题库,点击此处 进来获取 一起交流进步哦!

  • class
    • 表明其后声明的是一个类
  • extends
    • 如果所声明的类是从某一父类派生而来,那么,父类的名字应写在extends之后
  • implements
    • 如果所声明的类要实现某些接口, 那么,接口的名字应写在
      implements之后
  • public
    • 表明此类为公有类
  • abstract
    • 指明此类为抽象类
  • final
    • 指明此类为终结类,不可被继承

钟表类:

public class Clock {
    //变量成员
    int hour ;
    int minute ;
    int second ;
    //方法成员
    public void setTime(int newH, int newM, int newS){
        hour= newH ;
        minute= newM ;
        second= newS ;
    }
    public void showTime() {
        System.out.println(hour+ "." + minute+"." +second);
    }
}

其中hour,minute,second为钟表类的属性,setTime,showTime为钟表类的行为。

对象引用声明

  • 语法
    类名 引用变量名;

  • Clock是已经声明的类名,声明引用变量aclock ,用于存储该类对象的引用: Clock aclock;
  • 声明一个引用变量时并没有生成对象。

对象的创建

  • 语法形式:
    new <类名>()
  • 例如:
    aclock=new Clock()
    • new的作用是:
    1. 在内存中为Clock类型的对象分配内存空间;
    2. 返回对象的引用。
  • 引用变量可以被赋以空值
    例如: aclock=null;

数据成员

  • 数据成员
    1.表示对象的状态
    2.可以是任意的数据类型

数据成员声明

  • 语法形式
[public | protected | private]
[static][ final][transient] [volatile]
数据类型变量名1[=变量初值],变量名2[=变量初值];
  • 说明
    1.public、 protected、 private 为访问控制符。
    2.static指明这是一 个静态成员变量(类变量)。
    3.final指明变量的值不能被修改。
    4.transient指明变量是不需要序列化的.
    5.volatile知名变量是一个共享变量

实例变量

1.没有static修饰的变量(数据成员)称为实例变量;
2.存储所有实例都需要的属性,不同实例的属性值可能不同;
3.可通过下面的表达式访问

  • 实例属性的值<实例名> < 实例变量名 >

类变量(静态变量)

1.用static修饰。
2.在整个类中只有一一个值。
3.类初始化的同时就被赋值。

  • 适用情况
    类中所有对象都相同的属性。
    经常需要共享的数据。
    系统中用到的一 些常量值。
  • 引用格式
    <类名|实例名>. <类变量名>

例:

public class Circle{
	static double PI = 3.1415926
	int redius;
}

其中PI为类变量。

方法成员

语法形式

[public | protected | private][static] [final][abstract] [native] [synchronized]
返回类型方法名([参数列表]) [throws exceptionList]
{
	方法体
}
  1. publicprotectedprivate 控制访问权限。
  2. static指明这是一个类方法(静态方法)。
  3. final指明这是一一个终结方法。
  4. abstract指明这是一个抽象方法。
  5. native用来集成java代码和其它语言的代码(本课程不涉及)。
  6. synchronized用来控制多个并发线程对共享数据的访问。
  • 返回类型
    • 方法返回值的类型,可以是任意的Java数据类型;
    • 当不需要返回值时,返回类型为void。
  • 参数类型
    • 简单数据类型、引用类型(数组、类或接口) ;
    • 可以有多个参数,也可以没有参数,方法声明时的参数称为形式参数。
  • 方法体
    • 方法的实现;
    • 包括局部变量的声明以及所有合法的Java语句;
    • 局部变量的作用域只在该方法内部。
  • throws exceptionList
    • 抛出异常列表。

实例方法

  • 表示特定对象的行为;
  • 声明时前面不加static修饰符;
  • 实例方法调用
    给对象发消息,使用对象的某个行为/功能:调用对象的某个方法。
  • 实例方法调用格式
    <对象名>.<方法名> ( [参数列表] )
    <对象名>为消息的接收者。
  • 参数传递
    值传递:参数类型为基本数据类型时
    引用传递:参数类型为对象类型或数组时

具有实例方法的圆类:

public class Circle {
    static double PI = 3.1415926;
    int radius;
    public double circumference(){ //求圆周长
        return 2*PI*radius;
    }
    public void enlarge(int factor){ //把圆扩大factor倍
        radius = radius*factor;
    }
    public boolean fitsInside (Rectangle r) { //判断能否被长方形包围
        return (2 *radius < r.width) && (2* radius < r.height);
    }
}

其中有三个实例方法,fitsInside方法的参数类型为对象。

类方法

  • 也称为静态方法,声明时前面需加static修饰。
  • 不能被声明为抽象的。
  • 可以类名直接调用,也可用类实例调用。

例:将摄氏温度(centigrade)转换成华氏温度(fahrenheit)

  • 转换公式为fahrenheit = centigrade * 9 /5 + 32,除了摄氏温度值及公式中需要的常量值,此功能不依赖于具体的类实例的属性值,因此可声明为类方法
    转换方法centigrade ToFahrenheit放在类Converter
public class Converter {
    public static int centigradeToFahrenheit(int cent)
    { 
        return (cent*9/ 5 + 32);
    }  
}

方法调用
Converter.centigradeToFahrenheit(40)

  • 包是一组类的集合。
  • 一个包可以包含若干个类文件,还可包含若干个包。

包的作用

  • 将相关的源代码文件组织在一起。
  • 类名的空间管理,利用包来划分名字空间可以避免类名冲突。
  • 提供包一级的封装及存取权限。

包的命名

  • 每个包的名称必须是"独一无二”的。
  • Java中包名使用小写字母表示。
  • 命名方式建议
    • 将机构的Internet域名反序,作为包名的前导;
    • 若包名中有任何不可用于标识符的字符,用下划线替代;
    • 若包名中的任何部分与关键字冲突,后缀下划线;
    • 若包名中的任何部分以数字或其他不能用作标识符起始的字符开头,前缀下划线。

编译单元

  • 一个Java源代码文件称为一一个编译单元,由三部分组成:
    • 所属包的声明(省略,则属于默认包);
    • Import (引入)包的声明,用于导入外部的类;
    • 类和接口的声明。
  • 一个编译单元中只能有一个public类,该类名与文件名相同,编译单元中的其他类往往是public类的辅助类,经过编译,每个类都会产生一个class文件。

包的声明

  • 命名的包( Named Packages )
    例如: package Mypackage;
  • 默认包(未命名的包)
    不含有包声明的编译单元是默认包的一部分。

包与目录

  • 包名就是文件夹名,即目录名;
  • 目录名并不一定是包名;
    假如我建了一个com.sd.db的包

    那么就会自动生成一个com>sd>db的目录

引入包

  • 为了使用其它包中所提供的类,需要使用import语句引入所需要的类。
  • Java编译 器为所有程序自动引入包java.lang。
  • import语句的格式:
import package1[.packae...]. (classname |*);

1.package1[.package…]表明包的层次,对应于文件目录;
2.classname指明所要引入的类名;
3.如果要引入一个包中的所有类,可以使用星号(*)来代替类名。

类的访问权限控制

  • 类的访问权限控制
类型 无修饰(默认) public
同一包中的类
不同包中的类

类的成员访问权限控制

  • 公有(public)
    可以被其他任何方法访问(前提是对类成员所属的类有访问权限)
  • 保护(protected)
    只可被同一类及其子类的方法访问
  • 私有(private)
    只可被同一类的方法访问
  • 默认(default)
    仅允许同一个包内的访问;又被称为“包( package)访问权限”

类成员在不同范围是否可以被访问

类型 private 无修饰 protected public
同一类
同一包中的子类
同一包中的非子类
不同包中的子类
不同包中的非子类

例:圆类

public Class Circle {
	static double PI = 3.14159265;
	private int radius;
	public doyble circumference() {
		return 2 * PI * radius;
	}
}

其他的public类中无法访问该类中的radius属性。
如果想要访问:

  • get方法
    功能是取得属性变量的值。get方法名以get 开头,后面是实例变量的名字
    例如:
public int getRadius(){
	return radius;
}
  • set方法
    功能是修改属性变量的值。set方法名以set开头,后面是实例变量的名字
    例如:
public void setRadius(int r){
	radius = r;
}

this关键字

  • 如果方法内的局部变量(包括形参)名与实例变量名相同,则方法体内访问实例变量时需要this关键字。
    例如:
public void setRadius(int radius){
	this.radius = radius;
}

对象初始化

  • 对象初始化
    系统在生成对象时,会为对象分配内存空间,并自动调用构造方法对实例变量进行初始化
  • 对象回收
    对象不再使用时,系统会调用垃圾回收程序将其占用的内存回收

构造方法

  • 方法名与类名相同;
  • 不定义返回类型;
  • 通常被声明为公有的(public) ;
  • 可以有任意多个参数;
  • 主要作用是完成对象的初始化工作;
  • 不能在程序中显式的调用;
  • 在生成一个对象时 ,会自动调用该类的构造方法为新对象初始化;若末显式声明构造方法,编译器隐含生成默认的构造方法。

默认构造方法

  • 没有参数(内部类除外),方法体为空;
  • 使用默认的构造方法初始化对象时,如果在类声明中没有给实
    例变量赋初值,则对象的属性值为零或空;

自定义构造方法与方法重载

  • 在生成对象时给构造方法传送初始值,为对象进行初始化。
  • 构造方法可以被重载
    一个类中有两个及以上同名的方法,但参数表不同,这种情况就被称为方法重载。在方法调用时,可以通过参数列表的
    不同来辨别应调用哪一个方法。
  • 只要显式声明了构造方法,编译器就不再生成默认的构造方法。
  • 也可以显式声明无参数的造方法,方法体中可以定义默认初始
    化方式。

例:

public class BankAccount {
    
    String ownerName;
    int accountNumber;
    float balance;

    //为BankAccount声明一个有三个参数的构造方法
    public BankAccount(String initName, int initAccountNumber, float initBalance) {
        ownerName = initName;
        accountNumber = initAccountNumber;
        balance = initBalance;
    }
    //假设一个新帐号的初始余额可以为0,则可增加一个带有两个参数的构造方法
    public BankAccount(String initName, int initAccountNumber) {
        ownerName = initName;
        accountNumber = initAccountNumber;
        balance = 0.0f;
    }
    //无参数的构造方法自定 义默认的初始化方式
    public BankAccount() {
        ownerName =" ";
        accountNumber = 999999;
        balance = 0.0f;
    }
}

一共定义了三种构造方法,可以看出名字都相同,但是由于参数不同,实现的功能也不同。
注意:最后送大家一套2020最新Java架构实战教程+大厂面试题库,点击此处进来获取 一起交流进步哦!

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服