JAVA基础初探(三)面向对象思想、类与对象、成员变量与局部变量、构造方法、static关键字详解

该篇博客目录

1、了解JAVA面向对象思想
2、JAVA的类与对象
3、成员变量和局部变量
4、构造方法
5、static关键字详解

一、了解JAVA面向对象思想

个人粗浅的理解面向对象是:面向对象有封装、继承、多态这些特性,再加上设计模式,使得软件开发变成了类的扩展开发,在修改和调整上更加容易


二、JAVA的类与对象

类:
  • 确定对象将会拥有的特征(属性)和行为(方法)
  • 在JAVA语言中最基本的单位是类,所以要用类来体现食物
对象
  • 该类事物的具体体现
类与对象的区别

学生—类

体育委员—对象

类的特点
  • 类是对象的类型
  • 具有相同属性和方法的一组对象的集合
定义一个类的步骤
  • 定义类名
  • 编写类属性
  • 编写类的方法

    public class 类名{
        属性1
        属性2
        ...
        方法1
        方法2
        ...
    }
    
创建对象

类名 对象名=new 类名();

对象名.属性

对象名.方法();


三、成员变量和局部变量

1、成员变量

在类中定义(方法外),用来描述对象将要有什么

2、局部变量

在类的方法中定义,在方法中临时保存数据

3、成员变量与局部变量区别
a、作用域不同
  • 局部变量的作用域仅限于定义它的方法
  • 成员变量的作用域在整个类内部都是可见的
b、初始值不同
  • 局部变量没有默认的初始值,必须先定义,赋值
  • 成员变量有默认的初始值(0)
c、优先级
  • 两类变量同名时,局部变量具有更高的优先级
d、在内存中的位置
  • 局部变量在栈内存
  • 成员变量在堆内存
e、生命周期不同
  • 局部变量随着方法的调用而存在,随着方法的调用完毕而消失
  • 成员变量随着对象的存在而存在,随着对象的消失而消失

四、构造方法

1、定义在JAVA类中的一个用来初始化对象的方法
2、使用new+构造方法 创建一个对象
3、构造方法与类同名,且没有返回值
4、格式
    public 类名(可以指定参数,也可以不指定参数)
    {
        初始化代码;
    }

这里写图片描述

Tip
  • 如果不写构造方法,系统会自动提供无参构造方法
  • 如果提供了构造方法,系统将不再提供
  • 构造方法可重载

五、static关键字详解

1、static——静态成员

JAVA中被static修饰的成员称为静态成员或类成员。静态成员可以使用类名直接访问,也可以使用对象名访问。鉴于它的特殊性,推荐使用类名直接访问

package hhh;

public class test {
    static String a="hello_world";
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //静态变量直接通过类名访问
        System.out.println(test.a);

        //通过对象名访问
        test obj=new test();
        System.out.println(obj.a);
    }

}
Tip

静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收

2、static——静态方法
package hhh;

public class test {
    public static void print()
    {
        System.out.println("静态方法");
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //直接使用类名调用静态方法
        test.print();

        //使用对象名调用
        test obj=new test();
        obj.print();
    }

}
Tip
  • 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员(需要通过创建类的对象,然后通过对象来访问非静态成员)
  • 在普通成员方法中,可以直接访问同类的非静态成员和静态成员
  • 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法
两个角度解析以上原因
1、从类与对象的角度分析

因为类是抽象的,要完成它定义的功能,必须有它的实例来完成。同理静态的方法相当于自己本身就是个对象,它无需实例化就能调用它。而非静态方法则不能直接调用,需要实例化它的实例

2、从内存角度分析

静态方法在编译时会为其和其变量分配内存空间,如果引用了一个非静态变量,那么在非静态变量结束后,这个变量就会消失,那么为它分配的内存块就成了无用内存块,但却无法回收,导致内存泄漏。

//静态方法中引用静态成员和非静态成员的方法
package hhh;

public class test {
    static int a1=80;
    int a2=99;
    public static int sum()
    {
        test p=new test();
        int num=a1+p.a2;
        return num;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int all=test.sum();
        System.out.println(all);

    }

}
3、初始化块、静态初始化块、构造方法(三种初始化方式)

这里直接写个DEMO

package hhh;

public class test {
    int a;
    int b;
    static int c;

    public test() {//构造方法
        a=1;
        System.out.println("通过构造方法为a初始化");
    }

    //初始化块
    {
        b=3;
        System.out.println("通过初始化块为b初始化");
    }

    //静态初始化块
    static{
        c=8;
        System.out.println("通过静态初始化块为c初始化");
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        test obj=new test();
        System.out.println("a:"+obj.a);
        System.out.println("b:"+obj.b);
        System.out.println("c:"+test.c);
        test obj2=new test();   
    }
}


//输出:
通过静态初始化块为c初始化
通过初始化块为b初始化
通过构造方法为a初始化
a:1
b:3
c:8
通过初始化块为b初始化
通过构造方法为a初始化
以上输出结果可以看出一下几点
  • 初始化块、静态初始化块、构造方法(三种初始化方式)都是在创建对象的时候调用的
  • 执行顺序:1、静态初始化块 2、普通初始化块 3、构造方法
  • 第二次加载类时没有静态初始化块了,说明:静态初始化块只在类加载时只执行一次,所以当再次创建对象obj2时并未执行静态初始化块
  • 还有一点注意就是:静态初始化块只能给静态变量赋值,不能赋值普通的成员变量
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值