学习Java那点事
2021.3.17:
--------今天做的题:
/
https://baijiahao.baidu.com/s?id=1616462063971752365&wfr=spider&for=pc
/
里头有些答案跟编译器出来的结果不一样
1.当需要往ArrayList,HashMap中放东西时,像int,double这种内建类型是放不进去的,因为容器都是装object的,需要像Integer这种类型。
2.super.getClass.getName() 得到的依然是子类的类名哦,在这里super跟this是一样的,我也不知道为啥,以后再看看。
3.用Integer定义两个数然后用 == 比较 结果是true。用int定义就是false
4.关于String类型的 equals跟==:{{{{{
(==比较的是地址,同一个对象地址则相同。equals比较值)
String作为一个对象来使用
例子一:对象不同,内容相同,"=="返回false,equals返回true
`String s1 = new String("java");
String s2 = new String("java");
System.out.println(s1==s2); //false
System.out.println(s1.equals(s2)); //true
例子二:同一对象,"=="和equals结果相同
String s1 = new String("java");
String s2 = s1;
System.out.println(s1==s2); //true
System.out.println(s1.equals(s2)); //true
String作为一个基本类型来使用
如果值不相同,对象就不相同,所以"==" 和equals结果一样
String s1 = "java";
String s2 = "java";
System.out.println(s1==s2); //true
System.out.println(s1.equals(s2)); //true
}}}}}}
2021.3.18记的东西不见了我哭了
1.java (17^5) 符号是异或运算,转二进制,0异或1等于1,其他都是0;
**
2021.3.19
**
1.java中访问权限从大到小:
public>protected>默认(包访问权限)>private,因为protected除了可以被同一包访问,还可以被包外的子类所访问
2.InputStreamReader和OutputStreamWriter作用于字节,而FileReader和FileWriter作用于字符。
InputStreamReader是Reader的子类,将输入的字节流变为字符流,将一个字节流的输入对象变为字符流的输入对象
-
原子操作在线程中不需要加锁同步。
原子性:指该操作不能再继续划分为更小的操作。
Java中的原子操作包括:、除long和double之外的基本类型的赋值操作 、所有引用reference的赋值操作 、java.concurrent.Atomic.* 包中所有类的一切操作
①无论如何,Integer与new Integer不会相等。不会经历拆箱过程,
②两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为false
java在编译Integer i2 = 128的时候,被翻译成-> Integer i2 = Integer.valueOf(128);而valueOf()函数会对-128到127之间的数进行缓存
③两个都是new出来的,都为false
④int和integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比
1、abstract不能与final并列修饰同一个类 对的。
2、abstract类中不应该有private的成员 对的:
abstract类中可以有private 但是不应该有。
3、abstract方法必须在abstract类或接口中 对的:
若类中方法有abstract修饰的,该类必须abstract修改。接口方法默认public abstract。
4、static方法中能处理非static的属性 错误:
在JVM中static方法在静态区,静态区无法调用非静态区属性。
6.关于位非运算有公式: ~表示按位取反
-n = ~n + 1 → ~n = -n -1
7.
考虑使用map键值对。思想为:循环遍历所有数据,每次都将遍历过的数据put进map。循环时使用target-numbers[i]与map内的数据进行对比。
2021.3.20
1.java的垃圾回收机制。
java提供了一个系统级的线程,即垃圾回收器线程。用来对每一个分配出去的内存空间进行跟踪。当JVM空闲时,自动回收每块可能被回收的内存,GC是完全自动的,不能被强制执行。程序员最多只能用System.gc()来建议执行垃圾回收器回收内存,但是具体的回收时间,是不可知的。当对象的引用变量被赋值为null,可能被当成垃圾。
Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。
在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。
这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收。
堆大小 = 新生代 + 老年代。其中,堆的大小可以通过参数 –Xms、-Xmx 来指定。
java Thread中,run方法和start方法的区别。
run方法是线程内重写的一个方法,start一个线程后使得线程处于就绪状态,当jvm调用start方法后,一旦得到cpu时间片,线程启动会运行run。run函数是线程里面的一个函数不是多线程的。
run方法线程执行体.start方法开启多线程
如果子类构造器没有显示地调用超类的构造器,则将自动地调用超类默认(没有参数)的构造器。如果超类没有不带参数的构造器,并且在子类的构造器中有没有显示地调用超类的其他构造器,则Java编译器将报告错误。使用super调用构造器的语句必须是子类构造器的第一条语句。
switch case中,如果case不加break,在第一次匹配到case后下面的所有语句都会执行。
7.
对于-128到127之间的数字 Integer会进行自动装箱,所以a1==a2为true。但是b1 == b2会自动new对象,地址不同,所以为false。
c1c2是new了所以自然不同。d1d2应该上面说过了。
8.关于servlet核心控制器什么的关系。
9.
枚举语法定义的格式如下:
enum 枚举名 {枚举元素1,枚举元素2,……};
enum team { my , your = 9 , his , her = his + 3};
printf("%d %d %d %d\n",my , your , his , her);
没有指定值的枚举元素,第一个枚举成员的默认值为整型的 0。所以my为0。
对于已指定的值,后续枚举成员的值在前一个成员上加 1,以此类推。所以his为10。
题目已经指定:your为9,her = his + 3=13
2021.3.21
提取字符串中的每一个字符可以是:str.charAt(i)
打印数组用Arrays.toString(arr)
对于Object list 好像需要用 list.get([])这样子;