【Java常见问题】(一)基础知识篇

简介: Java初始化的顺序 有以下原则:(序号越小优先级越高) static>non-static 父类>子类 按成员变量定义的顺序 对于同一个成员,在域中初始化和块中初始化平级,即按照从上到下的顺序。
注:本文首发于稀土掘金。该平台的作者 逐光而行 也是本人。

theme: channing-cyan

highlight: ally-light

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第7天, 点击查看活动详情 这也是第9篇文章。

Java初始化的顺序

有以下原则:(序号越小优先级越高)

  1. static>non-static
  2. 父类>子类
  3. 按成员变量定义的顺序
  4. 对于同一个成员,在域中初始化和块中初始化平级,即按照从上到下的顺序,以最后一次初始化为最终的值。
public class test{
    static {a=2;}
    static int a=1;
    static int b=3;
    static {b=4;}
    public static void main(String[] args) {
    System.out.print(a+" ");
    System.out.print(b);
}
}

以上输出的结果为:1 4

关于构造方法的一些注意事项

  • 构造方法必须与类名相同
Q:那类中的普通方法也能用这个名字吗?

A:可以的

  • 构造方法不能被继承,也不能被override,但是可以被overload(即使用不同参数个数或参数类型来定义多个构造方法)
  • 若没有定义构造方法,编译器会默认生成一个无参数的,且其修饰符与类的修饰符保持一致。

关于父类和子类的关系问题:

  • 子类可以通过super()来显式调用父类的构造方法。当父类没有提供无参数的构造方法时,子类的构造方法必须显式地调用父类的构造方法(反之,如果父类提供了,子类就不用显示说明)

Java中的对象与引用

Java没有指针的 概念 ,但并不代表指针就完全不存在了。比如new返回的都是一个指针的引用。

  • Java在处理基本数据类型时
回顾:基本数据类型有哪些?

byte short int long float double char boolean
采取的是按值传递(输入参数的拷贝),而对其他类型都是按引用传递

  • 对象函数调用和用“=” 赋值时也是用的引用传递

Java中的clone妙用

  • 目标:从对象A中创建一个具有相同状态的B,且后续对B的修改不再影响A
  • 方案:使用clone
  • 原理:返回一个Object对象的拷贝,函数返回的是一个新的对象而不是一个引用。
  • 使用步骤:

    • 继承Cloneable接口
    • 重写clone()方法,在其中调用super.clone()
    • 把浅拷贝的引用指向原型对象新的克隆体
  • 示例代码如下:
public class test{

    public static void main(String[] args) {
    Obj a=new Obj();
    Obj b=(Obj)a.clone();
    b.changeInt();
    System.out.println("a:"+a.getInt());
    System.out.println("b:"+b.getInt());
}
}

class Obj implements Cloneable{
    private int i=0;
    public int getInt(){
        return i;
    }

    public void setInt(int num){
        i=num;
    }

    public void changeInt(){
        this.i=1;
    }

    public Object clone(){
        Object o=null;
        try{
            o=(Obj)super.clone();
        }catch(CloneNotSupportedException e){
            e.printStackTrace();
        }
        return o;
    }
}

打印结果:

a:0

b:1

相关文章
|
1月前
|
算法 Java 数据中心
探讨面试常见问题雪花算法、时钟回拨问题,java中优雅的实现方式
【10月更文挑战第2天】在大数据量系统中,分布式ID生成是一个关键问题。为了保证在分布式环境下生成的ID唯一、有序且高效,业界提出了多种解决方案,其中雪花算法(Snowflake Algorithm)是一种广泛应用的分布式ID生成算法。本文将详细介绍雪花算法的原理、实现及其处理时钟回拨问题的方法,并提供Java代码示例。
72 2
|
5月前
|
安全 Java
Java多线程编程实践中的常见问题与解决方案
Java多线程编程实践中的常见问题与解决方案
WXM
|
4月前
|
前端开发 JavaScript 小程序
Java人事面常见问题及方法论
Java人事面常见问题及方法论
WXM
50 0
|
4月前
|
安全 Java 开发者
Java多线程编程实践中的常见问题与解决方案
Java多线程编程实践中的常见问题与解决方案
|
5月前
|
安全 Java 编译器
杭州 【Java基础知识 11】java泛型方法的定义和使用(学习+改进+自己理解,想法) (借鉴-侵-删)
杭州 【Java基础知识 11】java泛型方法的定义和使用(学习+改进+自己理解,想法) (借鉴-侵-删)
41 1
|
4月前
|
设计模式 安全 Java
Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
110 0
|
4月前
|
安全 Java 程序员
Java多线程编程最佳实践与常见问题解析
Java多线程编程最佳实践与常见问题解析
|
4月前
|
Java
解决Java中Socket编程中的常见问题
解决Java中Socket编程中的常见问题
|
6月前
|
Java 调度 开发者
Java中的多线程编程:基础知识与实践
【5月更文挑战第29天】 在现代软件开发中,多线程编程是一个不可忽视的领域。特别是在Java这种广泛使用的编程语言中,掌握多线程的概念和技术对于开发高效、响应迅速的应用程序至关重要。本文将深入探讨Java多线程的核心概念、实现机制以及常见问题的解决方案。我们将从基础出发,逐步揭示如何通过多线程提升程序性能,并且讨论并发编程中的挑战和解决策略。文章的目的是为开发者提供一个清晰的多线程编程指南,帮助他们在实际项目中有效地应用这些知识。
39 3
|
6月前
|
Java 开发者
Java中的多线程编程:基础知识与实践
【5月更文挑战第26天】 在现代计算机科学中,多线程编程是一个复杂且强大的概念。Java作为一种广泛使用的编程语言,其对多线程的支持使得开发者能够创建出更为复杂、高效和响应迅速的应用程序。本文将深入探讨Java中的多线程编程,从基础概念到实际编程技巧,为读者提供全面的理解和实践指导。
下一篇
无影云桌面