JAVA基础

JAVA基础,第1张

JAVA基础

1## 标题
try { //执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容 }catch { //除非try里面执行代码发生了异常,否则这里的代码不会执行 }finally { //不管什么情况都会执行,包括try catch 里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally }

2## 标题 HashSet不能添加重复的元素,当调用add(Object)方法时候, 首先会调用Object的hashCode方法判hashCode是否已经存在,如不存在则直接插入元素;

如果已存在则调用Object对象的equals方法判断是否返回true, 如果为true则说明元素已经存在,如为false则插入元素

3## 标题父类的构造在子类之前,静态代码块的执行在构造函数之前,非静态代码块的执行在构造函数之后

因此执行顺序是:父类B静态代码块->父类B构造函数->父类B非静态代码块->子类A静态代码块->子类A构造函数->子类A非静态代码块

(1)++:自增分为前自增和后自增,就是自身加1。 例如: int a=2; int b=a++; //后自增,此时先把a的值赋值给b,b的值为2,然后a再加1,a此时的值为3; int c=++b; //前自增,此时先把b的值加1,b此时的值为3,然后赋值给c,c的值为3; (2)–:自减分为前自减和后自减,就是自身减1。 例如: int a=2; int b=a–; //后自减,此时先把a的值赋值给b,b的值为2,然后a再减1,a此时的值为1; int c=–b; //前自减,此时先把b的值减1,b此时的值为1,然后赋值给c,c的值为1;
++x 因为++在前,所以先加后用。
x++ 因为++在后,所以先用后加。

public static int getValue(int i) {
int result = 0;
switch (i) {
case 1:
result = result + i;
case 2: //i=2,进入case2
result = result + i * 2; //result = 4
case 3: //因为没有break,会继续向下执行,result= 4+2*3 = 10
result = result + i * 3;
}
return result;
}

4## 标题(1)在静态方法中可直接调用本类的静态方法,也可以使用【类名.静态方法名】调用其他类的静态方法。 (2)静态方法中可以调用实例方法,但是必须要new一个对象,不可以直接调用。 (3)静态方法不能用this来调用本类的类方法。 如果在static修饰的方法中使用this关键字,则这个关键字就无法指向合适的对象。 因为static修饰的方法是类方法,先于任何实例存在。static修饰的方法在类加载的时候就已经存在了,实例是在创建时才在内存中生成。而this关键字,总是指向当前调用该方法的对象。

识别合法的构造方法;
1:构造方法可以被重载,一个构造方法可以通过this关键字调用另一个构造方法,this语句必须位于构造方法的第一行;

  重载:方法的重载(overload):重载构成的条件:方法的名称相同,但参数类型或参数个数不同,才能构成方法的重载。  

2 当一个类中没有定义任何构造方法,Java将自动提供一个缺省构造方法;

3 子类通过super关键字调用父类的一个构造方法;

4 当子类的某个构造方法没有通过super关键字调用父类的构造方法,通过这个构造方法创建子类对象时,会自动先调用父类的缺省构造方法

5 构造方法不能被static、final、synchronized、abstract、native修饰,但可以被public、private、protected修饰;

6 构造方法不是类的成员方法;

7 构造方法不能被继承。

访问权限控制从最大权限到最小权限依次为:
public > protected> 包访问权限 > private
private 只能在同一个类下访问
protected 可以在同一个类中、同一个包下,还有子类中可以访问
包访问权限 可以在同一个类中和同一个包中可以访问 public 可以在同一个类中、同一个包中、以及子类中和全局范围内访问到

这题做了不知道多少遍了。 Java程序初始化顺序: 父类的静态代码块 子类的静态代码块 父类的普通代码块 父类的构造方法 子类的普通代码块 子类的构造方法

8## 标题Cloneable是标记型的接口,它们内部都没有方法和属性,实现 Cloneable来表示该对象能被克隆,能使用Object.clone()方法。如果没有实现 Cloneable的类对象调用clone()就会抛出CloneNotSupportedException。 Serializable是java.io包中定义的、用于实现Java类的序列化 *** 作而提供的一个语义级别的接口。Serializable序列化接口没有任何方法或者字段,只是用于标识可序列化的语义。实现了Serializable接口的类可以被ObjectOutputStream转换为字节流,同时也可以通过ObjectInputStream再将其解析为对象。例如,我们可以将序列化对象写入文件后,再次从文件中读取它并反序列化成对象,也就是说,可以使用表示对象及其数据的类型信息和字节在内存中重新创建对象。 Java多线程可以实现并发处理的任务,恰当地使用多线程技术可以有效提高程序的运行效率,降低用户等待时间。基于实现Runnable接口方式可以实现Java多线程。 Comparable接口可以强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 。实现此接口的对象列表(和数组)可以通过 Collections.sort (和 Arrays.sort )进行自动排序。实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。

1、Statement对象用于执行不带参数的简单SQL语句。 2、Prepared Statement 对象用于执行预编译SQL语句。 3、Callable Statement对象用于执行对存储过程的调用。

接口没有构造方法所以不能被实例化,抽象类有构造方法,但是不是用来实例化的,是用来初始化的

9## 标题 *** 作步骤就是先解码再编码
用new String(src,“GBK”)解码得到字符串
用getBytes(“UTF-8”)得到UTF8编码字节数组

List aList=newArrayList(); List bList=newlinkedList();
aList.add(0,obj); //0代表下标,obj代表对象。每个对象都插入到下标0的位置。
bList.add(0,obj);

此题考察的是ArrayList和linkedList的特征:同样是新增5000个对象,linkedLIst比ArrayList更快。    

10## 标题 ArrayList:增删慢,查询快。 由于是数据组实现,需要连续的内存空间,如果删除数组中间的值,为了保证下标的有效性,需要将后面的数据往前移,所以删除慢。 当插入A对象到B对象的前面时,需要将B对象和B对象之后的所有对象后移一位,再插入A对象。所以插入慢。 数组的大小是固定的,如果数组满了,需要重新分配空间,new一个新数组并copy旧数据之后再增加新数据,所以增加慢。 因为是连续内存空间,可以通过下标查询数据,所以查询快。
linkedList:增删快,查询慢。 由于是链表实现,当前节点的next指向下一个节点,prev指向上一个节点,不需要连续的内存空间,所以增删快。 因为不是连续内存空间,所以不能使用下标查询,只能通过next遍历,所以查询慢。

11## 标题public class A2{ public static void main(String[] args){ int[] a={2,4,6,8,3,6,9,12}; doSomething(a,0,a.length-1); for(int i=0;i<=a.length-1;i++) System.out.print(a[i]+" "); } private static void doSomething(int[] a,int start,int end){ if(start=x){ swap(a,i,j); i++; } } swap(a,i,end); return i; } private static void swap(int[] a,int i,int j) { int tmp=a[i]; a[i]=a[j]; a[j]=tmp; } }
//从大到小排序

java.exe是java虚拟机
javadoc.exe用来制作java文档
jdb.exe是java的调试器
javaprof,exe是剖析工具

java -Xmx2G -Xms1G -Xmn500M -Xss128k

-Xmx2G:设置JVM最大可用内存为2G。
-Xms1G:设置JVM促使内存为1G。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmn500M:设置年轻代大小为2G。整个JVM内存大小=年轻代大小 + 年老代大小 + 持久代大小。 -XX:SurvivorRatio=3:新生代中又会划分为 Eden 区,from Survivor、to Survivor 区。 其中 Eden 和 Survivor 区的比例默认是 8:1:1,当然也支持参数调整 -XX:SurvivorRatio=3的话就是3:1:1。 故该题为500*(3/5)=300M.

12## 标题   最近做到了很多次这样类似的题,在考虑一个问题,Java语言特性和面向对象的特点到底有什么区别,还是说有些题直接将两者划等号了?我在Java核心技术卷I 上看到的一个Java “白皮书” 的关键术语,分别是:(1)简单性;(2)面向对象;(3)分布式;(4)健壮性;(5)安全性;(6)体系结构中立;(7)可移植性;(8)解释型;(9)高性能 ;(10)多线程;(11)动态性    其中面向对象的特性则是:封装、多态、继承,有些时候还会多带一个抽象。    我的理解的话,Java白皮书应该是概括了Java语言的特性,但我对高效这个选项还是存在一点疑惑,我选了高效,希望有大佬来解惑。    如有错误,欢迎大家指出
   //java要在java虚拟机上运行,所以不高效

字符流:只有字符才能Reader和Writer,所以最后多以Reader和Writer结尾
字节流:字节只能input和output,所以以input和output结尾 同时流还分为:输入/输出流
处理流:对已存在的流的连接和封装,实现更为丰富的流数据处理,处理流的构造方法必需其他的流对象参数。如 BufferedReader
节点流:可以从某节点读数据或向某节点写数据的流。如 FileInputStream

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5638348.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存