JAVA——类的定义及其实例化

1.Java中的类

类可以看成是创建Java对象的模板

修饰符 class 类名{
    修饰符 数据类型 属性名(成员变量);//属性
    //构造方法(无修饰符,无返回值,名称和类名一样) 
    //方法(成员函数)
}

       通过下面一个例子,简单理解一下Java类的定义

public class CAT{// public是类的修饰符,class是定义类的关键字,CAT是类名
    String name;
    int age;//name、age是类的成员变量
    void mm(){  // 喵喵叫
        System.out.println("喵喵~");
    }
    void hungry(){  // 饥饿
        System.out.println("喵~,我饿了");
    }//mm()、hungry()是类的方法,也叫成员函数
}

一个类可以包含以下变量类型:

l 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁

l 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问

l 类变量:类变量也声明在类中,方法体之外,但必须声明为static类型

2.构造方法

       每个类都有构造方法。如果没有为类定义构造方法,Java将会为该类提供一个默认构造方法。构造方法没有返回值,名字与类名相同

       下面是一个构造方法示例

public class Dog{
    public Dog(String name){//这个构造方法仅有一个参数:name
       //方法体
    }
 }

3.创建对象

       对象是根据类创建的。在Java中,使用关键字new来创建一个新的对象。创建对象需要以下三步:

l 声明:声明一个对象,包括对象名称和对象类型

l 实例化:使用关键字new来创建一个对象

l 初始化:使用new创建对象时,会调用构造方法初始化对象

       下面是一个创建对象的示例

public class Dog{
    public Dog(String name){//这个构造方法仅有一个参数:name
       System.out.println("小狗的名字是 : " + name ); 
    }
    public static void main(String []args){
       // 下面的语句将创建一个Dog对象
       Dog d = new Dog( "tonny" );
    }
 }

4.访问类中的的成员变量和方法

如下所示,通过对象名点的方式来访问([对象名].)

/* 实例化类 */
 Person p = new Person();
 /* 访问类中的变量 */
 p.name;
 /* 访问类中的方法 */
 p.gethigh();

       下面是一个示例

public class Dog{
    int DogAge;
    public Dog(String name){
       // 这个构造器仅有一个参数:name
       System.out.println("小狗的名字是 : " + name ); 
    }
  
    public void setAge( int age ){
        DogAge = age;
    }
  
    public int getAge( ){
        System.out.println("小狗的年龄为 : " + DogAge ); 
        return DogAge;
    }
  
    public static void main(String []args){
       /* 创建对象 */
       Dog myDog = new Dog( "tommy" );
       /* 通过方法来设定age */
       myDog.setAge( 2 );
       /* 调用另一个方法获取age */
       myDog.getAge( );
       /*你也可以像下面这样访问成员变量 */
       System.out.println("变量值 : " + myDog.DogAge ); 
    }
 }

5.访问修饰符

       访问修饰符也叫访问控制符,是指能够控制类、成员变量、方法的使用权限的关键字。

       在面向对象编程中,访问控制符是一个很重要的概念,可以使用它来保护对类、变量、方法和构造方法的访问。

Java支持四种不同的访问权限:

修饰符

说明

public

公共的,所有类可见

protected

保护的,同一包内的类和所有子类可见

private

私有的,同一类中可见

默认的

同一包内可见,默认不使用任何修饰符

       关于访问控制符,内容太多了,详细的后面的文章再讲

6.this 关键字

this的作用一般有三个:使用this区分同名变量、作为方法名来初始化对象、作为参数传递

使用this区分同名变量

       成员变量与方法内部的变量重名时,希望在方法内部调用成员变量,怎么办呢?这时候只能使用this,例如:

public class Demo{
     public String name;
     public int age;
   
     public Demo(String name, int age){
         this.name = name;
         this.age = age;
     }
   
     public void say(){
         System.out.println("我的名字是" + name + ",我" + age + "岁");
     }
   
     public static void main(String[] args) {
         Demo d = new Demo("王XX", 18);
         d.say();
     }
 }

       在Demo()中,形参和成员变量重名,如果不使用this,访问到的就是局部变量name和age,而不是成员变量。在 say() 中,我们没有使用 this,因为成员变量的作用域是整个实例,当然也可以加上 this

作为方法名来初始化对象

       也就是相当于调用本类的其它构造方法,它必须作为构造方法的第一句。示例如下:

public class Demo{
     public String name;
     public int age;
    
     public Demo(){
         this("王XX", 18);
     }
   
     public Demo(String name, int age){
         this.name = name;
         this.age = age;
     }
   
     public void say(){
         System.out.println("我的名字是" + name + ",今年" + age + "岁");
     }
   
     public static void main(String[] args) {
         Demo d = new Demo();
         d.say();
     }
 }

       有几点要注意:

l 在构造方法中调用另一个构造方法,调用动作必须置于最起始的位置

l 不能在构造方法以外的任何方法内调用构造方法

l 在一个构造方法内只能调用一个构造方法

作为参数传递

       需要在某些完全分离的类中调用一个方法,并将当前对象的一个引用作为参数传递时。例如:

public class Demo{
     public static void main(String[] args){
         B b = new B(new A());
     }
 }
 class A{
     public A(){
         new B(this).print();  // 匿名对象
     }
     public void print(){
         System.out.println("Hello from A!");
     }
 }
 class B{
     A a;
     public B(A a){
         this.a = a;
     }
     public void print() {
         a.print();
         System.out.println("Hello from B!");
     }
 }

       匿名对象就是没有名字的对象。如果对象只使用一次,就可以作为匿名对象,代码中 new B(this).print(); 等价于 (new B(this) ).print();,先通过new B(this)创建一个没有名字的对象,再调用它的方法

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏mySoul

js 中的class

js的class仅仅为一个语法糖,是在原先构造函数的基础上出现的class,仅仅如此。所以使用构造函数构造类,或者使用class语法糖构造类都是相同的。具体还是...

981
来自专栏平凡文摘

深入理解Java类型信息(Class对象)与反射机制

993
来自专栏cs

C#3.0面向对象程序设计一

文章首发 http://www.imooc.com/article/22105 我还在简书。。。。。。 面向对象三大特征,继承,封装,多态 1.0 封...

2806
来自专栏小樱的经验随笔

【Java学习笔记之十四】Java中this用法小节

用类名定义一个变量的时候,定义的只是一个引用,外面可以通过这个引用来访问这个类里面的属性和方法。     那们类里面是够也应该有一个引用来访问自己的属性和方法纳...

2676
来自专栏跟着阿笨一起玩NET

c#对象初始化顺序

2. 先静态化后实例化。当一个类被访问时,静态变量和构造函数最先被初始化.接着是对象的实例化变量和构造函数被初始化

521
来自专栏java一日一条

继承、接口与多态的相关问题

继承:通过继承实现代码复用。Java中所有的类都是通过直接或间接地继程java.lang.Object类得到的。继承而得到的类称为子类,被继承的类称为父类。子类...

552
来自专栏破晓之歌

JAVA入门2 原

我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立。然而在某些时候,我们更希望该类所有的对象共享同一个成员。此时就是 static 大显身...

561
来自专栏coding for love

JS原生引用类型解析1-Object类型

(注1:如果有问题欢迎留言探讨,一起学习!转载请注明出处,喜欢可以点个赞哦!) (注2:更多内容请查看我的目录。)

391
来自专栏Java成长之路

多态易错题

①②③比较好理解,一般不会出错。④⑤就有点糊涂了,为什么输出的不是”B and B”呢?!!先来回顾一下多态性。

732
来自专栏技术碎碎念

python3 入门 (三) 函数与lambda表达式、闭包

函数 是组织好的、可重复使用的、用来实现单一或相关联功能的代码段。 函数代码块以def关键词开头,后接函数标识符名称和圆括号() 任何传入参数和自变量必须放在圆...

3238

扫码关注云+社区