目录:
A. Java基础相关-1-字符串、类、泛型、==、equals等
B. TODO
2018年算是互联网的寒冬,一大波公司宣扬裁员,也确实裁掉了一部分,我慌了。像我们这种水平,半灌水响叮当,补Android也一年多了,耍耍哒哒的混了两年,哎!管它寒冬还是肺炎,都加油吧,坚持,过了这个风波,要好好锻炼,保持活力轻松的愉快的精神工作,学习,娱乐,生活。 我们自己也是要加油,逐渐反复重温加深Java基础知识,然后进阶深度,更重要的是要结合实践联系,联想项目反复加深。后期搞点开源实践项目来瞅瞅!!!
下面根据一些Java面试题(摘自网友的2019的总结篇一,后续也是会从各种面试题去实践验证),然后觉得一些较为难得不常见得,能够提升逼格的一些,其实还是有用的哟,你看那些框架,源码,很多用法你估计没看过吧。。。😳......
1. Java基础之 - == 、equals
package com.test.me;
/**
* 字符整数等的比较 == 、equals
* @author hl
*
*/
public class HelloEquals {
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer a = 127;
Integer b = 127;
Integer c = 129;
Integer d = 12;
// 最好用equals用来做值的比较
System.out.println("a=b ? " + (a == b)); // -128 - 127之内部的数据,采用的是原生数据类型int值的比较
System.out.println("a.equals(b) ? " + (a.equals(b)));
System.out.println("c=d ? " + (c == d)); // -128 - 127之外的数据是地址的比较
System.out.println("c.equals(d) ? " + (c.equals(d))); //内部是值得比较
// 字符串做值的比较更是要用equals
String e = "abc";
String f = e.substring(0, e.length() - 1) + "c"; // 一系列操作之后,将会产生新的字符串对象
String g = "abc"; // 同一个常量字符串,引用地址相同,值也相同
System.out.println("e=f ? " + (e == f));
System.out.println("e.equals(f) ? " + (e.equals(f)));
System.out.println("e=g ? " + (e == g));
System.out.println("e.equals(g) ? " + (e.equals(g)));
// Integer的equals实现, String的要相对复杂些,是循环字符的比较
// /**
// * Compares this object to the specified object. The result is
// * {@code true} if and only if the argument is not
// * {@code null} and is an {@code Integer} object that
// * contains the same {@code int} value as this object.
// *
// * @param obj the object to compare with.
// * @return {@code true} if the objects are the same;
// * {@code false} otherwise.
// */
// public boolean equals(Object obj) {
// if (obj instanceof Integer) {
// return value == ((Integer)obj).intValue();
// }
// return false;
// }
///< 结果
// a=b ? true
// a.equals(b) ? true
// c=d ? false
// c.equals(d) ? false
// e=f ? false
// e.equals(f) ? true
// e=g ? true
// e.equals(g) ? true
// 后续就需要关注jvm堆栈等知识了
}
}
**2. **Java基础之 - 字符串相关
package com.test.me;
/**
* 字符串相关
* @author hl
*
*/
public class HelloStringType {
public static void main(String[] args) {
// System.identityHashCode能打印真实内存地址,而hashcode可以重写,所以不一定代表内存地址
String a = "abc";
System.out.println(System.identityHashCode(a));
a += "d";
System.out.println(System.identityHashCode(a));
StringBuffer sb = new StringBuffer("ff");
System.out.println(System.identityHashCode(sb));
sb = sb.append("d");
System.out.println(System.identityHashCode(sb));
// 这里简单验证下String每次操作都会产生新的内存,效率低,浪费内存;建议采用StringBuffer
// StringBuffer线程安全,StringBuilder线程不安全
}
}
3. Java基础之 - 类相关
package com.test.me;
/**
* 类相关
* @author hl
*
*/
public class HelloClass {
static int a = 2;
int c = 3;
/**
* 静态内部类
* @des 外部类的非静态成员变量不能直接访问
*/
static class Sb{
void ff(){
System.out.println(a);
//System.out.println(c); // 外部类的非静态成员变量不能直接访问
}
}
/**
* 非静态内部类
* @des 非静态内部类不能定义静态方法或者静态成员变量
*/
class Sb2{
int g = 2;
//static int w = 2;
void gg() {
// 局部内部类
class Gha{
int hhah = 2;
}
Gha a = new Gha();
}
// /**
// * 非静态内部类不能定义静态方法或者静态成员变量
// */
// static void ww() {
//
// }
}
/**
* 匿名内部类可以采用接口的方式创建并返回,另外也可以有匿名子类(创建父类,重写父类的方法)
* @des I think. 对独立性比较强的方法,而且单一特别的处理可以考虑采用这种方式,没有必要单独提出来做一个方法实现
* @return
*/
public InnerInterface test2()
{
return new InnerInterface() {
String a;
@Override
public void printA() {
System.out.println(a);
}
};
}
static class Parent{
public static void testa() {
System.out.println("父亲");
}
}
static class Child extends Parent{
public static void testa() {
System.out.println("孩纸");
}
}
public static void main(String[] args) {
// 接口不能直接创建对象,可以以匿名对象的方式创建!
// 接口内部可以定义非私有变量和静态变量
InnerInterface intf = new InnerInterface() {
@Override
public void printA() {
// TODO Auto-generated method stub
}
};
// 成员变量的默认修饰符为:public static final
System.out.println("a=" + InnerInterface.a);
System.out.println("b=" + InnerInterface.b);
// 子类可以继承父类的静态成员和方法,但是不能重写。看如下示例...
Child child = new Child();
Parent parnet = child; // 此时会隐形转换为父类对象,只会拥有父类的属性和方法;对象还是一个对象,对象地址没有变化
child.testa();
parnet.testa();
System.out.println(System.identityHashCode(child));
System.out.println(System.identityHashCode(parnet));
// 结果:
// a=2
// b=2
// 孩纸
// 父亲
// 366712642
// 366712642
}
}
package com.test.me;
public interface InnerInterface {
// 成员变量的默认修饰符为:public static final
// 所以下面两种都是一样的效果
int a = 2;
static int b = 2;
void printA();
}
**4. **Java基础之 - 泛型类型 - 困扰多年的Java泛型 extends T> super T>,终于搞清楚了!
package com.test.me;
/**
* 泛相关 - extends 、 super
* @extends 上下界、像list就很有参考和学习价值
* @author Administrator
*
*/
class HelloGeneric{
/**
* 泛型类型
* @des 可以利用extends、super来限定上下界
* @author hl
*
* @param <T>
*/
public class Generic<T> {
private T item;
public Generic(T t) {
this.item = t;
}
public T get() {
return item;
}
public void set(T item) {
this.item = item;
}
}
class Gradpa{
Gradpa(){
//System.out.println("爷爷!");
}
public void sayNo() {
System.out.println("sayNo Gradpa!");
}
}
class Father extends Gradpa{
Father(){
//System.out.println("父亲!");
}
public void sayNo() {
System.out.println("sayNo Father!");
}
}
class Child extends Father{
Child(){
//System.out.println("孩纸!");
}
public void sayNo() {
System.out.println("sayNo纸!");
}
}
private void CloseSb() {
// https://my.oschina.net/u/3990817/blog/3055968
// ? extends Father使得我们可以装入Child类型,否则无法直接转化
Generic<? extends Father> hgr = new Generic<Child>(new Child());
Father fa = hgr.get();
System.out.println(fa);
Child cld = (Child) hgr.get();
cld.sayNo();
// 不能存,只能取
//hgr.set(new Child());
// super就限定了只能是Father类以及父类
// 不影响往里存,但往外取只能放在Object对象里,也可以强转滴
Generic<? super Father> hgrsf = new Generic<Father>(new Father());
Generic<? super Father> hgrs = new Generic<Gradpa>(new Gradpa());
//HelloGeneric<? super Father> hgrsc = new HelloGeneric<Child>(new Child());
System.out.println(hgrsf);
System.out.println(hgrs);
Gradpa fr = (Gradpa) hgrsf.get();
fr.sayNo();
hgrsf.set(new Father());
fr = (Gradpa) hgrsf.get();
Gradpa gp = (Gradpa) hgrs.get();
gp.sayNo();
hgrs.set(new Father());
gp = (Gradpa) hgrs.get();
}
public static void main(String[] args) {
new HelloGeneric().CloseSb();
}
}
不知不觉,以及五点多了。。。休息哈。。过两天要上班了。。。疫情严重,改为在家办公。。。腰疼,缺乏坐姿和锻炼。。。😳😳😳😳😳😳😳
希望疫情赶快过去,大家都相安无事!自己也加油准备。。。多刷题。。。Leecode也打算连续不间断开始了....
网友评论