Java基础随记

  最近几天刷了一遍b站的狂神说java基础,虽然老师说要记录博客总结,但要是每个知识点都按部就班地从零去记录,实在是费时且意义不大呀。

  我自己的习惯还是中途记录下来了一些感觉有用的、豁然开朗的东西,所以这篇主要是记给自己做个记录。所以基本上没啥逻辑顺序,就东一个西一个的知识点吧。

左移和右移操作

结论:

左移1位,原数乘以2

右移1位,原数除以2.

比如:

0000 0001 是1

0000 0010 是2

0000 0100 是4

0000 1000 是8,可以看到整体左移一位,数是会翻倍的。

对于不那么友好的情况也一样的:

0000 0011是3

0000 0110是6。

  位操作是非常高效的操作了,左移1位的速度远远大于乘以2的速度。所以对于一个面试题目:把一个数乘以8,最快的方式就是左移3

  位操作还有很多其他高效用途(尤其对于搞ACM的人来说),这个仅仅算是最常用的方式之一。

运算顺序

  sys.out.println(a+b+””); 与 sys.out.println(””+a+b);结果不同。

  假如a是1,b是2,则前者是3,后者是12.

  这个也好理解,虽然在java中整数+字符串,会自动把整数变成字符串,然后直接相连。但在还没遇到字符串前,从左向右运算,整数自然是该怎么加怎么加了。

  单引号和双引号也不太一样,双引号是字符串,会默认转换其他;

  而单引号是个字符,会默认认为是ASCII值97.

        java.lang.String s2 = "a"+1+2;//s2=a12
        int s3 = 'a'+1+2; //s3=100

方法重载

方法重载的要求:

  1. 方法名必须相同
  2. 参数列表必须不同。(个数、类型、排列顺序)

  方法重载其实就是在类里写同名方法,同样的方法名,却可以定义不同的功能。我的理解就是入参的任何形式的不同,就可以构成重载。要注意的是,返回值类型可以相同或不同,但无关紧要。即:仅仅是返回值类型的不同,无法构成重载

可变参数

  在方法中传递多个参数,如多个整形,int... 来定义。这样可以接收多个整形参数,但可变参数一般都要放在最后,如果放在前面的话,难免会混淆其他参数。

static声明

  类中的两个方法,一个是public static void a(), 另一个是public void b(),

  则后者可以调用前者,但前者不可以调用后者。因为static修饰的方法a是和类一起加载的,是一直存在的。而没有static的方法b,需要类实例化创建之后,才存在于对象中

构造器

  其实就像C++里的构造函数,创建类的时候,会默认配置一个无参构造器。但也可以自己显示的定义有参构造器,如果定义了有参构造,就会覆盖调默认的构造器,所以也必须要顺带着定义无参构造器。即:一旦定义了有参构造,就得显示定义无参构造。

  还有一个常用快捷键 alt+insert,可以在类内补全出构造器。

继承

    子类继承,一般继承的就是父类的public方法,private是不会被继承的,所以子类用super.操作,也无法操作到父类的private。但是可以继承set和get方法来操作private变量。

  所有的类都默认继承object类。

  创建子类时,会先执行父类的构造器,再执行子类的构造器。如果父类中之定义了一个有参构造(说明他把默认的无参构造覆盖了,没有无参构造了),那么子类也没有无参构造了。所以再重复上面的结论:一般要是显示定义了有参构造——一般情况下得再手写一个无参构造。

  super()指父类的构造,this()指本类的构造。

  如果一个类的修饰符有final,就不能被继承了。

多态

父类引用指向子类对象 这就是多态。形式:父类 a = new 子类 

  假设Student继承Person,则可以这样定义:Person s = new Student(),这就是多态的典型定义方式。

  假设子类Student:1保留了父类的一些方法,2重写了父类的一些方法,3新增了一些自己的方法。则:Person s可以调用的方法有1和2——即自己原有的以及被子类重写的,无法调用子类独有的。

  多态是方法的多态,属性没有多态。

重写

  重写都是方法的重写,和属性无关。

  即子类继承了父类的方法,定义同样的方法名和同样的参数列表去重写了这个方法。重写之后,在多态的情况下(Person A = new Student()),父类调用被重写的方法,会展现子类的特性。

  没有被重写的方法,则还是以左边接收的类为准,维持原特性。

  重写只能重写public的非静态方法,即static修饰的方法就不能被子类重写了。

  重写的方法可以扩大但不能缩小修饰符的范围,如private->public;可以缩小但不能扩大抛出的异常,如Exception->ClassNotFoundException。

  在子类中,alt+insert就可以选择override自动生成啦。

静态代码块和匿名代码块

public class Person{

Static{System.out.println(“我是静态代码块,先执行”);}

{System.out.println(“我是匿名代码块,第二执行”);}

Public Person(){

System.out.println(“我构造方法,最后执行”);

}

}

  算是一个执行顺序的一个补充知识了,看来构造器也并不总是最先~

抽象类

  抽象类就像是模板,不能被new创建,不能被实例化,只能被子类继承然后实现它的方法。抽象类的所有方法,只要是继承了它的子类,都得实现——除非子类也是个抽象类,那就得等子类的子类去实现了....

  抽象类不如接口常用,因为接口可以多继承

接口  

  接口里就定义一些方法,等待着被其他类实现(implement)

  接口里定义的方法, 默认都是public abstract;定义变量,默认就是public static final,但一般不定义常量。

快捷键

  Ctrl alt+T 自动包裹某段代码
  alt+enter帮助看看一些红色波浪线的处理方法

posted @   JunanP  阅读(1)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示