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属性则保存在方法区中 (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
答案解析:
|