一、对象的属性

把其他自定义类作为属性

Dog宠物狗

/*** 宠物狗*/
public class Dog {private String name; //名字//构造器public Dog() {}public Dog(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

Person人类

/*** 人类*  属性*      姓名*      拥有宠物狗**  行为*      领养狗*      给狗起名字*      介绍自己的宠物狗*/
public class Person {private String name; //姓名private Dog dog; //宠物/*** 领养狗* @param dog*/public void adoptDog(Dog dog){System.out.println(this.name+"领养了"+dog.getType()+"品种的狗");//把要领养的狗,设置到人类属性中this.dog=dog;}/*** 给宠物狗起名字*/public void giveName(){//健壮性处理if(this.dog==null){System.out.println("-->警告:勇敢的少年啊,快去领养一条宠物狗吧");return;}System.out.println("-->请输入宠物狗的新名字:");String dogName = new Scanner(System.in).next();//this.dog就代表当前这个人类的宠物狗属性this.dog.setName(dogName);}/*** 介绍自己的宠物狗*/public void say(){System.out.print("我叫"+name+",我有一条"+this.dog.getType());System.out.println("品种的宠物狗,名字叫"+this.dog.getName());}//构造器public Person() {}public Person(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Dog getDog() {return dog;}public void setDog(Dog dog) {this.dog = dog;}
}

测试使用

/*** 测试人类领养宠物狗*/
public class Test {public static void main(String[] args) {//创建几个宠物狗(new运算符调用Dog类构造器来创建对象)Dog d1 = new Dog("中华田园犬");Dog d2 = new Dog("哈士奇");Dog d3 = new Dog("萨摩耶");Dog d4 = new Dog("边境牧羊犬");Dog d5 = new Dog("藏獒");//创建人类Person p1 = new Person("张三");Person p2 = new Person("李四");//领养狗p1.adoptDog(d2);p1.giveName();p1.say();p2.adoptDog(d3);p2.giveName();p2.say();}
}

二、局部变量和全局变量

1、局部变量:

在方法内的,如参数,方法体内声明的变量

生命周期,只要当前所在位置代码执行结束,就会销毁

public void setName(String name) {//参数name是局部变量this.name = name;//name=name; //属性是全局变量,会和同名的局部变量冲突?变成局部变量//如何引用被隐藏的全局变量,使用this
}

this就代指当前对象(方法的调用者)

2、全局变量:

直接在类中,属于类的属性,可以在本类的所有实例方法中访问(非static修饰的)

public static void testAccess(){//System.out.println(name);//全局实例变量变量不能静态方法中被访问//System.out.println(this.name);
}

生命周期,全局变量属于属性,只要对象在,就一直在,等到堆内存的对象被销毁才会销毁

三、值传递和引用传递

值(基本数据类型)在栈内存中

引用(对象)在堆内存中

/**![请添加图片描述](https://img-blog.csdnimg.cn/4b36f65dd82f441a8db0c156f7b9a09b.png)* 值传递和引用传递的区别*  值传递(值是基本数据类型)*  引用传递(引用是对象)*/
public class ParamTest {/*** 值传递(传到方法中的数值已经和原数据没有任何的联系)* @param n*/public static void test1(int n){n=2;//方法中改变了n保存的值,猜测和外部的变量n是否有联系?System.out.println("方法中n = " + n);}/*** 引用传递(传到方法中的对象和原对象仍然有联系!!!)* @param arr*/public static void test2(int[]arr){arr[0]=100;//改变数组对象0下标的元素System.out.println("方法中arr = " + Arrays.toString(arr));}public static void main(String[] args) {//值传递测试int n = 1;test1(n);System.out.println("外部n = " + n);//引用传递测试int[]arr={1,2};test2(arr);System.out.println("外部arr = " + Arrays.toString(arr));}
}

问题:当我们传参的时候,传出去的数据是否还和原本的变量有关系?

//把对象在堆内存的首地址(位置)保存给不同的变量
int[]brr = {100};int[]crr = brr;
int[]drr = brr;
//请问:brr、crr、drr,一共几个数组?
// 1个(三个变量保存的是同一个对象的地址,表示的是同一个数组对象)crr[0] = 200;//改变crr变量保存的数组对象的元素,另外两个变量也跟着改变
System.out.println("brr[0] = " + brr[0]);//200
System.out.println("crr[0] = " + crr[0]);//200
System.out.println("drr[0] = " + drr[0]);//200

四、方法重载

在同一个类中,方法名相同,参数不同,可以定义多个同名的方法

根据不同的参数,可以调用不同的方法

  • 参数的个数不同
  • 参数的类型不同
  • 参数的个数相同,类型不同

测试使用重载的方法

/*** 测试使用方法的重载*/
public class Test {public static void sum(int a,int b){System.out.println(a+"+"+b+"="+(a+b));}public static void sum(double a,double b){System.out.println(a+"+"+b+"="+(a+b));}public static void main(String[] args) {Test.sum(1,2);Test.sum(1.1,2.2);}
}

五、static

类中的属性和方法,称为类的成员

成员分为:实例成员和类成员

1、实例成员

实例成员属于对象,只有对象才能引用和访问

2、类成员

类成员不属于任何对象,所有对象都可以共享和访问,可以直接通过类名和对象名引用和访问

类方法中不能直接访问实例成员

​ 因为实例成员必须由对象引用

​ 而类方法由于也可以被类名直接引用,所以本身是没有对象的,所以无法访问实例成员

3、static静态代码块

用于类加载后的静态属性的初始化

学生类花班费和花自己钱案例

学生类

/*** 学生类*/
public class Student {private String name;private double money; //自己的钱private static double clazzMoney; //班费 (类成员)//static静态代码快static{clazzMoney=10000;//初始化班费(类变量)}/*** 花自己钱的方法*/public void flowerMoney(double money){System.out.println(this.name+"原有钱"+this.money);this.money-=money;System.out.println("花了"+money+"元,还剩"+this.money);}/*** 花班费的方法*/public void flowerClazzMoney(double money){System.out.println("班费原有钱"+clazzMoney);clazzMoney-=money;System.out.println("花了"+money+"元,班费还剩"+clazzMoney);}//构造器public Student() {}public Student(String name, double money) {this.name = name;this.money = money;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getMoney() {return money;}public void setMoney(double money) {this.money = money;}public static double getClazzMoney() {return clazzMoney;}public static void setClazzMoney(double clazzMoney) {Student.clazzMoney = clazzMoney;}
}

测试类

/*** 测试花钱*/
public class Test {public static void main(String[] args) {//创建两个学生对象Student s1 = new Student("小王", 1000000);Student s2 = new Student("小明", 500);//花自己的钱测试(每个人自己的钱和别人的没关系,每个对象都有自己的实例属性)s1.flowerMoney(5000);s2.flowerMoney(10);//花班费测试(班费是共享的,大家访问的都是同一个)s1.flowerClazzMoney(5000);//挪用班费买手机s2.flowerClazzMoney(20);//挪用班费买个手机壳}
}

运行结果

小王原有钱1000000.0
花了5000.0元,还剩995000.0
小明原有钱500.0
花了10.0元,还剩490.0
班费原有钱10000.0
花了5000.0元,班费还剩5000.0
班费原有钱5000.0
花了20.0元,班费还剩4980.0

的钱测试(每个人自己的钱和别人的没关系,每个对象都有自己的实例属性)
s1.flowerMoney(5000);
s2.flowerMoney(10);

    //花班费测试(班费是共享的,大家访问的都是同一个)s1.flowerClazzMoney(5000);//挪用班费买手机s2.flowerClazzMoney(20);//挪用班费买个手机壳}

}


运行结果

小王原有钱1000000.0
花了5000.0元,还剩995000.0
小明原有钱500.0
花了10.0元,还剩490.0
班费原有钱10000.0
花了5000.0元,班费还剩5000.0
班费原有钱5000.0
花了20.0元,班费还剩4980.0

课堂笔记2022.7.11相关推荐

  1. java学习笔记 2022.2.11

    2022.2.11 on java 8 摘录(反射) 加载.这是由类加载器执行的.该步骤会先找到字节码(通常在类路径中的磁盘上,但也不一定),然后从这些字节码中创建一个Class对象. 链接.链接阶段 ...

  2. java学习笔记2022.1.11

    因为我提前的傻逼行为,导致1.11的笔记基本全没了,没保存的泪流满面,然后缺失的是方法内部类还有匿名内部类,有时间的话会补完,没时间就算了 首先谈方法内部类 public class D {publi ...

  3. java学习笔记2022.2.11

    on java 8 摘录(反射) 面向对象编程的一个基本目标就是,让编写的代码只操纵基类(本例中为Shape)的引用 Shape接口中的方法draw()是可以动态绑定的,因此客户程序员可以通过泛化的S ...

  4. 算法学习笔记2022.1.11

    1. 插入算法的核心代码 public static void sort(Comparable[] a) {int n = a.length;for (int i = 1; i < n; i++ ...

  5. 数字信号处理翻转课堂笔记11

    数字信号处理翻转课堂笔记11 The Flipped Classroom11 of DSP 对应教材:<数字信号处理(第五版)>西安电子科技大学出版社,丁玉美.高西全著 一.要点 1.数字 ...

  6. AI公开课:19.05.15施尧耘-达摩院量子实验室主任《量子计算:前景与挑战》课堂笔记以及个人感悟

    AI公开课:19.05.15施尧耘-达摩院量子实验室主任<量子计算:前景与挑战>课堂笔记以及个人感悟 导读         施尧耘1997年本科毕业于北京大学,后在普林斯顿大学取得计算机科 ...

  7. AI公开课:19.04.18俞益洲—深睿医疗CS《计算机视觉的应用与落地》课堂笔记以及个人感悟

    AI公开课:19.04.18俞益洲-深睿医疗CS<计算机视觉的应用与落地>课堂笔记以及个人感悟 导读       俞益洲,现为深睿医疗联合创始人.首席科学家(Chief Scientist ...

  8. AI公开课:18.05.05 施尧耘(阿里云量子技术CS)—清华AI第四讲之《人工智能与量子计算》Quantum课堂笔记——带你了解量子计算

    AI公开课:18.05.05 施尧耘(阿里云量子技术CS)-清华AI第四讲之<人工智能与量子计算>Quantum课堂笔记--带你了解量子计算 导读 清华大学"人工智能前沿与产业趋 ...

  9. Python-循环控制--个人课堂笔记

    Python中的两种循环方式(目前学到):for循环和while循环 for循环和while循环的区别: for循环一般用于控制循环的次数,while循环则是条件循环. 操作实例-猜数字小游戏(3次猜 ...

最新文章

  1. 溢价 5 倍欲将 SiFive 收入麾下,英特尔的绝地反击战
  2. zend studio配置调试(Xdebug方式)
  3. MFC对话框退出程序所调用的函数
  4. win10安装docker
  5. InterlliJ Debug启动:method breakpoints may dramatically show down debugging
  6. mysql添加表字段_mysql命令添加表字段
  7. 跟几个程序员聊了聊他们的每月薪资收入
  8. net start mysql 服务名无效_记一次服务器被植入挖矿木马cpu飙升200%解决过程
  9. 织梦缩略图自动补齐绝对路径_织梦生成文章内容缩略图时自动加上域名绝对路径...
  10. Netty核心组件 ChannelPipeline和ChannelHandler与ChannelHandler的入站出站规则
  11. ASP.NET本质论阅读----应用程序对象
  12. dxComponentPrinter记录
  13. C#基于websocket-sharp实现简易httpserver(封装)
  14. [转载] 基于约束放松的自适应Web服务选取方法的研究
  15. MATLAB实现一个简单的车牌识别小程序
  16. STM32f407 DCMI方式驱动 OV2640
  17. 从DT时代云栖大会聊聊恒生电子
  18. 佛罗里达大学计算机博士,2020年佛罗里达大学博士含金量
  19. Java十进制转换为二进制
  20. Noi 十连测 Zbox loves meizi

热门文章

  1. 【整理】什么是SDK(软件开发工具包)
  2. 用《只狼》教你学会Git(上)
  3. 你想要的宏基因组-微生物组知识全在这(2023.7)
  4. AI遇资本市场寒流,前期大规模涌入到如今的九成企业亏损
  5. 电大计算机网考ppt,2017最新电大计算机应用基础形考PowerPoint2010答案.doc
  6. 常用html/css/js总结
  7. excel图表中的直方图_如何在Microsoft Excel中创建直方图
  8. 如何评测语音技能的智能程度(3)——交互流畅
  9. 中国信号中继器市场趋势报告、技术动态创新及市场预测
  10. Python Flask Web框架教程 1 Hellow, World!