java笔记类与对象3.7-3.10 2020.3.17

List,是个接口
ArrayList才是动态数组类

3.7垃圾回收机制
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

this的三种用法
this(1,2,3)会调用构造器
在这里插入图片描述

下图三个对象都是垃圾对象
在这里插入图片描述
让系统回收垃圾对象
在这里插入图片描述
回收的时候,会调用自己的finalize方法
在这里插入图片描述
加不加this都行,甚至可以加一个this.getName()
在这里插入图片描述在这里插入图片描述
结果会略有不同,但都消失
在这里插入图片描述
3.8 static的使用
同时也是静态的

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
this到底指什么
当前类的对象
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
类加载的时候就运行静态代码块
之后程序调用构造函数时,构造函数里的才输出,所以有先后顺序
在这里插入图片描述
在这里插入图片描述
java静态代码块在什么时候会执行在这里插入图片描述
未调用的时候未执行
在这里插入图片描述
创建新对象就要加载类,执行了
在这里插入图片描述

package com.example;
import sun.rmi.runtime.NewThreadAction;
import javax.sound.midi.Soundbank;
import java.util.Scanner;
import java.util.Set;

public class javahello_2 {
    public static void main(String[] args) {
        System.out.println("textofmian");
    }
}
class A{
    static  {
        System.out.println("textofstaic");
    }
    
}

类加载的时机
对于初始化阶段,虚拟机规范规定了有且只有 5 种情况必须立即对类进行“初始化”(而加载、验证、准备自然需要在此之前开始):

遇到new、getstatic 和 putstatic 或 invokestatic 这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。对应场景是:使用 new 实例化对象、读取或设置一个类的静态字段(被 final 修饰、已在编译期把结果放入常量池的静态字段除外)、以及调用一个类的静态方法。
对类进行反射调用的时候,如果类没有进行过初始化,则需要先触发其初始化。
当初始化类的父类还没有进行过初始化,则需要先触发其父类的初始化。(而一个接口在初始化时,并不要求其父接口全部都完成了初始化)
虚拟机启动时,用户需要指定一个要执行的主类(包含 main() 方法的那个类),
虚拟机会先初始化这个主类。
当使用 JDK 1.7 的动态语言支持时,如果一个 java.lang.invoke.MethodHandle 实例最后的解析结果 REF_getStatic、REF_putStatic、REF_invokeStatic 的方法句柄,并且这个方法句柄所对应的类没有进行过初始化,则需要先触发其初始化。
第5种情况,我暂时看不懂。

以上这 5 种场景中的行为称为对一个类进行主动引用。除此之外,所有引用类的方式都不会触发初始化,称为被动引用,例如:

通过子类引用父类的静态字段,不会导致子类初始化。
通过数组定义来引用类,不会触发此类的初始化。MyClass[] cs = new MyClass[10];
常量在编译阶段会存入调用类的常量池中,本质上并没有直接引用到定义常量的类,因此不会触发定义常量的类的初始化。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
3.9类的组合
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
3.10summary
在这里插入图片描述

作业
1.输出?

public class javahello_2 {
    static void f(Book p) {
        p.width = 20;
        p.length = 40;
    }

    public static void main(String args[]) {
        Book b = new Book();
        b.width = 10;
        b.length = 20;
        f(b);
        System.out.print(" " + b.width);
        System.out.print(" " + b.length);
    }
}

20 40

2.输出?

package com.example;

class Book {
    int width;
    int length;
}

public class javahello_2 {

        static int j = 20;

        public static void main(String args[]) {
            int i = 10;
            javahello_2 p = new javahello_2();
            p.amethod(i);
            System.out.println(i + " and " + j);
        }

        public void amethod(int x) {
            x = x * 2;
            j = j * 2;
        }
    }

定义一个表示学生的student类,包括的域有学号、姓名、性别、年龄,包括的方法有获得学号、姓名、性别、年龄及修改年龄。编写Java程序创建student类的对象及测试其方法的功能。

package com.example;
import javax.swing.*;
class Student{
    int number=0;
    String name="aas";
    char sex='f';
    int age=0;

    public int getAge() {
        return age;
    }
    public int getNumber() {
        return number;
    }

    public String getName() {
        return name;
    }

    public char getSex() {
        return sex;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
public class javahello_2 {
    public static void main(String[] args) {
    Student student=new Student();
        System.out.println(student.getSex());
        student.setAge(12);
        System.out.println(student.getAge());
        System.out.println(student.getName());
        System.out.println(student.getNumber());
        System.out.println(student.toString());
    }
}

定义一个计算矩形面积、立方体和球体体积的类。该类完成计算的方法用静态方法实现。

package com.example;

class Jisuanqi{
    static  double jisuan(double a){

        return 4/3*a*a*a*Math.PI;
    }
    static  double jisuan(double a,double b){
        return a*b;
    }
    static  double jisuan(double a,double b,double c){
        return a*b*c;
    }
}
public class javahello_2 {
    public static void main(String[] args) {
        ///用缺省处理
        ///不用了Jisuanqi jisuanqi = new Jisuanqi();
        System.out.println(Jisuanqi.jisuan(9));
        System.out.println(Jisuanqi.jisuan(1,2));
        System.out.println(Jisuanqi.jisuan(4,5,6));
    }
}

在这里插入图片描述

定义一个Company类,成员变量有公司名称、雇员列表、公司每年的总收入。该类的构造方法可能有如下形式: public Company(String name) { } 也可以有更多其它形式的构造方法。或许还应该有如下方法: public void setName(String name){ } public String getName() { } 必须提供一个公共的dump方法来打印有关Company的信息,如公司名称、雇员和公司总收入。最后为Company类编写一个测试客户程序。
List不是一个类,是个接口
ArrayList才是动态数组类

package com.example;
import com.sun.org.apache.xml.internal.resolver.helpers.PublicId;
import javax.xml.soap.Name;
import java.lang.reflect.Member;
import java.util.*;
class Company{
    public String name="aa";
    public List<String> member=new ArrayList<String>();
//  public List<String> member2=new List<String>();
    int money=0;
    public void setName(String name) {
        this.name = name;
    }
    public Company(String name){
        this.name=name;
    }
    public Company(){
        this("undefined");
    }
    public String getName() {
        return name;
    }
    public void addMember(String newMember){
        member.add(newMember);
    }
    public void earnMoney(int newEarn){
        this.money+=newEarn;
    }
    public String dump(){
        return "name:"+name+"\n"+"menber:"+member.toString()+"\n"+"money:"+money;
    }
}
public class javahello_2 {
    public static void main(String[] args) {
        Company company=new Company();
        //testing addmember
        company.addMember("ass");
        company.addMember("rere");
        company.addMember("wewe");
        company.earnMoney(56);
       //out all
        System.out.println(company.dump());
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值