java打卡第一天-笔试题

一,abstract关键字:

abstract关键字表示的是抽象的意思,可以用来修饰类和方法。修饰的类我们称之为抽象类,修饰的方法我们称为抽象方法

二.abstract修饰类,抽象类:

public abstract class 类名{}

抽象类用来表示一些抽象的概念

抽象类的特点:

a.抽象类不能被实例化

b.抽象类中可以有属性,方法,构造方法,都是用来给子类继承

c.抽象类中的方法不一定全部都是抽象方法

三.abstract修饰方法,抽象方法(不需要实现,由子类来实现)

访问修饰符 abstract 返回值类型 方法名(参数列表);

抽象方法的特点:

a.抽象方法没有方法体

b.抽象方法必须出现在抽象类中

c.一个类继承抽象类之后必须实现里面的所有抽象方法

四.抽象类可以继承抽象类

java中数据类型分为基本数据类型和引用数据类型。基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载。

加载:将java类的字节码文件加载到机器内存中,并在内存中构建出java类的原型(类模板对象)

1、加载类时,java虚拟机加载步骤

(1)通过类的全名,获取类的二进制数据流

(2)解析类的二进制数据流为方法区内的数据结构(Java类模型)

(3)创建java.lang.Class类的实例,作为方法区这个类的各种数据的访问入口

每个类编译后产生一个Class对象,存储在.class文件中,JVM使用类加载器(Class Loader)来加载类的字节码文件(.class),类加载器实质上是一条类加载器链,一般的,我们只会用到一个原生的类加载器,它只加载Java API等可信类,通常只是在本地磁盘中加载,这些类一般就够我们使用了。如果我们需要从远程网络或数据库中下载.class字节码文件,那就需要我们来挂载额外的类加载器。

一般来说,类加载器是按照树形的层次结构组织的,每个加载器都有一个父类加载器。另外,每个类加载器都支持代理模式,即可以自己完成Java类的加载工作,也可以代理给其它类加载器。

类加载器的加载顺序有两种,一种是父类优先策略,一种是是自己优先策略,父类优先策略是比较一般的情况(如JDK采用的就是这种方式),在这种策略下,类在加载某个Java类之前,会尝试代理给其父类加载器,只有当父类加载器找不到时,才尝试自己去加载。自己优先的策略与父类优先相反,它会首先尝试子经济加载,找不到的时候才要父类加载器去加载,这种在web容器(如tomcat)中比较常见。

类什么时候初始化

1.创建类的实例,也就是new一个对象

2.访问某个类或接口的静态变量,或者对该静态变量赋值

3.调用类的静态方法

一、什么是阻塞队列
阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。
这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。

常见的有以下几种
(1)ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列(数组结构可配合指针实现一个环形队列)。
(2)LinkedBlockingQueue: 一个由链表结构组成的有界阻塞队列,而在未指明容量时,容量默认为Integer.MAX_VALUE。
(3)LinkedBlockingDeque: 使用双向队列实现的双端阻塞队列,双端意味着可以像普通队列一样FIFO(先进先出),可以以像栈一样FILO(先进后出)
(4)PriorityBlockingQueue: 一个支持优先级排序的无界阻塞队列,对元素没有要求,可以实现Comparable接口也可以提供Comparator来对队列中的元素进行比较,跟时间没有任何关系,仅仅是按照优先级取任务。
(5)DelayQueue:同PriorityBlockingQueue,也是二叉堆实现的优先级阻塞队列。要求元素都实现Delayed接口,通过执行时延从队列中提取任务,时间没到任务取不出来。
(6)SynchronousQueue: 一个不存储元素的阻塞队列,消费者线程调用take()方法的时候就会发生阻塞,直到有一个生产者线程生产了一个元素,消费者线程就可以拿到这个元素并返回;生产者线程调用put()方法的时候就会发生阻塞,直到有一个消费者线程消费了一个元素,生产者才会返回。

原文链接:https://blog.csdn.net/meihuai7538/article/details/104883129

  • ArrayBlockingQueue: 一个基于数组实现的有界阻塞队列,必须设置容量
  • LinkedBlockingQueue: 基于链表实现的阻塞队列,容量可以选择进行设置,不设置的话,将是一个无边界的阻塞队列
  • PriorityBlockingQueue: 一个无界的阻塞队列,使用的排序规则和PriorityQueue类似并提供了阻塞操作
  • LinkedBlockingDeque: 一个基于双端链表的双端阻塞队列,容量可以选择进行设置

问题描述 Java BlockingQueue 阻塞队列的take()和put()方法是线程安全的吗? 多线程下调用take()或者put()方法会出问题吗?

看了BlockingQueue的三个实现类, 发现对应的方法中都使用了锁, 所以不会出现线程安全问题

阻塞队列主要应用场景--‘生产者消费者’模型

阻塞队列元素不能为null,因为null值会作为队列为空时 poll和peek接口的返回值 。并且应该设置边界,如果没有指定容量大小,默认容量是Integer.MAX_VALUE

ConcurrentHashMap是线程安全的使用synchronized关键字

字符变量占位16bit

int占位32bit

类没有实例-需要静态修饰才可调用里面内容

Java文件类以抽象的方式代表文件名和目录路径名。该类主要用于文件和目录的创建、文件的查找和文件的删除等。

File对象代表磁盘中实际存在的文件和目录。

能够读写文件的是数据流(OutputStream和InputStream)

类的加载顺序
(1) 父类静态代码块(包括静态初始化块,静态属性,但不包括静态方法)
(2) 子类静态代码块(包括静态初始化块,静态属性,但不包括静态方法 )
(3) 父类非静态代码块( 包括非静态初始化块,非静态属性 )
(4) 父类构造函数
(5) 子类非静态代码块 ( 包括非静态初始化块,非静态属性 )
(6) 子类构造函数
其中:类中静态块按照声明顺序执行,并且(1)和(2)不需要调用new类实例的时候就执行了(意思就是在类加载到方法区的时候执行的)

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: public class ClockIn { public static void main(String[] args) { System.out.println("正在打卡中..."); System.out.println("打卡成功!"); } } ### 回答2: 好的,下面是一个简单的Java打卡代码的示例: ```java import java.util.Date; public class PunchCard { public static void main(String[] args) { punchIn(); // 上班打卡 punchOut(); // 下班打卡 } public static void punchIn() { Date currentTime = new Date(); System.out.println("上班打卡时间:" + currentTime); // 此处可以添加相关的打卡逻辑,比如将打卡时间记录到数据库中等 } public static void punchOut() { Date currentTime = new Date(); System.out.println("下班打卡时间:" + currentTime); // 此处可以添加相关的打卡逻辑,比如将打卡时间记录到数据库中等 } } ``` 上述代码定义了一个名为PunchCard的类,其中包含了punchIn和punchOut两个方法,分别用于上班和下班打卡。在每个方法中,我们使用Date类获取当前时间,并将其打印出来。在实际应用中,你可以根据需要自定义具体的打卡逻辑,比如将打卡时间记录到数据库中等操作。 希望以上代码对你有帮助! ### 回答3: 下面是一个简单的JAVA打卡代码示例: ```java import java.util.Scanner; import java.text.SimpleDateFormat; import java.util.Date; public class PunchCard { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入员工姓名:"); String name = scanner.nextLine(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date currentTime = new Date(); String punchTime = dateFormat.format(currentTime); System.out.println(name + "于" + punchTime + "打卡成功!"); } } ``` 这段代码首先使用Scanner类获取员工姓名输入,然后使用SimpleDateFormat类获取当前时间并格式化为"yyyy-MM-dd HH:mm:ss"形式的字符串。最后打印出员工姓名和打卡时间。 你可以将这段代码保存为PunchCard.java文件,在命令行中使用`javac PunchCard.java`命令编译,然后使用`java PunchCard`命令运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值