java还不熟悉的一些知识

2021/9/16 11:08:19

本文主要是介绍java还不熟悉的一些知识,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 

访问控制修饰符

  • default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。

  • private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)

  • public : 对所有类可见。使用对象:类、接口、变量、方法

  • protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。

Java 字符串(String)

所有字符串变量都是String类的实例,String是java自带的类

 

Java final 关键字

在Java中,final关键字用于表示常量。它可以与变量,方法和类一起使用。

任何实体(变量,方法或类)一旦被声明final后,只能分配一次。也就是,

  • final变量不能用另一个值重新初始化

  • final方法不能被重写

  • final类不能被继承

 

Java instanceof 关键字

在Java中,instanceof关键字是二进制运算符。它用于检查对象是否是特定类的实例。

运算符还检查对象是否是实现接口的类的实例

result = objectName instanceof className;

左操作数是对象名,右操作数是类名。如果对象是类的实例,则结果为true;如果不是,则为false

 

Java 方法重写

继承是一个OOP面向对象属性,它使我们可以从现有的类(父类)派生一个新的类(子类),而子类继承超类的属性和方法。

现在,如果在父类和子类中都定义了相同的方法,则子类的方法将覆盖超类的方法。这称为方法覆盖(方法重写)。

Java 重写规则

  • 父类和子类都必须具有相同的方法名称,相同的返回类型和相同的参数列表。

  • 我们不能重写声明为final和static的方法。

  • 我们应该始终重写超类的抽象方法(将在以后的教程中进行讨论)。

Java 重写中的super关键字

在Java中执行重写时出现的一个常见问题是:

 我们可以在重写后访问超类的方法吗?

答案是肯定的。要从子类访问超类的方法,我们使用super关键字。

需要注意的是,Java中的构造函数不会被继承。因此,在Java中不存在诸如构造函数重写之类的问题。

重写抽象方法

在Java中,抽象类被创建为其他类的父类(基类)。而且,如果类包含抽象方法,则必须重写它。

 

抽象类和抽象方法

abstract class Animal {
   public void displayInfo() {
      System.out.println(“I am an animal.”);
   }

   abstract void makeSound();
}
 

抽象类即对某事物的逻辑抽象,也可以理解为对一群对象共性的提取,比如‘人’就是一个抽象的概念

抽象类是无法实例化的类,但是我们可以从中创建子类。我们可以创建子类的对象来访问抽象类的成员。

抽象方法声明了一个方法而没有实现

注意:只有一个抽象类才能包含抽象方法

 

抽象类无法实例化。要访问抽象类的成员,我们必须继承它。

在Java中,必须在子类中重写超类的抽象方法。这是因为子类继承了超类的抽象方法。

 因为我们的子类包含抽象方法,所以我们需要重写它们(子类不是抽象类,不能包含抽象方法,所以要重写)。

注意:如果子类也被声明为抽象,则不必强制重写抽象方法。

 

接口Interface与抽象类的关系

接口强调特定功能的实现,而抽象类强调所属关系。

接口成员变量默认为public static final,必须赋初值,不能被修改;其所有的成员方法都是public、abstract的。

抽象类中成员变量默认default,可在子类中被重新定义,也可被重新赋值;抽象方法被abstract修饰,不能被private、static、synchronized和native等修饰,必须以分号结尾,不带花括号

 

多态性的类型

在Java中,多态可以分为两种类型:

  • 运行时多态:方法重写

  • 编译时多态:方法重载,运算符重载

 

Java 封装

封装是面向对象编程的重要功能之一。封装是指将字段和方法绑定在单个类中。

将类中的类似字段和方法捆绑在一起也有助于隐藏数据。

 

非静态类(内部类)与静态类

为了创建非静态类Reptile的对象,我们使用了

Animal.Reptile reptile = animal.new Reptile()

为了创建静态类Mammal的对象,我们使用了

Animal.Mammal mammal = new Animal.Mammal()

Java 匿名类

在Java中,一个类可以包含另一个称为嵌套类的类。可以在不提供任何名称的情况下创建嵌套类。

没有任何名称的嵌套类(内部类)称为匿名类。

必须在另一个类中定义一个匿名类。因此,它也被称为匿名内部类

匿名类通常继承子类或实现接口。

 

单例模式

关于单例引用自:https://www.cnblogs.com/cielosun/p/6582333.html

一. 什么是单例模式

因程序需要,有时我们只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计。

二. 单例模式的特点

1. 单例模式只能有一个实例。

2. 单例类必须创建自己的唯一实例。

3. 单例类必须向其他对象提供这一实例。

三. 单例模式VS静态类

在知道了什么是单例模式后,我想你一定会想到静态类,“既然只使用一个对象,为何不干脆使用静态类?”,这里我会将单例模式和静态类进行一个比较。

1. 单例可以继承和被继承,方法可以被override,而静态方法不可以。

2. 静态方法中产生的对象会在执行后被释放,进而被GC清理,不会一直存在于内存中。

3. 静态类会在第一次运行时初始化,单例模式可以有其他的选择,即可以延迟加载。

4. 基于2, 3条,由于单例对象往往存在于DAO层(例如sessionFactory),如果反复的初始化和释放,则会占用很多资源,而使用单例模式将其常驻于内存可以更加节约资源。

5. 静态方法有更高的访问效率。

6. 单例模式很容易被测试。

 

枚举常量可以调用private构造函数

enum Size {

   //枚举常量,调用枚举构造函数
   SMALL("尺寸很小。"),
   MEDIUM("尺寸中等。"),
   LARGE("尺寸很大。"),
   EXTRALARGE("尺寸超大。");

   private final String pizzaSize;

   //私有枚举构造函数
   private Size(String pizzaSize) {
      this.pizzaSize = pizzaSize;
   }

我们将SMALL分配给枚举变量size。 然后,常量SMALL以字符串为参数调用构造函数Size,还可以重写toString方法修改默认的字符串值

Java 反射(Reflection)相当于监控

反射是java的一个特性,在Java中,反射允许我们在运行时检查和操作类、接口、构造函数、方法和字段

Java中有一个名为Class的类,该类在运行时保留有关对象和类的所有信息。

Class对象描述了特定类的属性。该对象用于执行反射。

Class c1 = Class.forName("Dog");//从类名返回Class类对象
Class c1 = d1.getClass();//从对象返回Class类对象

Class c1 = Dog.class;//使用.class后缀返回Class对象

创建Class对象后,我们可以使用这些对象执行反射

获取接口

我们可以使用Class的getInterfaces()方法来收集类实现的接口的信息。此方法返回一个接口数组。

//创建一个Dog类的对象
Dog d1 = new Dog();

//使用getClass()创建Class对象
Class obj = d1.getClass();

//查找由Dog实现的接口
Class[] objInterface = obj.getInterfaces();

该软件包java.lang.reflect提供了可用于操作类成员的类。例如,

  • 方法类 - 提供有关类中方法的信息,Method类,

    //使用getDeclaredMethod()获取所有方法
              Method[] methods = obj.getDeclaredMethods();
  • 字段类 - 提供有关类中字段的信息,Field类,

    Field field1 = obj.getField("type");//可以使用field1去访问事物类的字段
  • 构造函数类  - 提供有关类中构造函数的信息,Constructor类

    //使用getDeclaredConstructor()获取一个类中的所有构造函数
               Constructor[] constructors = obj.getDeclaredConstructors();

Java异常类型

异常层次结构还具有两个分支:RuntimeException和IOException。

运行时异常发生由于编程错误。它们也称为非检查异常。你可以这样想:“如果这是一个运行时异常,那就是你的错”

IOException也称为检查异常。它们由编译器在编译时检查,并提示程序员处理这些异常。比如尝试打开不存在的文件会导致 FileNotFoundException

 

throws 关键字 与. try...catch...finally

可能有几个方法会导致异常。为每种方法编写try...catch将是乏味的,并且代码将变得冗长且难以理解。

当您已检查了不希望在当前方法中捕获的异常(必须处理的异常)时,throws也很有用。

 

Java 注解(Annotations)

Java注解是我们程序源代码的元数据(有关数据的数据,即说明数据的信息)。

它们向编译器提供关于程序的附加信息,但不是程序本身的一部分。这些注解不会影响已编译程序的执行。

注解以@开头。

1.标记注解

标记注解不包含成员/元素。它仅用于标记声明。

@Override

2.单元素注解

单个元素注解仅包含一个元素。

@AnnotationName(value = "elementValue")或者
@AnnotationName("elementValue")

3.多元素注解

这些注解包含多个用逗号分隔的元素。

@AnnotationName(element1 = "value1", element2 = "value2")

Java 断言(Assert)

Java中的断言通过测试我们认为是正确的代码来帮助检测错误。

使用assert关键字进行断言。

其语法为:

assert condition;
assert condition : expression;
 

这里condition是一个布尔表达式,我们假定在程序执行时为真。

默认情况下,断言在运行时被禁用并被忽略。

为了启用断言,我们使用:

java -ea:arguments

为了对程序Main的所有类启用断言,

java -ea Main

只启用一个类,

java -ea:AnimalClass Main

这只允许在Main程序的AnimalClass中使用断言。

在包名称中启用断言

要对包com.animal及其子包启用断言

java -ea:com.animal... Main

 
 
 
 


这篇关于java还不熟悉的一些知识的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程