Java基础| 类和对象

目录

目录

类和对象的概述

1.面向对象的基本概念

我们将类定义为一组具有共同属性和行为的对象的模版。例如我们定义类Student,而描述Student的属性有姓名、性别、年龄这些属性,而Student的行为包括说话、写字、考试。Student就相当于是学生这个群体的模板了。

对象

类只是定义属性和行为的模板,但是仅仅有类还不够,还必须要创建属于类的对象。对象是类的实例,对象与类的关系就像变量和数据类型的关系一样,简单来说,对象是类的“取值”,能够保存类的一个实例。

例如上面的Student的例子中,我们创建一个叫做张三的Student对象,而张三就有了Student中定义的所有属性了。

2.类的声明

Java是一种纯面向对象的语言,所以每个程序至少包含有一个类。所有的数据和操作都封装在类中。类要先声明,后使用。类的声明形式如下:

[修饰符] class 类名 [extends 父类名] [implements 接口] {  //有些类没有父类或接口时可以忽略不写
  成员变量声明;
  成员方法声明;
}

将上面的Student举例来说:

public class Student {  //类首
  String name;  //类的成员变量
  String sex;
  int age;

  void say(){};  //类的成员方法
  void write(){};
  void test(){};
}

3.对象的创建的使用

对象的创建

类在Java中就像int,char等数据类型一样,是对事物的抽象。在程序中必须创建类的实例,即对象。对象的创建包括声明和实例化两项工作,可以通过一条语句来实现,创建格式是:
类名 对象名 = new 类名(参数表);
例如将上述的Student的对象zhangsan实现:

Student zhangsan = new Student();
对象的使用

当创建一个对象后,对象就有了这个类的所有的成员变量和方法,就可以引用这些变量,调用这些方法了。调用的方式和C语言一样,采用的是圆点标识符.,例如对zhangsan进行操作:

zhangsan.name = "张三";
zhangsan.sex = "男";
zhangsan.age = 18;
zhangsan.say();  //调用say()这个方法
zhangsan.write();
zhangsan.test();

4.构造方法和对象的初始化

在类中有一种特殊的成员方法,其方法名与类名相同,称为构造方法。构造方法也称为构造器,当使用new实例化一个对象时,系统将自动调用构造方法初始化该对象。构造方法有如下几个特点:
(1)构造方法没有返回值,前面不能有返回值类型,也不能有void
(2)程序中不能直接调用构造方法。只有在创建新的对象时系统自动调用。
(3)如果自己没有声明构造方法,则系统会自动为该类生成一个无参数类型的默认构造方法。例如在Student的类中,系统就自动声明了构造方法Student(){};

public class Point{
    int x;
    int y;
    Point(int xx,int yy){
        x = xx;  //让成员变量x=xx
        y = yy;  //成员变量y=yy
    }

    public static void main(String args[]){
        Point myPoint = new Point(2,3);  //调用构造函数
    }
}

在Java中,还可以允许一个类中拥有多个构造函数,当我们在创建对象时,系统会根据创建时的参数来自动选择调用哪一个构造函数。

public class Point{
    int x;
    int y;
    Point(int xx,int yy){  //构造函数1
        x = xx;  //让成员变量x=xx
        y = yy;  //成员变量y=yy
    }

    Point(){ };  //构造函数2

    public static void main(String args[]){
        Point myPoint1 = new Point(2,3);  //调用构造函数1
        Point myPoint1 = new Point(2,3);  //调用构造函数2
    }
}

5.对象销毁

通过new运算符实例化对象时,系统为对象自动分配所需要的存储空间,但是由于内存有限,无法存放无限多个对象,因此Java提供了资源回收机制。在Java中会自动销毁无用的对象,所以一般用户不需要专门设计释放对象的方法。但是如果需要在某些情况下手动释放对象,则可以在类中声明void finalize();方法,然后使用对象来进行销毁。

类的封装

封装性是面向对象的核心特征之一,它提供了一种信息隐藏技术。类的封装包含两层含义:将数据和对数据的操作组合起来构成类,让类成为一个不可分割的独立单位;类中既要提供与外部联系的接口,同时又要尽可能隐藏类的实现细节。封装性为软件提供了一种模块化的设计机制。

1.访问权限

按照类的封装性原则,类的设计者既要提供类与外部的联系方式,又要尽可能的隐藏类的实现细节。具体的方法就是为类及其成员变量和成员方法分别设置合理的访问权限。在Java中,类有2种访问权限,类中的成员和方法有4种访问权限。

成员访问权限

(1)public
被public修饰的成员变量和方法可以在所有的类中访问。即所有的类都可以调用被public修饰的成员变量的方法。
(2)protected
被protected修饰的成员变量和方法可以在声明它们的类中访问,在该类中的子类中访问,也可以与该类位于同一个包中的类访问,但不能在位于其他的包中的类访问。
(3)缺省
缺省指的是不使用权限修饰符,被缺省修饰的类的成员变量和方法可以在声明它们的类中访问,也可以与该类位于同一个包中的类访问,但不能在位于其他的包中的类访问,也不能被自己的子类访问。
(4)private
被private修饰成员变量和方法只能在自己的类中访问,其他的任何类都不能访问。

类访问权限

声明一个类可以使用public和缺省两种。需要注意的是虽然一个Java源程序文件中可以包含多个类,但是只能有一个类使用public修饰符,并且该类的名字与源程序文件的名字相同。

2.类成员

Java中的类中可以包含两种成员:实例成员和类成员

实例成员是属于对象的,实例成员包括实例成员变量和实例成员方法。只有创建了对象之后,才能通过对象访问实例成员变量、调用实例成员方法。前面所创建的都是实例成员。

类成员是属于类的,类成员是需要用static修饰的,类成员也称为静态成员。类成员包括类成员变量和方法。通过类名可以直接访问类成员变量、调用类成员方法。即使没有创建对象,也可以引用类成员

类成员变量

类成员变量和实例变量的区别如下:
(1)在类中声明成员变量时,没有使用static修饰的变量为实例成员变量,使用static修饰的为类成员变量。

public class Student {  
  String name;  //实例成员变量
  String sex;  //实例成员变量
  int age;  //实例成员变量
  static int count = 0;  //类成员变量

  void say(){};  
  void write(){};
  void test(){};
}

(2)系统只为类成员变量分配一个存储单元,所有的对象共享一个类成员变量。当某个对象修改了类成员变量的值后,所有对象都将使用的是修改后的值。

(3)实例成员变量属于对象,只能通过对象引用;类成员变量属于类,既可以通过类名访问,也可以通过对象名访问。

public class Student {  
    String name;
    String sex;
    int age;
    static int count = 0;

    void say(){};
    void write(){};
    void test(){}

    public static void main(String args[]){
        Student student1 = new Student();
        System.out.println(student1.count);  //输出为0
        System.out.println(Student.count);  //输出为0
    }
}
类成员方法

类成员方法与实例成员方法的区别如下:
(1)在类中声明成员方法时,没有使用static修饰的变量为实例成员变量,使用static修饰的为类成员方法。

public class Student {  
  String name;  
  String sex;  
  int age; 
  static int count = 0;  

  void say(){};  
  void write(){};
  void test(){};
  static void play(){};
}

(2)类成员方法中除了使用本方法中声明的局部变量外,只可以访问类成员变量,不能访问实例成员变量。

(3)类成员方法只能调用类成员方法,不能够调用实例成员方法。但是实例成员方法既可以调用类成员方法,也可以调用实例成员方法。

double perimeter(double x,double y){
    return 2*(x+y);
}

static double area(double x,double y){
    return x*y;
}

void print1(){
    System.out.println(perimeter(2.2,4.6));  //可以通过编译
    System.out.println(area(1.1,5.2));
}

static void print2(){
    System.out.println(perimeter(2.2,4.6));  //无法通过编译
    System.out.println(area(1.1,5.2));
}

(4)类成员方法既可以通过实例对象访问,也可以通过类访问。

public class Student {  
  String name;  
  String sex;  
  int age; 
  static int count = 0;  

  void say(){};  
  void write(){};
  void test(){};
  static void play(){};

   public static void main(String args[]){
        Student student1 = new Student();
        student1.play();
        Student.play();
    }
}
数学函数类方法

Java类库中的Math类提供了很多常用的数学运算的方法,这些方法都是static方法,通过类名Math()来调用。Math()类的常用方法包括:
sin(double x);
cos(double x);
log(double x);
exp(double x); //返回e^x
abs(double x); //返回x的绝对值
max(double x,double y); //返回x与y中的较大值
sqrt(double x);
pow(double x,double y); //返回y^x

public class MaxNumber{
    public static void main(String args[]){
        int x = 25;
        int y = 36;
        System.out.println("较大值是:"+Math.max(x,y));  //输出的是36
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容

  • 整理来自互联网 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具...
    Ncompass阅读 1,534评论 0 6
  • 面向对象笔记 一、 对象在内存中的存放方法以及被调用过程 class文件首先被加载到方法区中的class文件内容区...
    VictorBXv阅读 456评论 0 2
  • 一:java概述: 1,JDK:Java Development Kit,java的开发和运行环境,java的开发...
    慕容小伟阅读 1,763评论 0 10
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,627评论 0 11
  • 你为什么没有时间跑步? 因为上班忙,没时间啊! 那你为什么有时间吃饭,有时间睡觉呢? 因为不吃饭会饿,不睡觉会困!...
    李灿辉阅读 134评论 1 0