Java中的类和对象

Java 面向对象编程(一)类和对象

引言:Objected Oriented Programming——面向对象编程

1.什么是类,什么是对象

类:类似模板,规定了某一类事物共有的属性和行为,如生活中的人类,都有名字,年龄,走跑跳等行为,我们就可以将其包装成一个类,属性就是名字、年龄,行为或方法就有走跑跳等
对象:对象是类的实例,是由类创建出来的具体的事物,对象的属性值可以千差万别

2.类的定义

形式如下:

class 类名称 {
属性(也叫成员变量)
方法/行为(也叫成员方法)
(其他类/接口)
}
public class People {
//    属性
    String name;
    int age;
//    方法
    public static void eat(){
        System.out.println("吃饭");
    }
}

注意:

  • 源文件有且仅有一个public类,public类是主类
  • 源文件名必须与主类名相同
  • 类名的命名规格遵循大驼峰规则,即每个单词的首字母大写

3.static关键字

(1)访问修饰符".",从内存上来看就是引用数据类型访问堆空间,如 People p = new People();p.age = 10; 引用数据类型p保存的是地址,存储在栈空间中,而new出来的对象实际在堆空间上存储,static属性则保存在方法区中
Java中的类和对象_第1张图片
(2)static是静态的意思,与类直接相关

  • static + 属性——类属性,该类的所有对象均共享该属性,类中的常量用static final修饰
  • static + 方法——类方法,可直接由类名调用该方法,一些工具方法常被定义为static方法,如之前常用的Array.sout()方法,就是典型的直接用
  • static + 代码块——静态代码块,static {代码},当new对象时,该段代码块最优先被执行,但只执行一次,是在类加载时被执行,如果主方法中有静态代码块,则静态代码块优于主方法执行
  • static 类——静态内部类

(3)静态方法与普通成员方法的权限访问

  • 首先static家族是可以互相访问的
  • 静态方法不可以访问成员变量/方法
  • 成员方法可以访问静态变量/方法

(4)重新梳理一下不同的存储空间

  • 栈空间: 主要是存储局部变量(如形参、方法中定义的变量),以及存储地址的引用
  • 堆空间:使用 new 创建的对象都是在堆上保存
  • 方法区:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据. 方法编译出的的字节码就是保存在这个区域

4.代码块执行的先后顺序

(1)普通代码块:方法内再用{ 代码 }的代码块,不常见
(2)构造代码块:定义在类中,不加任何修饰符,{ 代码 },产生对象时必执行,执行顺序优于构造函数,且每产生一个对象就调用一次
(3)静态代码块,定义在类中,static { 代码块 },new对象时最优先被执行,即需要加载该类时被执行,但只加载执行一次,只要该类被加载过,就不用再加载
(4)同步代码块,多线程篇我们再分析
实战:试分析下述代码的输出顺序

class B1{
    public B1(){
        System.out.println("1");
    }
    {
        System.out.println("2");
    }
    static {
        System.out.println("3");
    }
}
public class D extends B1{
    public D(){
        System.out.println("4");
    }
    {
        System.out.println("5");
    }
    static {
        System.out.println("6");
    }

    public static void main(String[] args) {
        System.out.println("7");
        new D();
        new D();
        System.out.println("8");
    }
}

答案:
输出结果为:
3
6
7
2
1
5
4
2
1
5
4
8

答案解析:
Java中的类和对象_第2张图片

你可能感兴趣的:(Java学习,java,开发语言,后端)