Java基础 -- 静态方法和实例方法有何不同无参构造函数有什么作用import java和javax有什么区别成员变量与局部变量的区别有哪些(成员变量有默认赋值)
Posted CodeJiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础 -- 静态方法和实例方法有何不同无参构造函数有什么作用import java和javax有什么区别成员变量与局部变量的区别有哪些(成员变量有默认赋值)相关的知识,希望对你有一定的参考价值。
1. 静态方法和实例方法有何不同
- 在外部调用静态方法时,可以使用”类名.方法名”的方式,也可以使用”对象名.方法名”的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。
- 静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制
为什么在一个静态方法内调用一个非静态成员为什么是非法的?
- 由于静态方法可以不通过对象进行调用,因此在静态方法里,不能调用其他非静态变量,也不可以访问非静态变量成员。
- 究其原因是因为类加载机制:有static关键字修饰,会先加载在内存中,且只执行一次。
2. 无参构造函数有什么作用
Java 程序在执行子类的构造方法之前,如果没有用 super()
来调用父类特定的构造方法,则会调用父类中“没有参数的构造方法”。因此,如果父类中只定义了有参数的构造方法,而在子类的构造方法中又没有用 super()
来调用父类中特定的构造方法,则编译时将发生错误,因为 Java 程序在父类中找不到没有参数的构造方法可供执行。解决办法是在父类里加上一个不做事且没有参数的构造方法。
3. import java和javax有什么区别
- 刚开始的时候 JavaAPI 所必需的包是 java 开头的包,javax 当时只是扩展 API 包来使用。然而随着时间的推移,javax 逐渐地扩展成为 Java API 的组成部分。但是,将扩展从 javax 包移动到 java 包确实太麻烦了,最终会破坏一堆现有的代码。因此,最终决定 javax 包将成为标准API的一部分。
- 所以,实际上java和javax没有区别。这都是一个名字。
4. 接口和抽象类
- 接口的方法默认是 public,所有方法在接口中不能有实现(Java 8 开始接口方法可以有默认实现,并且只可以用接口名调用),而抽象类可以有非抽象的方法。
Java 8 开始接口方法可以有默认实现
只可以用接口名调用
- 接口中除了static、final变量,不能有其他变量,而抽象类中则不一定。
一个类可以实现多个接口,但只能实现一个抽象类。接口自己本身可以通过extends关键字扩展多个接口。 - 接口方法默认修饰符是public,抽象方法可以有public、protected和default这些修饰符(抽象方法就是为了被重写所以不能使用private关键字修饰!)。
- 从设计层面来说,抽象是对类的抽象,是一种模板设计,而接口是对行为的抽象,是一种行为的规范。
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有什么区别成员变量与局部变量的区别有哪些(成员变量有默认赋值)的主要内容,如果未能解决你的问题,请参考以下文章