Java代码组成部分

一、构造函数与默认构造函数

构造函数,是一种特殊方法。主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。

/**
* 矩形
*/
class Rectangle {

     /**
      * 构造函数
      */
     public Rectangle(int length, int width) {
         this.length = length;
         this.width = width;
     }
     
     public static void main (String []args){
        //使用构造函数创建对象
        Rectangle rectangle = new Rectangle(10,5);
        
     }
}

特别的一个类可有多个构造函数,可根据其参数个数的不同或参数类型的不同来区分构造函数的重载。

构造函数跟一般的实例方法相似;

与其它方法不同点:

  1. 构造器没有返回类型
  2. 不会被继承,且可以有范围修饰符

构造器的函数名称必须和它所属的类的名称相同。它承担着初始化对象数据成员的任务。

如果在编写一个可实例化的类时没有专门编写构造函数,多数编程语言会自动生成缺省构造器(默认构造函数)。

如果在编写一个可实例化的类时没有专门编写构造函数,默认情况下,一个Java类中会自动生成一个默认无参构造函数。默认构造函数一般会把成员变量的值初始化为默认值,如int -> 0,Integer -> null。

但如果手动在某个类中定义了一个有参数构造函数,那么这个默认的无参构造函数就不会自动添加了。要手动创建!

/**
* 矩形
*/
class Rectangle {

     /**
      * 构造函数
      */
     public Rectangle(int length, int width) {
         this.length = length;
         this.width = width;
     }
     
     /**
      * 无参构造函数
      */
     public Rectangle() {
     }
}

二、类变量、成员变量和局部变量

Java中三种变量:类变量、成员变量和局部变量。分别存放在JVM的方法区、堆内存和栈内存。

    public class Variables {
        /**
         * 类变量
         */
        private static int a;
    
        /**
         * 成员变量
         */
        private int b;
    
        /**
         * 局部变量
         * @param c
         */
        public void test(int c){
            int d;
        }
    }

a作为类变量,存放在JVM的方法区;b作为成员变量,和对象一起存储在堆内存中(不考虑栈上分配的情况);c和d作为方法的局部变量,保存在栈内存。

介绍这三种变量类型,是因为很多人因为不知道这三种类型的区别,所以不知道他们分别存放在哪里,这导致不知道那些变量需要考虑并发问题。

关于并发问题,这里简单说明:

因为只有共享变量才会遇到并发问题,所以,变量a和b是共享变量,变量c和d是非共享变量。所以如果遇到多线程场景,对于变量a和b的操作需要考虑线程安全,而对于线程c和d的操作不需要考虑线程安全。


三、成员变量和方法作用域

通过封装手段,将成员变量、方法等包装在一个类中,那么被封装在类中的这些成员变量和方法,能不能被外部访问呢?能被谁访问呢?

这种能不能被访问、能被谁访问的特性,Java是通过访问控制修饰符来实现。

Java中,可以用访问控制符来保护对类、变量、方法和构造方法的访问,Java 支持 4 种不同的访问权限。

对于成员变量和方法的作用域,public,protected,private及不写间的区别:

  1. public:表明该成员变量或方法对所有类或对象都是可见的,所有类或对象都可直接访问。
  2. private:表明该成员变量或方法是私有的,只有当前类对其具有访问权限,除此之外其他类或对象都没有访问权限,子类也没有访问权限。
  3. protected:表明成员变量或方法对类自身,与同在一个包中的其他类可见,其他包下的类不可访问,除非是其的子类
  4. default:表明该成员变量或方法只有自己和其位于同一个包的内可见,其他包内的类不能访问,即便是它的子类。

猜你喜欢

转载自blog.csdn.net/wangshiqi666/article/details/130702710