Java基础 -- 静态方法和实例方法有何不同无参构造函数有什么作用import java和javax有什么区别成员变量与局部变量的区别有哪些(成员变量有默认赋值)

Posted CodeJiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础 -- 静态方法和实例方法有何不同无参构造函数有什么作用import java和javax有什么区别成员变量与局部变量的区别有哪些(成员变量有默认赋值)相关的知识,希望对你有一定的参考价值。

1. 静态方法和实例方法有何不同

  1. 在外部调用静态方法时,可以使用”类名.方法名”的方式,也可以使用”对象名.方法名”的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。
  2. 静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制

为什么在一个静态方法内调用一个非静态成员为什么是非法的?

  1. 由于静态方法可以不通过对象进行调用,因此在静态方法里,不能调用其他非静态变量,也不可以访问非静态变量成员。
  2. 究其原因是因为类加载机制:有static关键字修饰,会先加载在内存中,且只执行一次。

2. 无参构造函数有什么作用

Java 程序在执行子类的构造方法之前,如果没有用 super() 来调用父类特定的构造方法,则会调用父类中“没有参数的构造方法”。因此,如果父类中只定义了有参数的构造方法,而在子类的构造方法中又没有用 super() 来调用父类中特定的构造方法,则编译时将发生错误,因为 Java 程序在父类中找不到没有参数的构造方法可供执行。解决办法是在父类里加上一个不做事且没有参数的构造方法。


3. import java和javax有什么区别

  • 刚开始的时候 JavaAPI 所必需的包是 java 开头的包,javax 当时只是扩展 API 包来使用。然而随着时间的推移,javax 逐渐地扩展成为 Java API 的组成部分。但是,将扩展从 javax 包移动到 java 包确实太麻烦了,最终会破坏一堆现有的代码。因此,最终决定 javax 包将成为标准API的一部分。
  • 所以,实际上java和javax没有区别。这都是一个名字。

4. 接口和抽象类

  1. 接口的方法默认是 public,所有方法在接口中不能有实现(Java 8 开始接口方法可以有默认实现,并且只可以用接口名调用),而抽象类可以有非抽象的方法。

Java 8 开始接口方法可以有默认实现

只可以用接口名调用

  1. 接口中除了static、final变量,不能有其他变量,而抽象类中则不一定。
    一个类可以实现多个接口,但只能实现一个抽象类。接口自己本身可以通过extends关键字扩展多个接口。
  2. 接口方法默认修饰符是public,抽象方法可以有public、protected和default这些修饰符(抽象方法就是为了被重写所以不能使用private关键字修饰!)。
  3. 从设计层面来说,抽象是对类的抽象,是一种模板设计,而接口是对行为的抽象,是一种行为的规范。

4.1 抽象类

java的类是单继承的,不可以实现多继承。

抽象类:有abstract修饰的类。 抽象方法:有abstract修饰的方法,只有方法名字,没有方法的实现抽象方法不是静态方法

继承了抽象类的子类,必须去实现它的方法,除非这个子类也是抽象类。

抽象类的特点:

  • 不能new出来,只能靠子类去继承它。
  • 抽象类里面也是可以有正常方法的。
  • 含有抽象方法的类必须是抽象类。
  • 抽象类也可以有构造器,虽然抽象类不可以实例化。抽象类的构造器会在子类实例化时调用,因此它也是用来实现多态中的共同点构造。
  • 抽象类中是可以定义静态方法的 因为抽象类中还可以有非静态方法呢 但是不可以定义静态抽象方法。

抽象类的意义:提升开发效率。

AbstractClass.java

package BasicGrammar;

public abstract class AbstractClass 
    public abstract void doSomething();

Test.java

package BasicGrammar;

public class Test extends AbstractClass 
    @Override
    public void doSomething() 
        System.out.println("doSomething");
    


4.2 接口

  • 接口可以实现多“继承”
  • 接口只包含规范(抽象方法),接口就是规范。
  • 接口就是比抽象类还要抽象的抽象。
  • 约束和实现相分离:面向接口编程。

接口中的所有定义都是 public abstract(默认),可以不用写出来。接口中的变量都是常量,默认定义为 public abstract final

示例:
implements 翻译为 实现。
UserDao.java

package BasicGrammar;

public interface UserDao 
	int age= 18;
    void add(String name);

    void delete(String name);

    void update(String name);

    String query(String name);

TestImpl.java

package BasicGrammar;

public class TestImpl implements UserDao 
    @Override
    public void add(String name) 

    

    @Override
    public void delete(String name) 

    

    @Override
    public void update(String name) 

    

    @Override
    public String query(String name) 
        return null;
    

    public static void main(String[] args) 
        System.out.println(UserDao.age);
    

接口的作用:

  • 约束(对行为的约束)
  • 定义一些方法,让不同的人实现。
  • 接口不能被实例化,因为没有构造方法。
  • 可以实现多个接口,必须重写接口中的方法。
  • 不可以定义静态未实现的方法。

5. 成员变量与局部变量的区别有哪些

  • 从语法形式上看:成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数;成员变量可以被 public,private,static 等修饰符所修饰,而局部变量不能被访问控制修饰符及 static 所修饰;但是,成员变量和局部变量都能被 final 所修饰。
  • 从变量在内存中的存储方式来看:如果成员变量是使用static修饰的,那么这个成员变量是属于类的,如果没有使用static修饰,这个成员变量是属于实例的。而对象存在于堆内存,局部变量则存在于栈内存。
  • 从变量在内存中的生存时间上看:成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而自动消失。
  • 成员变量如果没有被赋初值:则会自动以类型的默认值而赋值(一种情况例外:被 final 修饰的成员变量也必须显式地赋值),而局部变量则不会自动赋值。


以上是关于Java基础 -- 静态方法和实例方法有何不同无参构造函数有什么作用import java和javax有什么区别成员变量与局部变量的区别有哪些(成员变量有默认赋值)的主要内容,如果未能解决你的问题,请参考以下文章

Java语法基础常见疑惑解答

请问java 单例类 与 静态类 有何不同?

java基础(杂记)

java基础- Collection和map

《java基础知识》Java static关键字以及Java静态变量和静态方法

JAVA基础学习-构造方法