首页 > 编程语言 >Java动手动脑

Java动手动脑

时间:2023-09-27 18:22:05浏览次数:39  
标签:初始化 Java 动脑 System Mid 动手 println public out

动手动脑Ⅰ

程序为什么出错:因为构造函数仅有有参构造。如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。

 试验

public class Main {
    public static void main(String[] args) {
        d n=new d();
        System.out.println(n.t);
        n=new d(600);
        System.out.println(n.t);
    }
}
class d{
    public int t=50;
    {
        t=-1;
    }
    public d(int k){
        t=k;
    }
    public d(){}
}

输出结果为-1  600.

初始化是在类被创建的时候被初始化的。而调用构造函数是类被创建好以后执行的。

动手动脑Ⅱ

 1 package org.example;
 2 
 3 
 4 
 5 class Root
 6 {
 7     static
 8     {
 9         System.out.println("Root的静态初始化块");
10     }
11     {
12         System.out.println("Root的普通初始化块");
13     }
14     public Root()
15     {
16         System.out.println("Root的无参数的构造器");
17     }
18 }
19 class Mid extends Root
20 {
21     static
22     {
23         System.out.println("Mid的静态初始化块");
24     }
25     {
26         System.out.println("Mid的普通初始化块");
27     }
28     public Mid()
29     {
30         System.out.println("Mid的无参数的构造器");
31     }
32     public Mid(String msg)
33     {
34         //通过this调用同一类中重载的构造器
35         this();
36         System.out.println("Mid的带参数构造器,其参数值:" + msg);
37     }
38 }
39 class Leaf extends Mid
40 {
41     static
42     {
43         System.out.println("Leaf的静态初始化块");
44     }
45     {
46         System.out.println("Leaf的普通初始化块");
47     }
48     public Leaf()
49     {
50         //通过super调用父类中有一个字符串参数的构造器
51         super("Java初始化顺序演示");
52         System.out.println("执行Leaf的构造器");
53     }
54 
55 }
56 
57 class TestStaticInitializeBlock
58 {
59     public static void main(String[] args)
60     {
61         new Leaf();
62     }
63 }

/*
执行结果

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

*/

静态初始化块只执行一次。

创建子类型的对象时,也会导致父类型的静态初始化块的执行。

一个有趣的问题

静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static的字段或方法)?

静态方法只能访问静态成员,这是因为静态方法不属于任何特定的类实例。它们被设计为不依赖于类的任何特定实例,因此它们不能直接访问实例成员。这是因为实例成员需要具体的实例才能被访问。

但是,如果你需要在静态方法中访问实例成员,你可以通过传递一个类的实例作为参数来实现。例如:
package org.example;

public class Main {
public static void main(String[] args) {
d n=new d(600);
d r=new d(500);
int ans=ma(n,r);
}
public static int ma(d t,d k){
return Math.max(t.t,k.t);
}
}
class d{
public int t;
public d(int k){
t=k;
}
}
 

 

标签:初始化,Java,动脑,System,Mid,动手,println,public,out
From: https://www.cnblogs.com/litianyu1969/p/17733385.html

相关文章

  • JavaWeb--文件上传和下载
    上传文件如何实现文件上传要实现Web开发中的文件上传功能,通常只需完成两步操作1、在Web界面中添加上传输入项2、在Servlet中读取上文件的表单页面,并保存到硬盘中文件上传的相关APIFiletem接口它只要用于Commons-FileUpload组件当中,主要是封装单个表单字段元素。DiskFiletemFacto......
  • 【Java】SpringBoot邮件发送实现
    Springboot3邮件发送哔哩哔哩萌狼蓝天微信公众号萌狼蓝天依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency>配置这里我用的是网易免费企......
  • [译]JavaScript规范
    译自:https://github.com/airbnb/javascript类型原始值:相当于传值1.string2.number3.boolean4.null5.undefined6.varfoo=1,7.bar=foo;8.9.bar=9;10.11.console.log(foo,bar);//=>1,9复杂类型:相当于传引用1.obje......
  • JDK安装、java环境配置
      JDK是Java语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境,JAVA工具和JAVA基础的类库。JRE(JavaRuntimeEnvironment,Java运行环境),运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库.它包......
  • JAVA 单例设计模式
    单例模式(SingletonPattern)是Java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例......
  • JAVA高级教程
    高级教程数据结构枚举一种从数据结构中取回连续元素的方式位集合可以单独设置和清楚的位或标志向量Vector是一个基于动态数组的集合类栈实现了一个后进先出的数据结构字典定义了键映射到值的数据结构哈希表在用户定义键结构的基础上来组织数据的手......
  • JavaScript——“==”和“===”区别(双等于号和三等于号区别)
    1.==:双等于号称为等值符。当等号两边为类型相同的值时,则直接比较值是否相同;当类型不同时,会先进行类型转换,转换为相同的类型后再进行比较。类型转化规则:1)当等号两边为boolean,string,number三者中任意两者进行对比时,会优先转换为number进行比较2)当等号两......
  • java程序,如何打印详细报错堆栈信息
    try{System.out.println(1/0);}catch(finalExceptione){log.error("ERROR","Errorfound:",e);log.error("ERROR","Errorfound:"+e.getMessage());log.error("ERROR","Errorfo......
  • Java-统计程序运行的时长(计算两个时间相差的秒数)
    最近在做Hbase的查询性能验证,需要统计查询的执行时长,所以需要统计开始时间和结束时间的时间差。下面是使用SimpleDateFormat和Date计算时间差(相差秒数)的程序示例,仅供参考。packagecom.sgcc;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjav......
  • Java函数AI生成器:秒级体验,高质量生成
    职业使然,之前我自己试用并给小伙伴们推荐过不少大模型相关的产品,这些产品看起来牛逼plus,但是它们要么对国内有限制,要么是申请制/邀请制,自己没个资想搞个账号去体验一下都难如登天,忍不住吐槽某大厂虽然早早的对外宣布面向全民开发,但实际上提交了手机号码还在等待排队上车,掐指一算,有......