面向对象(Object Oriented)java
栈的特色
一、栈描述的是方法执行的内存模型。每一个方法被调用都会建立一个栈帧(操做数,局部变量,方法出口等)
二、JVM为每一个线程建立一个栈,用于存放该线程执行方法的信息(实际参数,局部变量等)
三、栈属于线程私有的,不能实现线程间的共享。
四、栈的存储特性:先进后出(弹夹)
五、栈由系统自动分配一个连续的内存空间,速度快!数组
堆的特色
一、堆用于存储建立好的对象和数组(数组也是对象)
二、JVM只有一个堆,被全部线程共享
三、堆是一个不连续的内存空间,分配灵活,速度慢!
四、堆的存储特性:先进先出dom
方法区(又叫静态区)
一、JVM只有一个方法区,被全部线程共享。
二、方法区实际上也是堆,只是用于存储类、常量相关的信息。
三、用来存放程序中永远不变的内容(类的信息,静态变量,字符串常量)
jvm
1 package com.boom0827; 2 3 /** 4 * 练习: 定义一个学生类:描述学生,属性,年龄,age,分数score,名字 String name,性别 String gender 5 * 而后定义默认无参的构造方法,并对全部的属性 进行初始化 而后定义带参数的构造方法,四个参数,对全部的属性经过参数赋值。 而后定义 一个成员方法 show 6 * 展现学生的属性的。 定义测试类,生成两个学生对象,一个调用默认无参的构造方法,一个调用 带参数的构造方法 而后分别调用 show 方法。 7 * 8 * @author Administrator 9 * 10 */ 11 12 public class Test02 { 13 14 public static void main(String[] args) { 15 Student student = new Student(); 16 System.out.println("------无参的构造方法------"); 17 student.show(); 18 System.out.println("------有参的构造方法------"); 19 Student student2 = new Student("小红", "女", 18, 60); 20 student2.show(); 21 } 22 23 } 24 25 // 建立一个学生类 26 class Student { 27 String name; 28 String gender; 29 int age; 30 int score; 31 32 // 学生类的无参构造方法 初始化成员变量 33 public Student() { 34 name = "小明"; 35 gender = "男"; 36 age = 18; 37 score = 60; 38 } 39 40 // 定义有参的构造方法 41 public Student(String setNname, String setGender, int setAge, int setScore) { 42 name = setNname; 43 gender = setGender; 44 age = setAge; 45 score = setScore; 46 } 47 48 void show() { 49 System.out.println("姓名:" + name + "\n性别:" + gender + "\n年龄:" + age + "\n分数:" + score); 50 } 51 }
对象数组ide
1 /** 2 * 对象数组随机赋值初始化 3 * 4 * @author Administrator 5 * 6 */ 7 public class Test03 { 8 public static void main(String[] args) { 9 // 建立5个学生 10 Student[] students = new Student[5]; 11 12 // 打印,空数据的信息 13 for (Student student : students) { 14 System.out.println(student);// null 15 } 16 17 // 初始化随机数组分配姓名 18 String[] names = { "小红", "小黑", "小青", "小紫", "小绿", "小橙", "小蓝", "小黄", "小刚" }; 19 // 对五个学生逐一进行初始化 20 for (int i = 0; i < students.length; i++) { 21 // 随机初始化姓名 22 int index = getRandomNumber(0, names.length); 23 String name = names[index]; 24 // 随机初始化性别 25 String sex = getRandomNumber(0, 2) == 0 ? "男" : "女"; 26 // 随机年龄 27 int age = getRandomNumber(18, 25); 28 // 随机分数 29 int score = getRandomNumber(60, 101); 30 31 // 赋值 32 students[i] = new Student(name, sex, age, score); 33 students[i].show(); 34 } 35 36 } 37 38 // 获取随机数 39 public static int getRandomNumber(int min, int max) { 40 return (int) (Math.random() * (max - min) + min); 41 } 42 } 43 44 class Student { 45 String name; 46 String sex; 47 int age; 48 int score; 49 50 // 建立构造方法初始化属性值 51 public Student(String name, String sex, int age, int score) { 52 this.name = name; 53 this.sex = sex; 54 this.age = age; 55 this.score = score; 56 } 57 58 // 显示学生的基本信息 59 void show() { 60 System.out.println("姓名 = " + name + "\t年龄 = " + age + "\t性别 = " + sex + "\t成绩:" + score); 61 } 62 }
this关键字
this关键字:当成员和局部变量重名,this关键字区分;
this表明对象(当前对象),表明当前对象的一个引用
this关键字必须放在第一行(Java虚拟机先初始化值)
this不能用和static关键字共存函数
static关键字
static特色:
1, static是一个修饰符,用于修饰成员变量和成员方法;不能修饰局部变量
2, static修饰的成员被全部的对象所共享;
3, static优先于对象存在,static的成员随着类的加载就已存在;
4, static修饰的成员可直接被类名所调用【类名.静态成员】;
5, static修饰的数据是共享数据,对象中存储的是特有数据;测试
成员变量跟静态变量的区别:
1,生命周期不一样
成员变量随着对象建立而存在,随着对象的回收而释放;
静态变量随着类的加载而存在,随着类的消失而释放。(虚拟机消失)
2,调用方式不一样
成员变量只能被对象调用;
静态变量能够被对象调用,也可被直接被类名调用。
3,别名不一样
成员变量也称实例变量;
静态变量也称类变量
4,数据的存储位置不一样
成员变量数据存储在堆内存的对象中,也叫对象的特有数据;
静态变量数据存储在方法区(静态区),也叫对象的共享数据。
Static使用注意事项:
1, 静态方法只能访问静态成员;
2, 静态方法中不可使用this或者super关键字(this和super是赖于某个对象的);
3, 主函数是静态的 (由jvm 负责调用执行。不须要建立所在类的对象就能够直接运行)this
静态代码块
特色:在类加载的时候,执行,而且仅执行一次。对类的静态成员变量初始化,并执行静态代码块。
做用:若是某些代码但愿仅执行一次,能够在这里面进行,还有对静态成员变量初始化。
编码