【骚全带你学Java---十、面向对象,构造函数,static关键字】

面向对象

概述
  • 对于面向过程思想,强调的是过程(动作) C语言

  • 对于面向对象,强调的是对象(实体) C++ Java C#,Objective-c,python,Swift等

特点
  • 面向对象就是一种常见的思想,符合人们的思考习惯。

  • 面向对象的出现,将复杂的问题简单化。

  • 面向对象的出现,让曾经在过程中的执行者,变成了对象中的指挥者。

类与对象

java语言对现实生活中的事物进行描述,通过类的形式来体现。
对于事物的描述通常只关注两方面:

  • 一个是属性(变量)

  • 一个是行为(方法)
    只要明确该事物的属性和行为并在类中定义即可。

类: 事物的描述

对象:该类事物的实例。java中通过new来创建。

定义类其实就是在定义类中的成员。

成员:成员变量<–>属性 成员方法<–>行为。

成员变量和局部变量的区别:
  • 1.成员变量定义在类中,整个类中都可以访问。局部变量定义在函数,语句,局部代码块中,只在所属的区域有效。

  • 2.成员变量存在于堆内存中的对象中。局部变量存在于栈内存的方法中。

  • 3.成员变量随着对象的创建而存在,随着对象的消失而消失。局部变量随着所属区域的执行而存在,随着所属区域的结束而释放。

  • 4.成员变量都有默认初始化值。局部变量没有默认初始化值。

构造函数

定义:创建构造对象时调用的函数。
作用:可以给对象经行初始化。(创建对象都必须要通过构造函数初始化)

package com.duwenquan.learnjava;

public class LearnJavaDemo {
    public static void main(String[] args) {
        LearnJava learn1=new LearnJava();            //输出Hello World。new对象一建立,就会调用对应的构造函数LearnJava(),并执行其中的println语句。
    }
}
class LearnJava{        
    LearnJava(){        //定义构造函数,输出Hello World
        System.out.println("Hellow World");
    }
}
特点

1.构造器必须与类同名(如果一个源文件中有多个类,那么构造器必须与公共类同名)
2.每个类可以有一个以上的构造器
3.构造器可以有0个、1个或1个以上的参数
4.构造器没有返回值
5.构造器总是伴随着new操作一起调用。
6.使用super调用父类构造器的语句必须是子类构造器的第一条语句。

构造函数与普通函数的区别

1,格式不同:
构造函数不存在返回类型,函数名与所在类的类名一致;
普通函数有返回类型,函数名可以根据需求进行命名。

2,调用时期不同:
构造函数在类的对象创建时就运行;
普通函数在对象调用时才会执行。

3,执行次数不同:
一个对象创建后,其构造函数只执行一次,就是创建时执行;
一个对象创建后,其普通函数可以执行多次,取决于对象的调用次数。

构造函数的示例
public class Stu1 {

    public Stu1()
    {
        System.out.println("调用了Stu1类的无参构造函数。");
    }

    public Stu1(String name)
    {
        System.out.println("调用了Stu1类的有参构造函数,参数内容:"+name);
    }
}


public class Stu2 extends Stu1{

    public Stu2(){

        System.out.println("调用了Stu2类的无参构造函数。");
    }

    public Stu2(String name){

        super(name);
        System.out.println("调用了Stu2类的有参构造函数, 参数内容: "+name);
    }


}


import java.util.*;
public class TestConstr {

    public static void main(String []args)
    {
        Stu2 stu=new Stu2();
        Stu2 stu2=new Stu2("zhangsan");
    }

}
//输出结果
//调用了Stu1类的无参构造函数。
//调用了Stu2类的无参构造函数。
//调用了Stu1类的有参构造函数,参数内容:zhangsan
//调用了Stu2类的有参构造函数,参数内容:zhangsan
注意

1.一个类中如果没有定义过构造函数,那么该类中会有一个默认的空参数构造函数。
2.如果在类中定义了指定的构造函数那么类中的默认构造函数就没有了。
3.构造函数可以有多个,用于对不同的对象进行针对性的初始化。
4.多个构造函数在类中是以重载的形式来体现的。

Java中的static关键字

static关键字的特点
  • 1.static是一个修饰符,用于修饰成员。(成员变量,成员函数)static修饰的成员变量 称之为静态变量或类变量。
  • 2.static修饰的成员被所有的对象共享。
  • 3.static优先于对象存在,因为static的成员随着类的加载就已经存在。
  • 4.static修饰的成员多了一种调用方式,可以直接被类名所调用,(类名.静态成员)。
  • 5.static修饰的数据是共享数据,对象中的存储的是特有的数据。
1     private static int age;//用static修饰的成员变量静态变量或者叫做类变量
2     private String name;   //成员变量
3     public static void display(){//静态函数 可直接用类来调用
4         System.out.println("displayStatic");
5     }
6     public void displayTest(){//成员函数 需要创建对象才可以调用
7         System.out.println("displayTest");
8     }
成员变量和静态变量的区别

1.生命周期的不同:
    成员变量随着对象的创建而存在随着对象的回收而释放。
    静态变量随着类的加载而存在随着类的消失而消失。
2.调用方式不同:
    成员变量只能被对象调用。
    静态变量可以被对象调用,也可以用类名调用。(推荐用类名调用)
3.别名不同:
    成员变量也称为实例变量。
    静态变量称为类变量。
4.数据存储位置不同:
    成员变量数据存储在堆内存的对象中,所以也叫对象的特有数据。
    静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。

 1 public class Test {
 2     private static int age;//用static修饰的成员变量静态变量或者叫做类变量
 3     private String name;   //成员变量
 4     public static void display(){//静态函数 可直接用类来调用
 5         System.out.println("displayStatic");
 6     }
 7     public void displayTest(){//成员函数 需要创建对象才可以调用
 8         System.out.println("displayTest");
 9     }
10     
11     public static void main(String[] args) {
12         Test.age = 1;//静态变量可以直接用类名调用。随着类加载而存在类的消失而消失
13         Test d = new Test();
14         d.age = 28;//静态变量也可以通过对象来调用(推荐用类名来调用)
15         d.name="杜文全";//成员变量只能通过对象来调用。随着对象创建而存在随着对象回收而释放。
16         Test.display();//静态方法也可以直接用类名调用。
17         d.display();    //静态方法也可以通过对象来调用。
18         d.displayTest();//非静态方法只能通过对象来调用。
19     }
20 }
静态使用时需要注意的事项:

1.静态方法只能访问静态成员。(非静态既可以访问静态,又可以访问非静态)
2.静态方法中不可以使用this或者super关键字。
3.主函数是静态的。

 1 public class Test {
 2     private static int age;//用static修饰的成员变量静态变量或者叫做类变量
 3     private String name;   //成员变量也叫做实例变量
 4     
 5     public static void display(){//静态函数
 6         Test d = new Test();//因为静态先于对象加载如果需要访问必须要创建对象才能访问
 7         d.name = "杜文全";//静态方法不能直接访问非静态的成员变量
 8         d.displayTest();//静态方法不能直接访问非静态的成员函数
 9         System.out.println(d.name);
10     }
11     public void displayTest(){//成员函数
12         age = 28;//可以直接访问静态变量
13         display();//也可以直接访问静态函数
14         System.out.println(age);
15     }
16 }    
static修饰的使用场景
  • 1.静态变量:

当分析对象中所具备的成员变量的值都是相同的。这时这个成员就可以被静态修饰。
只要是数据在对象中都是不同的,就是对象的特有数据,必须存储在对象中,是非静态的。
如果是相同的数据,对象不需要做修改,只需要使用即可,不需要存储在对象中,是静态的。

  • 2.静态函数。

函数是否用静态修饰,就参考一点,就是该函数功能是否有访问到对象中特有的数据。
简单来说,从源代码看,该功能是否需要访问非静态的成员变量,如果需要,该功能就是非静态的。如果不需要,就可以将该功能定义成静态的。当然,也可以定义成非静态,但是非静态需要被对象调用,而仅创建对象是没有意义的。

  • 3.单例设计模式:

static一个很重要的用途就是实现单例设计模式。单利模式的特点是该类只能有一个实例,为了实现这一功能,必须隐藏类的构造函数,即把构造函数声明为private,并提供一个创建对象的方法,由于构造对象被声明为private,外界无法直接创建这个类型的对象,只能通过该类提供的方法来获取类的对象,要达到这样的目的只能把创建对象的方法声明为static,程序实例如下:

class Singleton{
    private static Singleton instance=null;
    private Singleton(){}
    public static Singleton getInstance(){
        if(instance==null){
            instance=new Singleton();
        }
        return instance;
    }
}
  • 4.静态代码块
       随着类的调用或创建实例而执行,而且只执行一次。
    作用: 用于给类进行初始化。
 1 public class Test {//如果想让此类成为一个静态类而类中需要用到一些参数需要初始化就需要静态代码块
 2     private static  int age;
 3     private static String name;
 4     //省略get、set方法
 5     static{//当类第一次调用或创建实例时给属性初始化且只执行一次。
 6         age = 28;
 7         name = "杜文全";       
 8     }
 9     public static void displayNoen(){//调用此方法age为28name为杜文全(默认值)
10         System.out.println("年龄:"+age+"姓名:"+name);
11     }
12     public static void display(int age,String name){//调用此方法会覆盖掉默认值
13         Test.age = age;
14         Test.name = name;
15         System.out.println("年龄:"+Test.age+"姓名:"+Test.name);
16     }
17     public static void main(String[] args) {
18         Test.displayNoen();//结果为:年龄:28姓名:杜文全
19         Test.display(24, "张传龙");//结果为:年龄:24姓名:张传龙
20     }
21 }
  • 5.构造代码块(主函数)

作用:给所用对象进行初始化
主函数特殊之处:

  • 1.格式固定。
  • 2.被jvm所识别和调用。
    public static void main(String[] args){

}
public:因为权限必须是最大的。
static:jvm在调用时是不需要对象的,直接用主函数所属的类名调用即可。
void:主函数没有具体的返回值 。
main:函数名,不是关键字,只是一个jvm识别的固定名字。
String[] args:这是主函数的参数列表,是一个数组类型的参数,而且袁术都是字符串类型。

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

推荐阅读更多精彩内容

  • 一:java概述: 1,JDK:Java Development Kit,java的开发和运行环境,java的开发...
    慕容小伟阅读 1,796评论 0 10
  • 整理来自互联网 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具...
    Ncompass阅读 1,540评论 0 6
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,661评论 0 11
  • 今天再一次下定了追求精神独立经济独立的决心,看了《恰同学少年》之后我才明白,修身齐家治国平天下的前提是立志,回想自...
    楚泽清荷阅读 471评论 0 0
  • 已迁移至掘金社区pika主从复制原理之binlog 前言 binlog相关的文件包含两部分: manifest...
    cx3ptr阅读 3,425评论 1 4