java笔记
(文章是根据所学视频上记录的,并不是我个人所完全创出,还有不知道为啥这截屏上传的图片糊的离谱QAQ)
对day1的补充:
两个变量指向同一个数组
int[] arr1={1,2,3};
int[] arr2=arr1;//赋值地址
//两个存的地址一样,都指向同一个数组对象
1、Java内存分配
栈==:方法运行时所进入的内存(main方法),变量也是在这里
堆:new出来的东西(对象)会在这块内存中开辟空间并产生地址
方法区:字节码文件(class文件)加载时进入的内存
问题:
如果数组变量中没有存储数组的地址,而是null,在访问数组信息时会?
出现NullPointerException(空指针异常)
arr = null;//假设arr数组已经定义好
System.out.println(arr);//会显示null不会报异常
System.out.println(arr.length);//会报异常,对象都没清楚,就去调用他的成员
1.1方法
方法是一种语法结构,它可以把一段代码封装成一个功能,以便反复调用
提高了代码的复用性,让程序的逻辑更清晰
去掌握哪些内容?(当然下面不会全都有细写,听课做的笔记较糙)
如何定义方法、怎么去调用方法、方法的内存图、方法的参数传递机制、方法其他常见形式、技术
1.1.1定义
修饰符 返回值类型 方法名(形参列表){
代码
有返回值加return ……;
}
1.1.2方法常见问题
1、方法编写顺序无所谓
2、方法与方法之间是平级关系,不能嵌套定义(可以调用,不能嵌套定义!)
3、void无return。return后面不要加语句了(同一个{}内),它永远不会执行
4、方法不调用就不执行,调用要注意参数匹配
5、方法有返回值调用是要接收结果
1.1.3内存机制:(弹夹,上膛)
1、方法没被调用时,在方法区中的字节码文件中存放
2、方法被调用时,需要进入到栈内存中运行
1.1.4Java的参数传递机制
传递机制:值传递
基本类型的传递:
在传输实参给方法的形参时,并不是传递实参变量本身,而是传输实参变量中存储的值,这就是值传递
形参:以方法为例,就是方法定义时的变量
实参:在方法内部定义的变量
引用类型的传递
传输存储的地址值,地址不会变,但可以去改变其内容
1.1.5方法重载(overload)
同一个类中,出现多个方法名称相同,但形参列表不同,这就是方法的重载
增加可读性
方法重载的识别技巧:
1、上面的定义
2、形参列表的不同指的是形参的个数、类型、顺序不同,不关心其(参数)名称
return的单独使用:
return;//可以立即跳出并结束当前执行的方法
素数:2到其自己一半的数没有可以整除它
这样理解,循环找素数就可以加快了
这是对素数的另外一种认识,其实本质一样,本来的定义是:不能被除了1和本身以外的数整除的数叫素数。
2、面向对象编程(oop)
这里让我来解析什么较面向对象变成,显然不太可能(菜鸡啊我。。)
别人的解释:“面向就是找,对象就是某个东西,面向对象编程就是找东西来编程”(不必太纠结,往后学多了再去理解)
自己设计对象:先有类,再创建对象
对象在内存中的运行机制:
多个对象的内存图
第二个对象类似
两个变量指向同一个对象内存图:
Student s1 = new Student();
……
Student s2 = s1;
指向同一个对象,即拿到的地址相同
3、垃圾回收
当堆内存中的对象,没有被任何变量引用(指向)时,就会被判定为内存中的“垃圾”
Java存在自动垃圾回收器,会定期进行处理(这里不做详细介绍,知道有这么回事先)