目录
1. 探讨:内存中调用情况。编辑
2. 类是对象的抽象。对象是类的实例。
3. 局部变量和成员变量
4. 封装的定义
5.包(packet)
6.复习
7.方法重载
8.构造函数
9.练习题
10.this关键字
1. 探讨:内存中调用情况。
三部分:栈、堆、方法区。
方法区:保存类的信息(叫什么名字,属性,方法,接口,父类)
第一步:加载类的信息,字节码文件worker.class虚拟机加载类信息到方法里。加载类的信息,从字节码文件中读取。worker w1=new worker();
第二步:在栈中分配首地址内存空间,worker w1。
第三步:在堆中分配worker内存空间,各属性赋默认值。
第四步:把首地址给了栈中的地址。
调方法:第一次使用类有类加载操作,加载到方法区中。
w1.info()中在方法区中先找,到对应对象属性中找。
2. 类是对象的抽象。对象是类的实例。
3. 局部变量和成员变量
局部变量:方法内的。成员变量:方法外的,也就是我们的属性。
生命周期:方法内。成员变量为对象里。
4. 封装的定义
只需知遥控器可打开电视,无需知内部实现细节。
作用:
-----让使用者只能通过事先定好的方法访问数据,方便加入逻辑控制。(如音量只可1-100)
-----便于修改增强代码可维护性,不影响使用。
-----隐藏实现细节。
做法:
-----把相关的属性和方法放在一个类中。
-----把功能复杂的实现封装在一个方法中。
5.包(packet)
作用:
把杂乱的东西放同一包中,方便管理类。
可允许不同包里同名类。如music和video里都有播放类。但是属于不同类。
但一个包里不能新建重名类,源文件已存在。
关键词:packet
映射到磁盘上就是文件夹。
如果使用其他包下的类。 import haha.worker //导入haha包下的worker
引入JDK给你的类
import java.util.Scanner;
Scanner sc=new Scanner(System.in)
java.lang包下的所有类会自动引入,无需手动引入。
如:String s1="lalala";
System.out.println("lalala");
使用俩个包下同名的类。
import haha.worker;
import lala.worker; 会报错
使用全类名无需导入包。
方法:使用全类名 :包名+类名。
无法导入默认包下的worker。所有类都需放在某个包下。
要么就在默认包下在建一个类Test才可以访问。
6.复习
import java.utill.Scanner; //导入java.utill中的Scanner类。
7.方法重载
定义:同一类中,方法名相同,参数列表不同,和返回值无关。
目的:在同一类中,放多个重名方法。
变化:参数个数不同,参数个数相同但类型不同,参数个数相同但顺序不同。
如System.out.println也是重载,简化了用户记忆。
public void m1(){}与public int m2(){} 只有返回值相同,java认为是同一个方法。
8.构造函数
- 特殊:给对象进行属性初始化操作。
- 方法名必须和类名相同,不写void不写返回值。
写成public void cat(){}就是cat类的普通方法。不是构造方法。
- 什么时候调用? Cat c1=new cat();时候自动调用,不可手动调用,c1.cat();
每次创建对象时候都会调用构造函数。
- 注意:
如果类中没写任何构造函数,系统自动提供无参的构造函数。
如果类中有任何构造函数,则系统不会提供。想要无参的得自己写
构造函数也是方法,所以他也可被重载。一个类中可有多个构造函数,根据传递参数决定。
9.练习题
代码块:
package practice;
class Student{
public String name;
public int age;
public String classname;
public void printname(){
System.out.println(name);
}
public void printage(){
System.out.println(age);
}
public void printclassname(){
System.out.println(classname);
}
public void updatename(String n){
name=n;
}
}
public class test01 {
public static void main(String[] args) {
Student s1=new Student();
s1.name="张三";
s1.age=22;
s1.classname="1901班";
s1.printname();
s1.printage();
s1.printclassname();
s1.updatename("张三四");
s1.printname();
}
}
- public类的名字需与源文件的名字相同。
- Alt+Enter 可查看红线报错类型。
- Alt+Insert自动生成构造函数。
练习题:
package practice;
class Stu{
public String sno;
public String name;
public String sex;
public School s;
public Stu(String sno, String name, String sex, School s) {
this.sno = sno;
this.name = name;
this.sex = sex;
this.s = s;
}
public Stu() {
sno="001";
name="晓明";
sex="男";
s=new School("大肥羊学校","羊村");
}
public void info(){
System.out.println(sno+"=="+name+"=="+sex);
s.info();
}
}
class School{
public String name;
public String location;
public void info(){
System.out.println(name);
}
public School(String name, String location) {
this.name = name;
this.location = location;
}
}
public class test02 {
public static void main(String[] args) {
School s1=new School("清华大学","北京"); //有参
Stu s2=new Stu("001","李明","男", s1);
s2.info();
Stu s3=new Stu(); //无参
s3.info();
}
}
10.this关键字
指向当前对象
使用:
- 局部变量与成员变量重名,用this.color=color.访问
- 调用本类中的其他方法(不用记太长单词)。
- 调用其他构造函数。 (本例中:调无参构造函数,也有了名字和颜色)
- 并且 构造函数使用时,必须放在第一行。
11.static(静态的)
静态属性(又称类属性),静态方法,静态代码块。
作用:被static修饰的执行和内存空间:随着类的加载而加载,而且优于对象存在。
何时执行?类加载到虚拟机的方法区中。static的东西在类加载时加载。
存储在方法区中。
类属性:
这个属性属于某个类,不属于任何一个对象。static属性存在方法区中。静态属性既可以通过对象名访问,又可通过类名访问。一改属性值所有对象都变。
通过类名访问的一定是静态属性。对象属性放堆中,静态属性放在方法区中。
只要任何 一个对象修改了静态属性,所有对象的静态属性都会改变。
静态方法:
普通方法中可访问静态属性和普通属性。
静态方法中访问静态属性,不可访问普通属性。
类名可访问静态方法,而类名不可访问普通方法。
静态方法正常用,非静态方法创建完对象时可用。
静态代码块:
只在类加载到虚拟机中上执行一次。
普通代码块:
只要创建对象就会使用。
12.类的初始化过程:
Person p=new person(); //先执行左边,再执行右边。再把右边的值赋值给左边。
5.声明属性时候的初始化。
6.代码块和属性谁先谁后了,看那个代码顺序。(属性的初始化和代码的初始化)
最后把首地址给了栈,并且栈指向这片内存。
属性赋值:首选构造函数里赋值。
13.idea中debug:让程序一行一行运行,帮你找错。
让程序一行一行执行。任何一行点一小红点,程序运行到这停止,
想让程序停止在断点处,点debug,左边这一行行数,右边显示访问到的参数,对象,在debugger里。
代码输出的在console中。
Debug能干什么?
追踪代码的运行流程。
程序运行异常定位。
线上问题追踪。
常用图标按键
F8:步过;运行这一行,停在下一行。返回上一方法。
F7:步入,进入这一行的方法内部执行;看看这一行如何运行的。m1.start();会显示Frame栈,console会显示输出。variables
显示变量值。
Alt+F9:运行到光标处。并运行这一行。上面的行都跳过,
Shift+F8:在这一方法中剩下代码不想执行了,只想看运行之后的代码。从当前方法直接返回上一方法。
简单讲讲步骤:
1.在程序中添加断点(小红点)
2.调用方法时程序会停在这里。
3.运行程序时候选择Debug运行。
4.需要知道的快捷键。
有些地方需要录入信息,录入后就停在这了。若没输出信息,全屏清空。debugger中出现进的方法。main方法在最下方,现调用的方法在最上方。
14.继承
定义:在原有类的基础上拓展出自己新的类。
子类继承父类所有方法和属性。
可以定义自己方法,和方法重写。
关键字:extends