java常用基础知识回忆1

1.java标识符以字母,下划线_,美元符号$开头,后面可以是任何字母、数字、美元符号或下划线。Java 中标识符是为方法、变量或其他用户定义项所定义的名称,不能是关键字.

2.泛型的创建是为了编译器检查出错误,只在编译阶段被处理成了普通类和方法,在运行阶段会被擦除,在处理泛型类型时,会有一个原始类型被自动提供,原始类型的名字就是擦除类型参数的泛型类型的名字.(如果没有jvm会默认为object类型)

3.CallableStatement继承自PreparedSatement,PreparedStatement继承自Statement

4.Arrays.asList(),将一个数组转化为一个List对象,这个方法会返回一个ArrayList类型的对象, 这个ArrayList类并非java.util.ArrayList类,而是Arrays类的静态内部类!用这个对象对列表进行添加删除更新操作,就会报UnsupportedOperationException异常。

  1)此方法只适用于对象数组比如String[],Integer[]

  2)进行了指向绑定,改变任何一方,其他都会改变

  3)对基本类型数组有bug,它会将整个数组放进list里

  4)不能用此list进行添加删除操作,里面父类添加,删除,方法就是抛出异常,只能用来遍历使用

5.每创建一次类都会分配一批内存区域(但类加载只有一次),静态成员属于类成员,在方法区(静态存储区:线程共享)分配内存

java7之前,方法区位于永久代(PermGen),永久代和堆相互隔离,永久代的大小在启动JVM时可以设置一个固定值,不可变,java7中,static变量从永久代移到堆中;
java8中,取消永久代,方法区存放于元空间(Metaspace),元空间仍然与堆不相连,但与堆共享物理内存,逻辑上可认为在堆中

7.stringBuffer是线程安全的,因为方法都是用sychronized修饰,且里面是用动态数组技术(数组长度随着内容而变化),stringBuffer对象指向不变

8.Hashtable 线程安全,不支持key和value为空,Hashmap 非线程安全,支持key和value为空,ConcurrentHashMap为线程安全的,key值不能重复,但value可以

9.在方法的参数引用传递上,由于String是不可变类,所以它传的是引用的拷贝.函数改变不改变原引用.

10.this(),super()默认放在第一行,且不能同时出现,因为this()里面默认有super()方法.

11.abstart不能和private,final,static混用,抽象方法必须在抽象类和接口中.

  1)private:修饰的方法,子类不能实现和继承

  2)final:用于方法前,不能被重写,用于类前不能被继承,

  3)static:因为abstart修饰的方法没有方法体,不能直接调用,修饰的类不能被创建

12.byte boolean(可能)占1字节 char short占两字节,int float占四字节,long double占8字节.

  1)float:为8位有效数字(3.14为三位有效数字),会将第九位四舍五入到第八位

  2)double:为16位有效数字,且小数默认为double类型的

  3)一个字节8位,8个字节64位,一个十进制树4位二进制你表示,也就是说8个字节为16位有效数字

13.byte,int,short在计算时,会先自动提升为int类型(32位),对于32位的处理器来说,这样JVM的速度就会更快,像高于32位的数据类型,也就是64位的数据,会分为两个32位进行执行.

14.sleep必须捕获异常,且sleep方法不释放锁,而wait,notify和notifyAll不需要捕获异常

  1)sleep方法为线程类的

  2)wait,notify和notifyAll方法为object的,因为还拿取对象锁和释放对象锁

15.

EJB容器:Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。
JNDI:(Java Naming & Directory Interface)JAVA命名目录服务。主要提供的功能是:提供一个目录系,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。
JMS:(Java Message Service)JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。
JTA:(Java Transaction API)JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。
JAF:(Java Action FrameWork)JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。
RMI/IIOP:(Remote Method Invocation /internet对象请求中介协议)他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是JAVA特有的。

16.当前用户上下文信息:session,appication:当前应用,pageContext:当前页面,request:当前请求

17.实现接口,访问修饰符不能缩小,返回值类型不能扩大,抛出异常类型也不能扩大,满足条件下,方法头(static final等其他修饰符)可以不完全一样.

18.堆区只存放类对象,线程共享;栈存放局部变量,基本类型变量区、执行环境上下文、操作指令区,线程不共享;class文件和静态数据放在方法区,线程共享.

19.final修饰引用类型变量(变量存储在堆区的),引用不变,但引用指向的地址对象的内容可变.

    1)修饰基础类型的确实是不可变的,但前提是修饰的是引用类型的变量

20.goto和const是保留字也是关键字,且false,true是编译器赋予特定含义的,但并不是关键字,且sizeof是c++的

21.面向过程比面向对象的性能好,但面向对象具有封装,继承和多态特性,所以易维护,易复用,易扩展,更容易设计出低耦合的系统.

  1)比如说c语言

22.类的加载包括:加载,验证,准备,解析,初始化:
  1)加载:生成Class对象作为方法区这个类的各种数据的访问入口.
  2)验证:为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求
  3)准备:正式为类变量分配内存并设置类变量默认初始值
  4)解析:解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程
  5)初始化:执行(构造)方法的类变量的赋值动作和静态语句块static{}中的语句,对类变量进行二次赋值.

23.ArrayList是通过数组实现的,可直接通过数组下标查询元素,所以查询快,而增删需要移动 后面的所有元素

24.LinkedList是通过链表实现的,查询得通过指针next()一个一个找,所以查询慢,而增删只需改下指针地址即可,所以增删块

25.区分两数组的访问速度还得分用什么方式访问,用迭代器差不多,用下标ArrayList快.

26.在java中原生类就指基本数据类型.

27.String类是不可变类指的是引用指向的内容不可变,但引用指向可变.

28.Aop:Aspected Oriented Programming:面向方面编程,将逻辑相同的模块分离出来(比如日志模块),降低代码耦合度

29.接口可以多继承的原因是,接口里的方法都是抽象方法,所以作为父类的话,不会产生调用冲突

30.java传参只有值传递(也就是把实参的值拷贝给形参,这个值可以是普通的数值,也可以是地址值)

31.所以String作为参数传递时,形参引用接收了实参引用的值,都指向了String对象,但由于String对象的不可变性,形式参数会进行(引用拷贝生成新的对象)用.

32.但当其他引用类型对象作为参数时,形参引用也接收了实参引用的值,也指向了该对象,所以在方法中对象的改变,会影响堆内存中原对象的改变.

33.计算机存储二进制数的存储格式为补码存储,-0的补码给-128表示了,解释如下

  1)在计算过程中需将数据先表示为反码,然后转补码进行计算

  2)计算过程中符号号也要进行计算的,如果溢出则截去最高位

例如:

  -127 - 1 = -128        10000001 + 11111111 = 10000000

  1 - 1 = 0                   00000001 + 11111111 = 00000000(溢出了,需要在写程序的时候注意的地方)

  1 + 127  = -128        00000001 + 01111111 = 10000000

  -1 -128  =  127        11111111 + 10000000 = 01111111     (溢出了,需要在写程序的时候注意的地方)

  注意啊:最小的数减1变成了最大的数;最大的数加一变成了最小的数。

34.但当拿到一个负数补码时,可以直接通过反补运算得到原码,因为补码的补码就是原码.

35.补码为1 0000 000时,原码为1 0000 0000,但是由于8位的原码无法表示,所以为原码为0000 0000,但由于0000 0000补码的原码也为0000 0000,比较浪费,所以用来表示-128(在java中的补码表示为1 0000 000).

36.服务器内部跳转不改变地址栏的地址.

37.Integer中只有Valueof()是把String类型转换成Integer对象类型.

38.StringBuffer类没有重写object的equals方法,所以它们比较的是StringBuffer对象地址

39.Synchronized用于线程间的数据共享,而ThreadLocal则用于线程间的数据隔离。

40.ThreadLocal继承自Object(没有实现任何接口)中定义了一个哈希表用于为每个线程都提供一个变量的副本,它作为Thread线程的局部变量,为线程提供了独立的数据进行修改.

原文地址:https://www.cnblogs.com/nyhhd/p/12540218.html

时间: 2024-08-26 04:22:41

java常用基础知识回忆1的相关文章

黑马程序员——Java集合基础知识之Collection

集合基础知识--Collection Java中集合框架由常用的Collection接口和Map接口组成,而Collection接口又有两个子接口,是List接口和Set接口,常用的集合框架由这三个类组成. List接口的功能方法 List的使用最为简单,创建集合,通过add方法添加元素,get方法获取元素,通过迭代器获取元素.List接口存放的数据无序的,添加速度快,但是查询速度慢,因为查询的时候必须遍历,每次都重头开始,效率较低.常用实现类有ArrayList,LinkedList. Lis

R语言常用基础知识

seq(from = 1, to = 1, by = ((to - from)/(length.out - 1)),    length.out = NULL, along.with = NULL, ...) 举例----------Examples----------seq(0, 1, length.out=11) seq(stats::rnorm(20)) #  seq(1, 9, by = 2)     #  seq(1, 9, by = pi)    #  seq(1, 6, by =

黑马程序员——Java集合基础知识之Map

Map概念 要同时存储两个元素Key和Value,他们之间有映射关系,每个键不能重复,每个键只能映射到一个值. 当数据之间存在映射关系的时候,考虑使用Map集合. Map常用方法 如果添加的键原来有值,后添加的值会覆盖前面的值,并返回之前的值.put会返回来先添加的值,后添加的值会覆盖原有的值. Map tm =new TreeMap(); tm.put (key, value);//MAP没有add tm.remove (key) ;//去除一个key和对应的value,若不存在key返回nu

什么才是java的基础知识?

近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都强调java初学者要先扎实自己的基础知识,那什么才是java的基础知识?又怎么样才算掌握了java的基础知识呢?这个问题还真值得仔细思考. 我做j2ee开发已经超过十载,作为过来人,心路历程估计和大家差不多.编码的前几年,很长一段时间觉得java简单,开发实现各种功能都很轻松,代码写起来根本不费劲(主要是因为写的代码都是一些功能业务逻辑).但同时自己心里明白,自己其实没有什么水平,自己这3,4年以来学懂的东西就那么多,其他人几个月就可以

java多线程基础知识

1.ThrTest.java 继承Thread类方式 public class ThrTest extends Thread { private String name; public ThrTest() { } public ThrTest(String name) { this.name = name; } public void run() { for (int i = 0; i < 5; i++) { System.out.println(name + "运行 " + i

SpringMVC常用基础知识

常用注解元素 @Controller 标注在Bean的类定义处 @RequestMapping 真正让Bean具备 Spring MVC Controller 功能的是 @RequestMapping 这个注解 @RequestMapping 可以标注在类定义处,将 Controller 和特定请求关联起来: 还可以标注在方法签名处,以便进一步对请求进行分流 配套的属性有: value 需要跳转的地址 method 基于RestFul的跳转参数,有RequestMethod.get post p

黑马程序员——java多线程基础知识1

多线程 进程是一个正在执行的程序. cpu在同时执行这些程序,其实是跳跃式的,做快速的切换,时间很短.一个进程可能存在多条路径.迅雷的多路径.每一个进行执行都有一个执行顺序,该顺序是一个执行路径,或这叫一个控制单元.每一个进程至少有一个线程,线程就是进程中的一个独立的控制单元,线程控制进程的执行.jvm启动的时候会有一个进程就叫做java,exe,该进程中至少有一个线程在控制Java程序的执行 ,而且该线程的执行代码在 主函数中.该线程称为主线程.虚拟机至少也有两个线程,一个主线程执行,另一个负

黑马程序员——Java多线程基础知识2

多线程协同 线程间的通讯:我们对资源的操作动作不同,比如说两个卡车一个拉煤一个装煤.但是他们共享了一个资源. 怎么样把这个资源拿出来?怎样把车装满?这个资源当然是一个类,他里面的组成元素就是对象!!现在我们就要有操作对象的思想了,我用对象把这车装满,现在一车装一个对象. 等待唤醒机制: 用的不是sleep是wait.flag标记,这是两人沟通的方式.其实每个标记就要做一次等待或者notify,判断wait,改值notify.线程池.notify唤醒里面的线程,按顺序唤醒.wait和notify必

Java 接口基础知识

一.Java接口基础知识 1, Java语言不支持一个类有多个直接的父类(多继承),但可以实现(implements)多个接口,间接的实现了多继承. 2, 与Java接口相关的设计模式: 1, 定制服务模式 设计精粒度的接口,每个Java接口代表相关的一组服务,通过继承来创建复合接口 2, 适配器模式 当每个系统之间接口不匹配时,用适配器来转换接口 3, 默认适配器模式 为接口提供简单的默认实现 4, 代理模式 为Java接口的实现类创建代理类,使用者通过代理来获得实现类的服务 5, 标识类型模