03_JavaSE之OOP--面向对象(构造器,static关键字)

面向对象(三)

一、构造器(构造方法)

  1.概述以及作用

  构造器也叫构造方法,在构造类的对象时,构造器会运行,以便将实例域(成员变量)初始化成所希望的状态。

  作用:给对象的数据(属性)进行初始化赋值,也可以不进行任何赋值。

  2.例子:

  1)代码 

 1 public class Person {
 2     //成员变量
 3     String name;                        //姓名
 4     int age;                            //年龄
 5
 6     //空构造器
 7     public Person(){
 8
 9     }
10
11     //有参构造器
12     public Person(String name, int age) {
13         this.name = name;
14         this.age = age;
15     }
16 }
17
18 class Demo {
19     public static void main(String[] args){
20         //空构造器
21         Person p1 = new Person();
22         //有参构造器(初始化给对象赋值)
23         Person p2 =  new Person("王阳明","55");
24
25     }
26 }

  有两个构造器,一个是空构造器,另一个是有参构造器。构造器总是伴随着new操作符的执行被调用,而不能对一个已经存在的对象调用构造器来达到重新设置实例域的目的

  2)构造器格式的特点:

  • 构造器与类同名(大小也要一致)
  • 每个类可以有一个以上的构造器
  • 构造器参数可以有0个、1个或多个参数
  • 构造器没有返回值return
  • 构造器总是伴随着new操作符一起调用

 

  3.构造器的重载

  1)代码

 1     //空构造器
 2     public Person(){}
 3
 4     //有参构造器
 5     public Person(int age) {
 6         this.age = age;
 7     }
 8     public Person(String name) {
 9         this.name = name;
10     }
11     public Person(String name, int age) {
12         this.name = name;
13         this.age = age;
14     }

  Person()、Person(int age)、Person(String name)等这四个方法名相同,与返回值无关,只看参数列表。这就是构造方法的重载。重载只不过是在new时根据需求给不同的属性赋值罢了。

  注:1.如果我们没有给出构造方法,系统将自动提供一个无参的构造器。

    2.如果我们给出了构造方法,那么将不再用系统的,如果需要使用,必须自己给出。建议永远给出无参构造器。

  4.通过Set方法和构造器给成员变量赋值有什么区别?

  之前,我们给出了set/get方法,而是给成员变量赋值的,那么他和构造器赋值有什么区别呢。

  首先,构造器给对象赋值是发生在构造类的对象的时候随着new的执行被调用。而且不能对已经存在的一个对象调用构造器重新赋值。而set方法,是对象实例化以后,通过调用set方法进行给成员变量赋值,可以重新赋值进行更新。  

  其次,set方法强调的是修改属性值,而构造器则是给对象属性进行初始化。

二、对象创建的过程(内存图)

  如图:

三、static关键字

  1.static的特点:

  1)随着类的加载而加载

  2)优于对象存在

  3)被类的所有对象共享   (举例:班级学生拥有一个老师,那么老师可以为静态的,供学生共享。)

  4)可以通过类名直接调用。其实他本身也可以通过对象名调用。当然,推荐使用类名调用。

  2.static注意事项:

  a:在静态方法中是没有this关键字的

* 如何理解呢?

* 静态是随着类的加载而加载,this是随着对象的创建而存在。

* 静态比对象先存在。

 b:静态方法只能访问静态的成员变量和静态的成员方法

* 静态方法:

* 成员变量:只能访问静态变量

* 成员方法:只能访问静态成员方法

* 非静态方法:

* 成员变量:可以是静态的,也可以是非静态的

* 成员方法:可是是静态的成员方法,也可以是非静态的成员方法。

* 简单记:

* 静态只能访问静态。

  3.静态变量和成员变量和区别

  首先,静态变量也叫类的变量,随着类的加载而加载。成员变量也叫对象变量,随着对象的创建而创建。

  因此具体的不同是:

  1)所属不同:

    静态变量属于类

    成员变量属于对象

  2)内存当中的位置不同:

    静态变量属于方法区中的静态区

    成员变量属于堆内存

  3)内存出现时间不同:
    静态变量随着类加载而加载,随着类的消失而消失

    成员变量随着对象的创建而存在,随着对象的消失而消失。

  4)调用不同

    静态变量可以通过类名调用,也可以通过对象调用

    成员变量只能通过对象名调用。

如有错误之处,欢迎指正。

邮箱:[email protected]

原文地址:https://www.cnblogs.com/csiOS/p/8491758.html

时间: 2024-10-25 17:09:08

03_JavaSE之OOP--面向对象(构造器,static关键字)的相关文章

java 之 构造器 static关键字

构造器  特点: 方法名和类名一至,没有void没有返回,无参数的称为无参构造器,有参数的称为有参构造器 语法: public 类名 {数据类型 参数名} 目的:创建对象 注意:如果类中没有带有参数的构造器,就可以使用一个隐藏的默认的构造器来创建对象,如果一旦有带参数的构造器,默认的构造器就会 被覆盖.我们可以显式的定义出来默认构造器就可以使用了. 通过this(实参列表)可以调用本类中的 构造器,必须注意,this必须实在方法中的第一行.  static关键字 1. 修饰在属性上 定义类属性:

java第五章:面向对象(oop)之 static关键字

java程序在执行过程中,类,对象以及它们成员加载.初始化的顺序如下: 1.首先加载要创建对象的类及其直接与间接父类. 2.在类被加载的同时会将静态成员进行加载,主要包括静态成员变量的初始化,静态语句块的执行,在加载时按代码的先后顺序进行. 3.需要的类加载完成后,开始创建对象,首先会加载非静态的成员,主要包括非静态成员变量的初始化,非静态语句块的执行,在加载时按代码的先后顺序进行. 4.最后执行构造器,构造器执行完毕,对象生成.上面四段话意思就是静态变量(全局变量)创建时间要早于new对象(成

面向对象(static关键字)

static关键字:用于修饰成员(成员变量和成员函数) 被修饰后的成员具备以下特点: 随着类的加载而加载 优先于对象存在 被所有的对象共享 可以直接被类名调用 使用注意: 静态方法只能访问静态成员 静态方法中不可以写this,super关键字 主函数是静态的

面向对象基础——static关键字和代码块的使用

具体内容 在Java中可以使用static声明属性和方法,因为之前多部分属性和方法都属于非static的,这样一来,每个对象都占有自己的内容,如果现在希望一个属性被所有的对象所共同拥有,则可以将其声明为static类型,声明为static类型的属性和方法之后此属性或方法也称为类非,可以由类名称直接调用. 使用static声明属性 static可以声明全局属性,全局属性到底有哪些作用?如下所示 class Person{ // 定义Person类 String name ; // 定义name属性

面向对象的static关键字(类中的static关键字)

转自:http://blog.csdn.net/xiayefanxing/article/details/7382192 1.静态数据成员 在类内数据成员的声明前加上关键字static,该数据成员就是类内的静态数据成员. 先举一个静态数据成员的例子. 1 //Example 5 2 #include "stdafx.h" 3 #include <iostream> 4 using namespace std; 5 class Myclass 6 { 7 public: 8

静态成员函数(面向对象的static关键字)

静态成员函数 与静态数据成员一样,我们也可以创建一个静态成员函数,它为类的全部服务而不是某一个类的具体对象服务.静态成员函数与静态数据成员一样,都是类的内部实现,属于类定义的一部分.普通的成员函数一般都隐含一个this指针,this指针指向类的对象本身,因为普通成员函数总是具体的属于某个类的具体对象的.通常情况下,this都是缺省的.如函数fn()实际是this->fn().但是与普通函数相比,静态成员函数由于不是与任何的对象相联系,因此它不具有this指针.从这个意义上讲,它无法访问属于类对象

C++中的static关键字的总结

C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用. 1.面向过程设计中的static1.1静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量.我们先举一个静态全局变量的例子,如下: //Example 1#include <iostream.h>void fn();static int n; //定义静态全局变量void main(){ 

C++static关键字总结

注:本文转自vckbase,作者:韩耀旭 转自原帖地址:http://www.cnblogs.com/BeyondAnyTime/archive/2012/06/08/2542315.html 面向对象的static关键字(类中的static关键字)1.1静态数据成员在类内数据成员的声明前加上关键字static,该数据成员就是类内的静态数据成员.先举一个静态数据成员的例子. //Example 5#include <iostream.h>class Myclass{public:  Mycla

(转)C++中的static关键字的总结

文章转自 http://www.cnblogs.com/BeyondAnyTime/archive/2012/06/08/2542315.html C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用. 1.面向过程设计中的static1.1静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量.我们先举一个静态全局变量的例子,如下: //Exam

C++中的static关键字

C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用.一.面向过程设计中的static1.静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量.我们先举一个静态全局变量的例子,如下: [cpp] view plain copy #include<iostream> using namespace std; static int n;  //定义