【Java】每日一点Java小知识 --- day8

每日一点Java基础小知识 — day8

欢迎来到叮当猫学编程的Java基础小知识系列~在这里,你将会看到叮当猫每日关于Java的基础知识总结,欢迎大家的点赞关注喔

  1. 子类想要访问父类中的方法:

    • 子类构造函数调用父类构造函数用super
    • 子类重写父类方法后,若想调用父类中被重写的方法,用super
    • 未被重写的非私有方法可以直接调用
  2. 接口与抽象类的区别:

    • 接口的方法默认为public abstract,接口中的变量默认为public static final,在java8之前所有的方法不能有实现,抽象类中可以有非抽象方法
    • 一个类可以实现多个接口,但只能继承一个抽象类
    • 一个类实现接口,要实现该接口的所有抽象方法
    • 接口不能被实例化,可以声明,但是必须引用一个实现该接口的对象
    • 抽象类可以有构造方法,但是不能被直接通过new进行实例化,可以通过子类继承,实例化子类的时候抽象类也会被实例化。这其实用到了多态,向上转型。父类引用指向子类对象
    • 从设计层面来说,抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范
  3. 通俗的讲,就是基本数据类型和包装类之间的转换。如:int 类型和 Integer 类的转换。基本数据类型转化成包装类是装箱 (如: int --> Integer)、包装类转化成基本数据类型就是拆箱(如:Integer --> int)

    通过 装箱拆箱 操作,能够在值类型和引用类型中架起一做桥梁。换言之,可以轻松的实现值类型与引用类型的互相转换,装箱和拆箱能够统一考察系统,任何类型的值最终都可以按照对象进行处理

    装箱——值类型转换为引用类型;拆箱——引用类型转换为值类型;包装类就是引用类型,基本数据类型就是值类型

  4. 被static修饰的变量称为静态变量,静态变量属于整个类,而局部变量属于方法,只在该方法内有效,所以static不能修饰局部变量,即在方法中不能使用static来修饰变量,如:

    public class Test {
        public static void main(String args[]) {
    		static int z=2;  // error
        	System.out.println(x+y+z);
    	}
    }
    
  5. 运算符“>>”执行算术右移,它使用最高位填充移位后左侧的空位。右移的结果为:每移一位,第一个操作数被2除一次,移动的次数由第二个操作数确定。逻辑右移或叫无符号右移运算符“>>>“只对位进行操作,没有算术含义,它用0填充左侧的空位

    算术右移不改变原数的符号,而逻辑右移不能保证这点

  6. 线程安全的map:HashTableSynchronizedMapConcurrentHashMap

    Hashtable的方法都是synchrnized修饰的线程安全,ConcurrentHashMap并发容器,JDK7采用分段锁,JDK8采用CAS算法,线程安全,建议使用,Connections工具类提供了一个方法synchrnizedMap可以把Map同步,本质就是给每一个方法加上synchrnized关键字进行同步

  7. 题目:String s=null;

    下面哪个代码片段可能会抛出NullPointerException?

    A. if((s!=null)&(s.length()>0))
    B. if((s!=null)&&(s.length()>0))
    C. if((s==null)|(s.length()==0))
    D. if((s==null)||(s.length()==0))
    

    答案:AC

    s为null,因此只要调用了s.length()都会抛出空指针异常。因此这个题目就是考察if语句的后半部分会不会执行

    A,单个与操作的符号& 用在整数上是按位与,用在布尔型变量上跟&&功能类似,但是区别是无论前面是否为真,后面必定执行,因此抛出异常

    B,与操作,前半部分判断为假,后面不再执行

    C,这里跟 & 和&& 的区别类似,后面必定执行,因此抛出异常

    D,或语句,前面为真,整个结果必定为真,后面不执行

  8. 实现线程的方式有:

    • 继承Thread类,重现run()方法
    • 实现Runable接口,实现run()方法
    • 实现Callable接口,线程结束后有返回值
  9. HashSet 内部使用 Map 保存数据,即将 HashSet 的数据作为 Map 的 key 值保存,这也是 HashSet 中元素不能重复的原因。而 Map 中保存 key 值前,会去判断当前 Map 中是否含有该 key 对象,内部是先通过 key 的 hashCode,确定有相同的 hashCode 之后,再通过 equals 方法判断是否相同

  10. jsp中有四个域对象,从小到大分别为:

    • page域:在同一个jsp页面中数据有效
    • request域:在同一个请求中数据有效
    • session域:在同一个会话中数据有效
    • application域:在同一个网站中数据有效
  11. synchronized 关键字:用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这个段代码

    volatile:用来确保将变量的跟新操作通知到其他线程,当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。然而,在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比 synchronized关键字更轻量级的同步机制

    serialize:Java 对象序列化为二进制文件

    static关键字:static关键字可以修饰变量,方法,静态代码块

  12. 匿名内部类的创建格式为:

    new 父类构造器(参数列表)|实现接口(){
        //匿名内部类的类体实现
    }
    
    • 使用匿名内部类时,必须继承一个类或实现一个接口
    • 匿名内部类由于没有名字,因此不能定义构造函数(由于构造器的名字必须与类名相同,而匿名类没有类名,所以匿名类不能有构造器)
    • 匿名内部类中不能含有静态成员变量和静态方法
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值