目录

1. 探讨:内存中调用情况。编辑

2.   类是对象的抽象。对象是类的实例。

3.   局部变量和成员变量

4.   封装的定义

5.包(packet)

6.复习

7.方法重载

8.构造函数

9.练习题

10.this关键字


1. 探讨:内存中调用情况。

java修改对象成员变量 java修改对象方法_System

 三部分:栈、堆、方法区。

方法区:保存类的信息(叫什么名字,属性,方法,接口,父类)

第一步:加载类的信息,字节码文件worker.class虚拟机加载类信息到方法里。加载类的信息,从字节码文件中读取。worker w1=new worker();

第二步:在栈中分配首地址内存空间,worker w1。

第三步:在堆中分配worker内存空间,各属性赋默认值。

第四步:把首地址给了栈中的地址。

调方法:第一次使用类有类加载操作,加载到方法区中。

w1.info()中在方法区中先找,到对应对象属性中找。

2.   类是对象的抽象。对象是类的实例。

3.   局部变量和成员变量

java修改对象成员变量 java修改对象方法_System_02

 局部变量:方法内的。成员变量:方法外的,也就是我们的属性。

 生命周期:方法内。成员变量为对象里。

4.   封装的定义

java修改对象成员变量 java修改对象方法_构造函数_03

只需知遥控器可打开电视,无需知内部实现细节。

作用:

-----让使用者只能通过事先定好的方法访问数据,方便加入逻辑控制。(如音量只可1-100)

-----便于修改增强代码可维护性,不影响使用。

-----隐藏实现细节。

做法:

-----把相关的属性和方法放在一个类中。

-----把功能复杂的实现封装在一个方法中。

5.包(packet)

作用:

把杂乱的东西放同一包中,方便管理类。

可允许不同包里同名类。如music和video里都有播放类。但是属于不同类。

但一个包里不能新建重名类,源文件已存在。

关键词:packet

映射到磁盘上就是文件夹。

如果使用其他包下的类。 import haha.worker    //导入haha包下的worker   

java修改对象成员变量 java修改对象方法_System_04

 引入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; 会报错

使用全类名无需导入包。

方法:使用全类名   :包名+类名。

java修改对象成员变量 java修改对象方法_方法区_05

无法导入默认包下的worker。所有类都需放在某个包下。

java修改对象成员变量 java修改对象方法_方法区_06

 要么就在默认包下在建一个类Test才可以访问。

6.复习

java修改对象成员变量 java修改对象方法_System_07

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.练习题

java修改对象成员变量 java修改对象方法_构造函数_08

 代码块:

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自动生成构造函数。

练习题:

java修改对象成员变量 java修改对象方法_java修改对象成员变量_09

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.访问
  • 调用本类中的其他方法(不用记太长单词)。
  • 调用其他构造函数。 (本例中:调无参构造函数,也有了名字和颜色)
  • 并且 构造函数使用时,必须放在第一行。

java修改对象成员变量 java修改对象方法_java修改对象成员变量_10

 11.static(静态的)

静态属性(又称类属性),静态方法,静态代码块。

作用:被static修饰的执行和内存空间:随着类的加载而加载,而且优于对象存在。

何时执行?类加载到虚拟机的方法区中。static的东西在类加载时加载。

存储在方法区中。

类属性:

这个属性属于某个类,不属于任何一个对象static属性存在方法区中。静态属性既可以通过对象名访问,又可通过类名访问。一改属性值所有对象都变。

通过类名访问的一定是静态属性。对象属性放堆中,静态属性放在方法区中。

只要任何 一个对象修改了静态属性,所有对象的静态属性都会改变。

java修改对象成员变量 java修改对象方法_System_11

 静态方法:

普通方法中可访问静态属性和普通属性。

静态方法中访问静态属性,不可访问普通属性。

类名可访问静态方法,而类名不可访问普通方法。

静态方法正常用,非静态方法创建完对象时可用。

java修改对象成员变量 java修改对象方法_System_12

静态代码块:

只在类加载到虚拟机中上执行一次。

普通代码块:

只要创建对象就会使用。

12.类的初始化过程:

java修改对象成员变量 java修改对象方法_java修改对象成员变量_13

 

java修改对象成员变量 java修改对象方法_java_14

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