- 数组的特点:
- 1)数组属于引用类型的变量。数组的元素,既可以是基本数据类型,也可以 是引用数据类型。
- 2)创建数组对象会在内存中开辟一整块连续的空间;
- 3)数组的长度一旦确定,就不能修改;
- 4)数组是有序排列的。
- 数组元素的默认初始化值
-
> 数组元素是整形:0
-
> 数组元素是浮点型:0.0
-
> 数组元素是char型:0或'\u0000',而非'0'
-
> 数组元素是boolean型:false
-
> 数组元素是引用数据类型:null
原文链接:https://blog.csdn.net/PorkBird/article/details/113694291)
链接: link.
类中属性的使用
*
- 属性(成员变量) vs 局部变量(成员变量包括类变量(static修饰)和实例变量(不用static修饰))
- 1.相同点:
-
1.1 定义变量的格式:数据类型 变量名 = 变量值
-
1.2 先声明,后使用
-
1.3 变量都有其对应的作用域
- 2.不同点:
-
2.1 在类中声明的位置不同
-
属性:直接定义在类的一对{}内
-
局部变量:声明在方法内、方法形参、构造器形参、构造器内部的变量
-
2.2 关于权限修饰符的不同
-
属性:可以在声明属性时,指明其权限,使用权限修饰符。
-
常用的权限修饰符:private、public、缺省、protected
-
目前声明属性时,都使用缺省即可。
-
局部变量:不可以使用权限修饰符。
-
2.3 默认初始化值的情况:
-
属性:类的属性,根据其类型,都有默认初始化值。
-
整型(byte、short、int、long):0
-
浮点型(float、double):0.0
-
字符型(char):0(或‘\u0000’)
-
布尔型(boolean):false
-
引用数据类型(类、数组、接口):null
-
局部变量:没有默认初始化值
-
意味着:在调用局部变量之前,一定要显式赋值。
-
特别地:形参在调用时,赋值即可。例,45 行
-
2.4 在内存中加载的位置,亦各不相同。
-
属性:加载到堆空间中(非 static)(static修饰的加载到方法区中)
-
局部变量:加载到栈空间
- 堆(Heap),此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。这一点在 Java 虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配。
- 通常所说的栈(Stack),是指虚拟机栈。虚拟机栈用于存储局部变量等。局部变量表存放了编译期可知长度的各种基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用(reference 类型,它不等同于对象本身,是对象在堆内存的首地址)。方法执行完,自动释放。
- 方法区(MethodArea),用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
2.从编译和运行的角度看:
- 重载,是指允许存在多个同名方法,而这些方法的参数不同。
- 编译器根据方法不同的参数表,对同名方法的名称做修饰。
- 对于编译器而言,这些同名方法就成了不同的方法。
- 它们的调用地址在编译期就绑定了。Java的重载是可以包括父类和子类的,
- 即子类可以重载父类的同名不同参数的方法。所以:对于重载而言,在方法调用之前,
- 编译器就已经确定了所要调用的方法,这称为“早绑定”或“静态绑定”;
- 而对于多态,只有等到方法调用的那一刻,解释运行器才会确定所要调用的具体方法,
- 这称为“晚绑定”或“动态绑定”。
- 引用一句Bruce Eckel的话:“不要犯傻,如果它不是晚绑定,它就不是多态。”
-
main():由于 Java 虚拟机需要调用类的 main()方法,所以该方法的访问权限必须是 public,又因为 Java 虚拟机在执行 main()方法时不必创建对象,所以该方法必须是 static 的,该方法接收一个 String 类型的数组参数,该数组中保存执行 Java 命令时传递给所运行的类的参数。又因为 main() 方法是静态的,我们不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员,
-
程序(program):为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。
-
进程(process):程序的一次执行过程,或是正在运行的一个程序。是一个动态的过程:有它自身的产生、存在和消亡的过程。——生命周期
如:运行中的QQ,运行中的MP3播放器程序是静态的,进程是动态的
进程作为资源分配的单位,系统在运行时会为每个进程分配不同的内存区域 -
线程(thread),进程可进一步细化为线程,是一个程序内部的一条执行路径。若一个进程同一时间并行执行多个线程,就是支持多线程的线程是调度和执行的单位,每个线程拥有独立的运行栈和程序计数器(pc),线程切换的开销小,一个进程中的多个线程共享相同的内存单元/内存地址空间—》它们从同一堆中分配对象,可以访问相同的变量和对象。这就使得线程间通信更简便、高效。但多个线程操作共享的系统资源可能就会带来安全的隐患。
-
并行:多个CPU同时执行多个任务。比如:多个人同时做不同的事。
-
并发:一个CPU(采用时间片)同时执行多个任务。比如:秒杀、多个人做同一件事。
-
Java中的线程分为两类:一种是守护线程,一种是用户线程
-
比较创建线程的两种方式。
-
开发中:优先选择:实现Runnable接口的方式
-
原因:1. 实现的方式没有类的单继承性的局限性
-
2. 实现的方式更适合来处理多个线程有共享数据的情况。
-
联系:public class Thread implements Runnable
-
相同点:两种方式都需要重写run(),将线程要执行的逻辑声明在run()中。