首页 > 其他分享 >2024/10/14日 动手动脑

2024/10/14日 动手动脑

时间:2024-10-14 22:02:03浏览次数:1  
标签:10 14 初始化 System class 2024 println public out

1. 关于继承中成员变量的访问特点

代码示例:

点击查看代码
public class Main {
    public static void main(String[] args) {
        Zi z=new Zi();
        z.ziShow();
    }
}

class Fu{
    String name = "Fu";
}
class Zi extends Fu{
    String name = "Zi";
    public void ziShow(){
        String name = "ZiShow";
        System.out.println(name);
        System.out.println(this.name);
        System.out.println(super.name);
    }
}
![](/i/l/?n=24&i=blog/3478956/202410/3478956-20241014211847948-373916367.png) 根据测试结果,我们可知,在无修饰词时,在范围内我们是就近原则。 此外,this指当前类,super指其父类。

2.动手实验 “==”
/1/

点击查看代码
public class Main {
    public static void main(String[] args) {
        int value1 = 100;
        int value2 = 100;
        System.out.println(value1==value2); 
    }
}
//------------>ture

/2/

点击查看代码
public class Main {
    public static void main(String[] args) {
        Foo obj1=new Foo();
        Foo obj2=new Foo();
        System.out.println(obj1==obj2);
    }
}
class Foo{
    int value = 100;
}
//------------>false;
总结: 当“==”施加于原始数据类型变量时,是比较变量所保存的数据是否相等 当“==”施加于引用类型变量时,是比较这两个变量是否引用同一对象。 引用代表地址,所以“==”实际上相当于比较两个引用类型变量中保存的对象地址是否相同。 **3.构造方法与类** /1/
点击查看代码
public class Main {
    public static void main(String[] args) {
        Foo obj1=new Foo();
    }
}
class Foo{
    int value ;
    public Foo(int initValue){
        value=initValue;
    }
}
//如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。
/2/
点击查看代码
class Fruit {
    int grams;
    int calsPerGram;
    Fruit() {
        this(55,10);
    }
    Fruit(int g,int c){
        grams=g;
        calsPerGram=c;
    }
}
//同一个类可以有多个构造函数,多个构造函数之间通过参数来区分。
// 这是方法重载的一个实例。构造函数之间可以相互调用。
/3/自找麻烦
点击查看代码
public class Main {
    public static void main(String[] args) {
        Foo obj=new Foo();
        System.out.println(obj.field);
        obj = new Foo(300);
        System.out.println(obj.field);
    }
}

class Foo{
    {
        field =200;
    }
    public int field = 100;
    public Foo(int value){
        this.field = value;
    }
    public Foo(){
        System.out.println(field);
    }
}
//------------>100;
//------------>100;
//------------>300;
//这是一个生造出来展示Java语法特性的示例类,在实际开发中不要这样写代码,应该尽量保证一个字段只初始化一次!
//1.执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。
//2.执行类的构造函数。
//类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。
//因此,适合于封装那些“对象创建时必须执行的代码”。

/4/类的静态初始化块

点击查看代码
public class Main {
    public static void main(String[] args) {
        new Leaf();
    }
}

class Root
{
    static
    {
        System.out.println("Root的静态初始化块");
    }
    {
        System.out.println("Root的普通初始化块");
    }
    public Root()
    {
        System.out.println("Root的无参数的构造器");
    }
}
class Mid extends Root
{
    static
    {
        System.out.println("Mid的静态初始化块");
    }
    {
        System.out.println("Mid的普通初始化块");
    }
    public Mid()
    {
        System.out.println("Mid的无参数的构造器");
    }
    public Mid(String msg)
    {
        //通过this调用同一类中重载的构造器
        this();
        System.out.println("Mid的带参数构造器,其参数值:" + msg);
    }
}
class Leaf extends Mid
{
    static
    {
        System.out.println("Leaf的静态初始化块");
    }
    {
        System.out.println("Leaf的普通初始化块");
    }
    public Leaf()
    {
        //通过super调用父类中有一个字符串参数的构造器
        super("Java初始化顺序演示");
        System.out.println("执行Leaf的构造器");
    }

}

//Root的静态初始化块
//Mid的静态初始化块
//Leaf的静态初始化块
//Root的普通初始化块
//Root的无参数的构造器
//Mid的普通初始化块
//Mid的无参数的构造器
//Mid的带参数构造器,其参数值:Java初始化顺序演示
//Leaf的普通初始化块
//执行Leaf的构造器

//由测试结果可知,其运行过程为最高父类静态,父类静态,子类静态,最高父类普通和构造函数,父类普通和构造函数,子类普通和构造函数

/5/有趣的问题
问: 静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?
请编写代码验证你的想法。
已知:在静态方法中不能直接访问类的实例成员。但是可以通过创建类的实例来间接访问实例成员。因此如下:

点击查看代码
class MyClass {
    int instanceVariable;

    public MyClass(int instanceVariable) {
        this.instanceVariable = instanceVariable;
    }

    public void instanceMethod() {
        System.out.println("This is an instance method. Instance variable value: " + instanceVariable);
    }

    public static void staticMethod() {
        MyClass obj = new MyClass(42);
        System.out.println("Accessing instance variable through an object: " + obj.instanceVariable);
        obj.instanceMethod();
    }
}

public class Main {
    public static void main(String[] args) {
        MyClass.staticMethod();
    }
}

//在这个例子中,静态方法staticMethod通过创建MyClass的实例来访问实例成员变量instanceVariable和实例方法instanceMethod。
**4.包装类**
点击查看代码
public class Main {
    public static void main(String[] args) {
        Integer i1 = 100;
        Integer j1 = 100;
        System.out.println(i1==j1);

        Integer i2 = 129;
        Integer j2 = 129;
        System.out.println(i2==j2);

    }
}
-------->true
-------->false
//在 Java 中,对于Integer类型的自动装箱和拆箱操作,在一定范围内的值会被缓存起来以提高性能。
//对于Integer类型,范围在-128到127之间的值会被缓存,当使用自动装箱(如Integer i1 = 100)时,如果值在这个范围内,会从缓存中获取相同的Integer对象。
//所以当比较两个在这个范围内的Integer对象使用==时,实际上比较的是同一个对象的引用,结果为true。
//而对于不在这个范围内的值,比如129,每次自动装箱都会创建新的Integer对象,所以当使用==比较两个不同的Integer对象时,结果为false。
//如果要比较Integer对象的值是否相等,应该使用equals方法。
                                                                                                    --------------------------Moonbeams.

标签:10,14,初始化,System,class,2024,println,public,out
From: https://www.cnblogs.com/MoonbeamsC/p/18466271

相关文章

  • 代码随想录算法训练营day15| 110.平衡二叉树 257.二叉树的所有路径 404.左叶子之和
    学习资料:https://programmercarl.com/0110.平衡二叉树.html#算法公开课平衡二叉树:任意一个节点的左右子树高度差不超过1左叶子:是叶子节点,且是其父节点的左节点完全二叉树:上层均满,底层的节点从左到右连续满二叉树:每层都是满的,节点总数为(2^k+1)语法:2<<1是2^2学习记录:1......
  • Moectf2024-All-Crypto
    前三周都出了,第四周有两题不会,为复现Crypto入门指北fromCrypto.Util.numberimportbytes_to_long,getPrimefromsecretimportflagp=getPrime(128)q=getPrime(128)n=p*qe=65537m=bytes_to_long(flag)c=pow(m,e,n)print(f"n={n}")print(f"p={p......
  • 10月14日课程动手动脑
    1.此处出错是因为newfoo()中没有参数,编译器无法识别该方法。2其最终的值为200,首先我们应该明白其中的顺序,在对象实例化的时候1静态字段和静态初始化块(如果有的话,这个例子中没有静态字段或静态初始化块)。2实例字段和实例初始化块:在对象被创建时,实例字段和实例初始化块会按照......
  • 2024牛客暑期多校训练营4 - J. Zero (究极卡常)
    \(O(N^2)\)AC。输入后预处理?数量的前缀和。双层循环找所有的区间\([l,r]\)使区间内没有\(0\),找到以后直接用逆元+快速幂求\(\frac{(r-l+1)^k}{2^{sum_{r}-sum_{l-1}}}\),最后累加和。因为数据过水,这样已经能AC了。#include<cstdio>usingnamespacestd;constint......
  • Stanford CS149 -- Assignment 3: A Simple CUDA Renderer
    作业描述及代码参见:CS149-asst3实验环境:WSL2;GeForceMX350;Cuda12.6第一部分:CUDA热身练习1:SAXPY实验结果:相比基于CPU的实现,性能明显下降。这是由于SAXPY属于I/O密集型任务,计算量较小,主要的时间耗费在数据的转移。第二部分:CUDA热身练习2:并行前缀和第三部分:简单......
  • Stanford CS149 -- Assignment 4: NanoGPT149
    作业描述及代码参见:cs149gptWarm-Up:访问张量张量/数组都是按行存储的,四维数组可以看作元素为三维数组的数组,元素大小即为三维数组内元素总数,以此类推。第1部分:简单(但不太高效)的注意力机制实现主要实现两个矩阵乘法和一个softmax运算。第2部分:块矩阵乘法和UnfusedSof......
  • [NOI2014] 动物园——KMP 倍增
    [NOI2014]动物园题目描述近日,园长发现动物园中好吃懒做的动物越来越多了。例如企鹅,只会卖萌向游客要吃的。为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习算法。某天,园长给动物们讲解KMP算法。园长:“对于一个字符串\(S\),它......
  • Stanford CS149 -- Assignment 2: Building A Task Execution Library from the Groun
    作业描述及代码参见:CS149-asst2PartAStep1只需要实现一个简单的任务系统,在run()的开始生成工作线程,并在run()返回之前从主线程合并这些线程。任务的分配方式采用动态分配,即每个线程每次取一个任务完成,能者多劳。每个线程的核心实现为:while(true){inttaskID=done+......
  • 2024/10/14日工作总结
    完成数据结构作业,用栈和队列两种方法实现回文;栈的实现:includeusingnamespacestd;constexprautoMAXSIZE=50;typedefstruct{char*base;char*top;intstacksize;}sqStack;voidInitStack(sqStack&s){s.base=newchar[MAXSIZE];if(!s.base)exit(OVERFLOW)......
  • Stanford CS149 -- Assignment 1: Performance Analysis on a Quad-Core CPU
    作业描述及代码参加:CS149-asst1程序1生成view1时加速比与线程数的关系如下:线程数加速比22.0431.6942.5452.5763.2673.5584.11生成view2时加速比与线程数的关系如下:线程数加速比21.7532.2542.6753.146......