常用类

静态 一、JAVA的内存分析 内存概述 java的内存存储总共分为5大区域:堆、栈、方法区、本地方法区、寄存器区 其中本地方法区(存第三方语言-C/C++)和寄存器区(多线程资源)不用区分析,没法跟踪这两个区域 重点分析:堆,栈,方法区 堆:存new对象,成员属性,常量池(放字符串常量,之前方法区,现在放堆区-性能考虑,但沿用了方法区特点) 栈:存局部变量 方法区:class资源,static资源; 特点:优先于对象的加载,且相同资源只维护一份 接下来,使用简单的面向对象案例,说明内存的执行过程 案例分析 //案例:小明在打游戏 //分析:类-Person,对象:new 属性-姓名,方法:打游戏 //内存分析流程: //1.加载Test1.class与Person.class---方法区 //2.new对象开辟空间-------堆区 //3.将地址赋值给引用变量person-------栈区 class Person{ String name; public void play() { System.out.println(name+"正在打游戏"); } } public class Test1 { public static void main(String[] args) { Person person = new Person(); person.name = "小明"; person.play(); } } 二、静态-修饰属性 静态属性与成员属性 //案例:女朋友帮忙洗衣服 //成员变量结论:实例化多个对象,每个对象都有独立的成员属性 //静态变量结论:实例化多个对象,共享同一份静态变量 //成员变量 VS 静态变量 //1.存储位置 静态变量-方法区 成员变量-堆 //2.所属资源 静态变量-类 成员变量-对象 //3.执行顺序 静态变量优先于成员变量进行加载;在类加载时,就已经加载了静态资源 //4.调用方式 静态变量-推荐用类调 成员变量-对象调 class Girl{ //String name; //成员变量 static String name; //静态变量 public void wash() { System....

Aug 2, 2023 · 4 min · 橘子树谅

常用类

多态 一、多态 面向对象三大特性: 封装,继承,多态 多态前提:必须要有继承或接口(后面学),今天学习继承下面的多态 程序中的多态:将子类对象当成父类看待,这就是多态;换句话说,父类引用指向子类对象,即形成多态 例如:Animal an = new Dog(); //多态核心 多态应用:父类引用指向子类对象,即可调用父类的方法,不能调用子类独有的方法 应用案例 class Animal{ public void eat() { System.out.println("动物正在吃..."); } } class Dog extends Animal{ public void bark() { System.out.println("旺财正在汪汪汪..."); } } public class Test1 { public static void main(String[] args) { Animal animal = new Dog(); //多态核心 animal.eat(); //父类引用可调用父类方法 //当成父类看待,则调不了子类方法 //animal.bark(); //父类引用不能调子类独有方法 } } 二、多态中的重写 直接引用多态 //直接引用多态的方式调用重写方法: //案例:将猫当成宠物看待,可调用宠物的吃的方法;如果猫有不同吃的行为,则优先调用 class Pet{ public void eat() { System.out.println("宠物正在吃东西..."); } } class Cat extends Pet{ @Override public void eat() { System....

Aug 1, 2023 · 4 min · 橘子树谅

封装与继承

封装继承 一、封装性 描述:封装之前学习过方法,方法就是一种封装,在面向对象的封装性中,本质上也是讲方法的封装 封装性:在面向对象中,不要直接调属性,而是通过set/get方法进行封装 好处:结构更清晰,复用性更强,安全性更强 封装步骤: 1.编写set/get方法,注意规范写法,set用于赋值,get用于取值 2.属性私有化 //面向对象案例:张勇在吃饭 //分析:类-Student; 对象-张勇 属性-姓名,年龄 方法-吃 //问题:年龄为负数--- 会出现,程序没问题,数据不合理的情况 class Student{ private String name; private int age; //属性私有化,外界不能调用,只能在当前类中使用 public Student() {} public Student(String name,int age) { this.name = name; this.setAge(age); //this调方法 } public void eat() { //功能性的封装 System.out.println(age+"岁的"+name+"正在吃饭~~"); } //按照项目中完整实体封装的写法,有多少属性,就有多少set/get public void setName(String name) { this.name = name; } public String getName() { return name; } //set方法规范:方法名为set+属性名首字母大写,参数名和属性名一致 public void setAge(int age) { //数据(属性)的封装 //注意:此处为了说明安全性,才加的判断;后续没有特殊说明,则直接赋值即可 if(age<=0) { //如果参数有问题,则属性为默认18岁 this....

Jul 31, 2023 · 4 min · 橘子树谅

常用类

面向对象 一、面向对象设计 面向对象与面向过程 面向过程思想 生活的角度理解: 只关注完成某件事,不关注是谁完成的 程序的角度理解:从main出发,一步一步执行某个功能,没有对象的调用 面向对象思想 生活的角度理解:关注某个对象去完成某件事 程序的角度理解:从main出发,找到对象再完成功能 //面向过程思想案例:白白的皮肤,修长的腿 String color = "白色"; double height = 1.5; //面向对象思想案例:佩奇,皮肤白,腿很长 Pig peiQi = new Pig(); //先有对象 peiQi.color = "白色"; peiQi.height = 1.5; 类和对象 什么是对象:在java的世界里,一切皆为对象; 也就是任何可以进行描述的某个具体的东西都可以成为对象; 例如:杯子,电脑,鼠标… 杯子可以组成集合:你的杯子,他的杯子…;电脑也是一样,这个集合我们叫做类 对象:一类事物中的具体化的个体(实例) 例如:我的杯子,我的电脑 类: 一类事物的抽象化描述 例如:杯子类, 电脑类 每个对象都可以进行描述,都拥有自身的特征和行为 例如:我的电脑 特征:颜色,尺寸,价格,品牌….————名词,程序中叫属性 行为:运行,充电….. ————动词,程序中叫方法 共性抽取:特征和行为都是对象的,但所有同类对象都应该具有相同的特征和行为;所以,在设计上,我们将特征和行为抽取到类中 面向对象编程设计:创建一个类,类中有属性和方法,实例化对象,通过对象调属性和方法 二、应用案例 实例化单个对象 class Dog{ //创建一个类 //类中有属性 String name; //----成员属性 int age; public void eat() { //类中有方法--成员方法 System.out.println(name+"正在吃"); } } public class Test1 { public static void main(String[] args) { //实例化单个对象的案例:旺财今年2岁;会吃饭 //分析:类:Dog类 对象:旺财 属性:color,age 方法:eat //实例化对象 Dog wc = new Dog(); //类名 对象=new 类名(); wc....

Jul 30, 2023 · 4 min · 橘子树谅

排序与二维数组

排序与二维数组 一、排序 排序基础 //排序基础:交换两个变量的值 int a = 1; int b = 2; int t = a; //t=1 a = b; //a=2 b = t; //b=1 System.out.println("a="+a+";b="+b); 冒泡排序 //冒泡排序:相邻元素两两比较;大的放右边,比较完一轮则确定最右边的数最大; //以此类推,共比较(长度-1)轮 //分析:1.画图分析排序规则 2.编写代码分析规律 int[] a = {8,7,6,5,4,3,2,1}; for(int i=0;i<a.length-1;i++) { //外层确定轮(行)数 for(int j=0;j<a.length-1-i;j++) { //内层确定每轮比较的次数(冒泡-次数递减) if(a[j]>a[j+1]) { //相邻两数的比较 int t = a[j]; a[j] = a[j+1]; a[j+1] = t; } } System.out.println("第"+(i+1)+"轮:"+Arrays.toString(a)); } 选择排序 //选择排序:假设第一个为最小,依次与后面元素比较; //小的放左边;比较完一轮,最左边的为最小;依次类推,共比较(长度-1)轮 int[] a = {3,1,5,2}; for(int i=0;i<a.length-1;i++) {//外层比较轮数 for(int j=i+1;j<a....

Jul 29, 2023 · 3 min · 橘子树谅

数组

数组 一、数组概述 引言 未使用数组前,如下案例如何做? //案例: 请存储30个同学的成绩 //分析:使用变量来定义 int score1 = 61; int score2 = 88; //... //定义30个变量来存储成绩的数据 //弊端:冗余代码特别多,可读性也很差 //案例升级:30个同学成绩,每个同学都+10分 //弊端:30个同学都要进行+10分的操作,扩展性很差,不方法管理和维护 数组概述 一组连续的内存空间,用于存储相同数据类型的元素 特点:类型相同,长度固定 //案例:给定一个3个长度的整型数组,用于存整数值 //定义一个存3个整数值的空间 int[] a = new int[3]; //数据类型[] 数组名 = new 数据类型[长度]; //通过下标存和取数组的元素值 下标范围:0~长度-1 a[0] = 66; //赋值 a[1] = 88; a[2] = 99; //a[3] = 57; //ArrayIndexOutOfBoundsException下标越界 /* System.out.println(a[0]); //取值 System.out.println(a[1]); System.out.println(a[2]); */ System.out.println("求数组长度:"+a.length); //数组遍历: for(int i=0;i<a.length;i++) { System.out.println(a[i]); } //案例升级:数组元素都+10 for(int i=0;i<a.length;i++) { a[i]+=10; //每个元素+10---方便管理 System....

Jul 28, 2023 · 3 min · 橘子树谅