zoukankan      html  css  js  c++  java
  • java基础:4.2 对象和类(二)、数据域封装、this

    1、数据域封装

    为了避免对数据域的直接修改,应该使用Private修饰符将数据域声明为私有的,这称为数据域封装。

    在定义私有数据域的类外的对象是不能访问这个数据域的。但是经常会有客户端需要存取、修改数据域的情况。为了能够访问私有数据域,可以提供一个get 方法返回数据域的值。为了能够更新一个数据域,可以提供一个set 方法给数据域设置新值。get 方法也被称为访问器(accessor), 而set 方法称为修改器(mutator)。

    public returnType getPropertyName()
    public boolean isPropertyName()
    public vodi setPropertyName(dataType propertyValue)

    举例:

    public class Circle {
        private double radius=1;   //私有的,可以防止被篡改。
        private static int circleNumber =0;
        
        /*	set radius */
        Circle(){
            circleNumber++;
        }
        Circle(double newRadius){
            radius = newRadius;
            circleNumber++;
        }
        
        /* return radius */
        public double getRadius() {
        	return radius;
        }
        /* set radius */
        public void setRadius(double newRadius) {
        	radius = (newRadius >=0) ? newRadius : 0;
        }
        /* get the number of all circles */
        public static int getNumberOfCircle() {
        	return circleNumber;
        }
        
        public double getArea(){
            return radius*radius*Math.PI;
        }
    }
    
    

    2、对象数组

    之前学过了怎么申明数组,这里把对象和数组的知识结合在一起————申明、使用对象数组

    package day06;
    public class TestClass {
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Circle[] c = new Circle[5];    // 创建了5个对象的数组
    		for(int i=0;i<c.length;i++) {
    			c[i] = new Circle(i);   // 对象赋值
    			c[i].printC();
    		}	
    	}
    }
    
    package day06;
    import java.util.Random;
    public class TestClass {
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		final int number = 5;
    		Circle[] CircleArray;
    		CircleArray = creatCircleArray(number);
    		printArray(CircleArray);
    		printSum(CircleArray);
    	}
    	
    	public static Circle[] creatCircleArray(int number) {
    		Circle[] c = new Circle[number];
    		for (int i=0;i<c.length;i++) {
    			c[i] = new Circle(Math.random()*10);
    		}
    		return c;
    	}
    	
    	public static void printArray(Circle[] circleArray) {
    		System.out.printf("%-30s%-15s
    ","Radius","Area");
    		for(int i=0;i<circleArray.length;i++) {
    			System.out.printf("%-30f%-15f
    ",circleArray[i].getRadius(),circleArray[i].getArea());
    		}
    	}
    	
    	public static void printSum(Circle[] circleArray) {
    		double sum=0;
    		for (int i=0;i<circleArray.length;i++) 
    			sum += circleArray[i].getArea();
    		System.out.printf("sum = %.5f
    ",sum);
    	}
    }
    
    
    
    

    3、this

    this的主要三个作用

    (1)this调用本类中的属性,也就是类中的成员变量;

    (2)this调用本类中的其他方法;

    (3)this调用本类中的其他构造方法,调用时要放在构造方法的首行。

    应用一:引用成员变量

    Public Class Student {
        String name;           //定义一个成员变量name
        private void SetName(String name) {         //定义一个参数(局部变量)name
        this.name=name; }             //将局部变量的值传递给成员变量
    }  

              //两个变量名字如果相同的话,那么Java如何判断使用哪个变量?

         此时this这个关键字就起到作用了。this这个关键字其代表的就是对象中的成员变量或者方法。也就是说,如果在某个变量前面加上一个this关键字,其指的就是这个对象的成员变量或者方法,而不是指成员方法的形式参数或者局部变量。

             不过有些程序员即使在没有相同变量的时候,也喜欢使用this.成员变量的形式来引用变量,这主要是从便于代码的阅读考虑的。一看到这个this关键字就知道现在引用的变量是成员变量或者成员方法,而不是局部变量。这无形中就提高了代码的阅读性

     

    应用二:调用类的构造方法

    public class Circle {
            private double radius;
            public Circle(double radius) {
                  this.radius = radius; }   
         //  1方法. this关键字用于引用所构建的对象的隐藏数据域radius
    
            public Clrcle() {
             thls(1.0);           //  this关键字用于调用另外一个构造方法
    }

        如果要使用这种方式来调用构造方法的话,有一个语法上的限制。一般来说,利用this关键字来调用构造方法,只有在无参数构造方法中第一句使用this调用有参数的构造方法。否则的话,翻译的时候,就会有错误信息。这跟引用成员变量不同。如果引用成员变量的话,this关键字是没有位置上的限制的。如果不熟悉这个限制的话,那么还是老老实实的采用传统的构造方法调用方式为好。虽然比较麻烦,但是至少不会出错。

    应用三:返回对象的值

            this关键字除了可以引用变量或者成员方法之外,还有一个重大的作用就是返回类的引用。如在代码中,可以使用return this,来返回某个类的引用。此时这个this关键字就代表类的名称。如代码在上面student类中,那么代码代表的含义就是return student。可见,这个this关键字除了可以引用变量或者成员方法之外,还可以作为类的返回值,这才是this关键字最引人注意的地方。

  • 相关阅读:
    css常用字体
    多行文本显示省略号,点击展开隐藏
    某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的, 加密规则如下:每位数字都加上5,然后用除以10的余数代替该数字,再将第一位和第四位交换, 第二位和第三位交换,请编写一个函数,传入原文,输出密文
    编写一个函数,计算任意两个数字之间所能组成的奇数个数,数字必须是个位数。 比如:计算0~3之间能组成的奇数是: 01、03、13、21、23、31
    Redis(一) 数据结构与底层存储 & 事务 & 持久化 & lua
    IO多路复用之Reactor
    IO多路复用之select poll epoll
    五种IO模型
    kafka(五) 流式处理 kafka stream
    kafka(二) 高性能技术分析
  • 原文地址:https://www.cnblogs.com/l20902/p/10610950.html
Copyright © 2011-2022 走看看