📂java
🔖java
2024-05-15 15:26阅读: 14评论: 0推荐: 0

java刷题提后感——tobecontinue

  很多,而且感觉很难归纳。各分类之间是可以交叉的。该随笔更像是做题的时候可以拿来参照加强印象的,不要直接背该随笔内容……记不住的。小册子这种东西的定位?(感觉大家都知道,但还是说一下)

  JAVAC命令

    参考链接:第1期:抛开IDE,了解一下javac如何编译 - 知乎 (zhihu.com)

    javac是将java中的编译源代码的命令工具,将.java文件编译成 .class 文件;(关于.class:java中class文件的意义是什么?_tomcat7.0的文件夹请解释classes的作用。-CSDN博客java程序如何执行(原理)_ja执行原理-CSDN博客

    如果想要更深入了解,可以去看看javac文档爪哇 --- javac (oracle.com)

    大致总结一下:javac 参数是java文件(加后缀)并且生成了class文件,java的参数是main函数所在的类的名字,它自己会去找class文件。如果java文件里面加上了包名,那么“java 参数” 这一步的参数就需要加上包名(

java com.imshuai.javalinux.HelloWorld

),而此时,java会从class path(默认当前)去包名对应的目录寻找class文件,所以需要建立一个和包名一样的目录,从class path这里建立。如果嫌麻烦,那么就可以使用-d参数,id指定了生成class文件的根目录,然后会根据class的包路径创建子目录。仔细看这个代码:  

    如果是编译两个有依赖关系的java文件,那么可以直接这么写,不用在意依赖顺序:

javac -d . HelloWorld.java HelloService.java 

依赖

    使用通配符的那个例子很喜欢。

    如果将java文件和class文件分成两个目录(比如说java在src,class在target),那么一种是进入target里面使用“java 参数”,另一种是使用类路径:

java -cp target com.imshuai.javalinux.HelloWorld

    类路径是jre搜索用户级class文件或其他资源的路径。

     上面的可能有点难以理解,其实就是 javac -cp lib/*  -d target  java文件。就是加上了-cp参数。

     使用列表文件可以不受参数字数限制。

 

    

 

 

 

  JAVA基础

     java程序的种类

    1.Application:Java应用程序,是可以由Java解释器直接运行的程序。

    2.Applet:即Java小应用程序,是可随网页下载到客户端由浏览器解释执行的Java程序。
    3.Servlet:Java服务器端小程序,由Web服务器(容器)中配置运行的Java程序。
    Appletviewer.exe可利用java.exe选项运行.jar文件,Appletviewer是运行applet的, applet 不用main方法,继承applet类即可。

    JAR 文件就是 Java Archive File,顾名思义,它的应用是与 Java 息息相关的,是 Java 的一种文档格式。 JAR 文件非常类似 ZIP 文件——准确的说,它就是 ZIP 文件,所以叫它文件包。 JAR 文件与 ZIP 文件唯一的区别就是在 JAR 文件的内容中,包含了一个 META-INF/MANIFEST.MF 文件,这个文件是在生成 JAR 文件的时候自动创建的。 JAR 文件格式以流行的 ZIP 文件格式为基础。与 ZIP 文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。在 JAR 中包含特殊的文件,如 manifests 和部署描述符,用来指示工具如何处理特定的 JAR。

 

     关于Applet:

       做到的题目是:在 applet 的方法中 , 可关闭小应用程序并释放其占用资源的是( ) 答案是destory()      

       Applet 类是浏览器类库中最为重要的类,同时也是所有 JAVA 小应用程序的基本类。 一个 Applet 应用程序从开始运行到结束时所经历的过程被称为 Applet 的生命周期。 Applet 的生命周期涉及 init() 、 start() 、 stop() 和 destroy() 四种方法,这 4 种方法都是 Applet 类的成员,可以继承这些方法,也可以重写这些方法,覆盖原来定义的这些方法。除此之外,为了在 Applet 程序中实现输出功能,每个 Applet 程序中还需要重载 paint() 方法:

       1、  public void init()

        init()方法是 Applet 运行的起点。当启动 Applet 程序时,系统首先调用此方法,以执行初始化任务。

       2、  public void start()

       start()方法是表明 Applet 程序开始执行的方法。当含有此 Applet 程序的 Web 页被再次访问时调用此方法。因此,如果每次访问 Web 页都需要执行一些操作的话,就需要在 Applet 程序中重载该方法。在 Applet 程序中,系统总是先调用 init() 方法,后调用 start() 方法。

       3、  public void stop()

       stop()方法使 Applet 停止执行,当含有该 Applet 的 Web 页被其他页代替时也要调用该方法。

       4、  public void destroy()

       destroy()方法收回 Applet 程序的所有资源,即释放已分配给它的所有资源。在 Applet 程序中,系统总是先调用 stop() 方法,后调用 destroy() 方法。

       5、  paint(Graphics g)

       paint(Graphics g)方法可以使 Applet 程序在屏幕上显示某些信息,如文字、色彩、背景或图像等。参数 g 是 Graphics 类的一个对象实例,实际上可以把 g 理解为一个画笔。对象 g 中包含了许多绘制方法,如 drawstring() 方法就是输出字符串。

     super关键字:

     

1. 不考虑反射机制,一个子类显式调用父类的构造器必须用super关键字。

注解:super

一.super关键字作用

1:主要存在于子类方法中,用于指向子类对象中父类对象。

2:访问父类的属性

3:访问父类的函数

4:访问父类的构造函数

二.super注意的地方

this和super很像,this指向的是当前对象的调用,super指向的是当前调用对象的父类。类加载完毕,创建对象,父类的构造方***被调用(默认自动无参),然后执行子类相应构造创建了一个子类对象,该子类对象还包含了一个父类对象。该父类对象在子类对象内部。this

 super只能在有对象的前提下使用,不能在静态上下文使用。

三.super关键字的使用

1.子类的构造函数默认第一行会默认调用父类无参的构造函数,隐式语句super();

例子:

son(int y){

//super();隐式语句

This.y=x+y;

System.out.println(“这是子类的有参构造”);

}

2.子类显式调用父类构造函数

在子类构造函数第一行通过super关键字调用父类任何构造函数。如果显式调用父类构造函数,编译器自动添加的调用父类无参数的构造就消失。构造函数间的调用只能放在第一行,只能调用一次。super()和this()不能同时存在构造函数第一行。

例子:

son(int y){

super(y);

This.y=x+y;

System.out.println(“这是子类的有参构造”);

}

四.super思考

如果开发者自定义了一个类,没有显示的进行类的继承,那么该类中成员函数是否可以使用super关健健字?

可以使用,继承了Object类,Object类是所有类的父类。

class Demo7 {

         public  void print(){

                   System.out.println(super.toString());

         }       

public static  void main(String[] args){

                  new Demo7().print();

                   System.out.println();

            }

}
    (嗯,如果重写了,那么就需要使用super)

 

     java访问权限:

      public>protected>default>private

      public可以被当前类,子类,包,其他包,访问,

      protected 可以被当前类,子类,包访问
      default可以被可以被当前类,包内访问;
      private只能被当前类访问
      补充default和 friendly权限相同,只是在java中没有friendly说法

   java编译器优化:  

    hotspot中 编译时"tao"+"bao"将直接变成"taobao",b+c则不会优化,因为不知道在之前的步骤中bc会不会发生改变,而针对b+c则是用语法糖,新建一个StringBuilder来处理。

    字符串在java中存储在字符串常量区中, 同一份字符串常量在内存中只有一份,因此是同一地址。
    这个是例题。答案是true false。

 

  

     我感觉最上面的回答最好了。

 

     关于%:

      这种我都是直接用数轴的,我不知道别人怎么做。

       答案是-2。

     关于类型转换: 

      JVM内存配置参数:   

      关于这个,由于又做到了一道题,所以扩展一下,建议粗读。

      java中栈内存与堆内存(JVM内存模型) - 永不停转 - 博客园 (cnblogs.com)

      Java中堆内存和栈内存详解 - 蛊惑Into - 博客园 (cnblogs.com)

      Java中堆内存和栈内存详解 - 全球顶尖骇客 - 博客园 (cnblogs.com)

 (图可以自己找一下)

     题目中涉及到了另一个概念,叫做元数据,eden : from : to =8:1:1,用于新生代垃圾回收。 元数据区是用来替换永久代的,大概那个意思。 引入元数据区的意义: JDK8引入了一个新的native的内存区块,Metaspace(也就是题主所说的“元数据”区域)。也就是说,之后你在调优或者调查JVM问题的时候就不用和PermGen区域打交道了,也不会有java.lang.OutOfMemoryError: PermGen 这种内存不足的问题来骚扰你。元数据是替代方法去永久代的。

 

 

       关于数据类型:

     JAVA反射:

        参考链接:Java反射机制-十分钟搞懂 - 知乎 (zhihu.com)    

 

 

     java多态:

public class Father {
    public void say(){
        System.out.println("father");
    }
    public static void action(){
        System.out.println("爸爸打儿子!");
    }
}
public class Son extends Father{
    public void say() {
        System.out.println("son");

    }
   public static void action(){
        System.out.println("打打!");
    }

    public static void main(String[] args) {
        Father f=new Son();
        f.say();
        f.action();
    }

}
输出:son
           爸爸打儿子!
当调用say方法执行的是Son的方法,也就是重写的say方法
而当调用action方法时,执行的是father的方法。
普通方法,运用的是动态单分配,是根据new的类型确定对象,从而确定调用的方法;
静态方法,运用的是静态多分派,即根据静态类型确定对象,因此不是根据new的类型确定调用的方法

 

     java继承:

 构造函数只能被调用,不能被继承。子类默认调用父类无参构造器,若父类没有无参构造器,子类需要用super()调用父类有参构造器,且super()位于子类构造器的第一行。构造函数不能被继承,构造方法只能被显式或隐式的调用。

      

     java静态:

       (这个知识点一般是考语句执行顺序,代码块就是{},会快过普通代码,静态变量和静态代码块执行顺序看代码顺序)

       静态变量只能在类主体中定义,不能在方法中定义,这个要注意,以下是例题。

     (仍然觉得2018离我很近)

    

         

     正则表达式:

       例题如下:

    

     杂项:

    javac.exe是编译功能javaCompiler java.exe是执行程序,用于执行编译好的.class文件 javadoc.exe用来制作java文档 jdb.exe是java的调试器 javaprof.exe是剖析工具

     (A和D纠结了很久,因为导入不就是在类上面导入吗,有说一定要第一行吗)

     这个是链接:由一次异常引发的思考:为什么在自己编写的Java代码中包名不能以"java."开头? - 简书 (jianshu.com)

     jdk1.8中a选项正确。b选项中hashmap底层是数组+链表。

      关于重载:

 一个汉字等于一个字符   字符 是char 
一个汉字也等于二个字节,字节 是byte。

 

    

  java函数   

     答案是false false true 。(第二个是false在java编译器优化有讲)     

     使用ceil和floor的时候,符号不变,类型不变。

     很常考,例题:

(instanceof是二元运算符,放在这里是因为我总是错认为是函数)

 

      关于while和switch

这个题主要考while()中表达式的判断,在C语言中除了0的int值都会被认为是true,而java中没有这个机制,必须是boolean类型的。

switch支持 int及以下(char, short, byte),String, Enum

  Java多线程

     多线程一共有三种实现方式
    方式1:继承Thread类,并重写run()方法
    方式2:实现Runnable接口,实现run()方法
    方式3:实现Callable接口,线程结束后可以有返回值,但是该方式是依赖于线程池的。

    参考链接:史上最全JAVA多线程文档 - 从入门到精通 - 知乎 (zhihu.com)
    

    关于多线程中变量声明方式问题:

    程序在多线程竞争情况下读到不正确的值需要保证内存可见性,即当一个线程修改了volatile修饰的变量的值,volatile会保证新值立即同步到主内存,以及每次使用前立即从主内存读取。

    synchronized可以修饰方法、代码块或对象,并不修饰变量。

    static修饰的变量属于类,线程在使用这个属性的时候是从类中复制拷贝一份到线程工作内存中的,如果修改线程内存中的值之后再写回到原先的位置,就会有线程安全问题。用static修饰的变量可见性是无法确保的。

    参考链接:多线程篇-线程安全-原子性、可见性、有序性解析 - 知乎 (zhihu.com)

    例题:  

     (想出现别的答案,就让主线程等待至少1秒)又比如:

 

    (想了想还是放这里了,其实应该放在jvm内存配置)

      java运行时内存分为“线程共享”和“线程私有”两部分,私有:java虚拟机栈,程序计数器,本地方法栈 共享:java堆,方法区

      

  Java数据结构相关: 

     List

 

       DK5之后提供的自动拆箱和自动装箱实现了将基本数据类型存入collection类型的集合(ArrayList,LinkedList)。例如题目中向ArrayList存入了基本类型0,int类型会自动装箱变为Integer类型存入集合中,使编译正常通过。

          将list1的引用赋值给了list2,那么list1和list2都将指向同一个堆内存空间。instanceof关键字在Java中用于判断一个对象是否属于某个特定类的实例,并且返回boolean类型的返回值。显然,list1.get(0)和list2.get(0)都属于Integer的实例。答案选择B。

       (关于这个instanceof,判定的目标是可以和参数类型转换的,可以是向上转型也可以是向下转型。     

         网友给出的答案是:源码是这么描述的:ArrayList 继承了 AbstractList, 其中AbstractList 中有个modCount 代表了集合修改的次数。在ArrayList的iterator方法中会判断 expectedModCount与 modCount是否相等,如果相等继续执行,不相等报错,只有iterator的remove方***在调用自身的remove之后让 expectedModCount与modCount再相等,所以是安全的。

 Set 不能有重复的元素,且是无序的,要有空值也就只能有一个。因为它不允许重复。 L ist 可以有重复元素,且是有序的,要有空值也可以有多个,因为它可重复。(但是注意以下,treeset是有序不重复,这里应该是指向一整个set)

     StringBuffer

         StringBuffer s = new StringBuffer(x);  x为初始化容量长度
        s.append("Y"); "Y"表示长度为y的字符串
        length始终返回当前长度即y;
        对于s.capacity():
        1.当y<x时,值为x
        以下情况,容器容量需要扩展
        2.当x<y<2*x+2时,值为 2*x+2
        3.当y>2*x+2时,值为y


     HashMap和HahsTable:

 

 

  JDBC: 

       statement是Java 执行数据库操作的一个重要接口,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句。

  

  Java并发:

      并发容器:支持多线程环境下的高效并发操作而设计的。

      参考链接:ConcurrentHashMap和CopyOnWriteArrayList——并发Map和List_concurrenthashmap 转list-CSDN博客

      CopyOnWriteArrayList适用于写少读多的并发场景 B,ReadWriteLock即为读写锁,他要求写与写之间互斥,读与写之间互斥,    读与读之间可以并发执行。在读多写少的情况下可以提高效率 C,ConcurrentHashMap是同步的HashMap,读写都加锁 D,volatile只保证多线程操作的可见性,不保证原子性 

   JAVA异常

      Java语言中的异常处理包括声明异常、抛出异常、捕获异常和处理异常四个环节。 throw用于抛出异常。 throws关键字可以在方法上声明该方法要抛出的异常,然后在方法内部通过throw抛出异常对象。 try是用于检测被包住的语句块是否出现异常,如果有异常,则捕获异常,并执行catch语句。 cacth用来处理异常,finally语句块是不管有没有出现异常都要执行的内容。

      try也可以抛出异常,比如说try里面的try块。try里抛出的异常会在被catch住的。

       D选项中不是return之前,是return执行完成之前,return表达式的结果会暂时保存起来,不会被改变,同样的如果catch有return也是这样的。

     我记得b肯定会抛出异常,但我有点犹豫是不是,看英文肯定是,但是我记得应该不是这个异常,所以错了。

    分母为0 为运行时异常,jvm帮我们捕获,无需代码里面显式捕获

     throw如果和finally结合,必须是在try/catch/finally组合块中。

  JAVA内部类:  

 

     

   JAVA抽象类和抽象方法(附上接口):

  

 (吐槽,改来改去的)

      抽象类是可以实现接口的,而且抽象类也可以继承自抽象类。

      抽象类必须有abstract class修饰。

      例题:

       解释:

       a选项是单继承多接口。该题目常考。

     注意看时间,是jdk1.7,d选项中1.8后的接口可以有具体方法,不过要么是static要么是default修饰。

  JAVAio流:

        面向字符的输入流类型是Reader的子类:       

 

        面向字符的输出流都是类Writer的子类:

  

       对应的,out就是java.io.OutputStream

    

       

  JAVAWEB:

     servlet的生命周期:

    (Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。)

    在初始化阶段中加一个:“加载servlet类及.class对应的数据”

 

      socket编程:     

      一些类: 

       (沧桑)

      

 

  J2EE:

 

  JAVA容器:  

 

  补充:编译原理

      因为刷到了所以还是单独列出一个板块,但是我不想学。

      关于循环优化的。编译原理之代码优化_代码优化的四个层次-CSDN博客

Microsoft PowerPoint - ch7 [Compatibility Mode] (ustc.edu.cn)

to be continue(让我消化一下).

      还有18*5=90道题需要归纳,明天吧,先去写别的了(写自05-21

本文作者:程序计算机人

本文链接:https://www.cnblogs.com/clina/p/18193548

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   程序计算机人  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 Lions Pride Audio artist
  2. 2 Salty Sailor David Arkenstone
  3. 3 Stonefire David Arkenstone
Salty Sailor - David Arkenstone
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

Not available