笔试题目-纯java篇

java中方法通常采用驼峰命名法:首字符小写,后面每个单词首字母大写。
类名各个单词首字母都大写


关键字

  1. 访问修饰符: 要使某个类能被同一个包中的其他类访问,但不能被这个包以外的类访问--用default(即什么也不用)图片说明
    default和protected的区别是:
    前者只要是外部包,就不允许访问。
    后者只要是子类就允许访问,即使子类位于外部包。

  2. try语句块

    public abstract class Test {
     public static void main(String[] args) {
         System.out.println(beforeFinally());
     }
    
     public static int beforeFinally(){
         int a = 0;
         try{
             a = 1;
             return a;
         }finally{
             a = 2;//若在此返回2,这最终会输出2.
         }
     }
    }
    output:
    1

    实际过程是这样的:当程序执行到try{}语句中的return方法时,它会干这么一件事,将要返回的结果存储到一个临时栈中,然后程序不会立即返回,而是去执行finally{}中的程序, 在执行a = 2时,程序仅仅是覆盖了a的值,但不会去更新临时栈中的那个要返回的值 。执行完之后,就会通知主程序finally的程序执行完毕,可以请求返回了”,这时,就会将临时栈中的值取出来返回。这下应该清楚了,要返回的值是保存至临时栈中的。

图片说明

  • 所有异常和错误都是Throwable子类
  1. 接口interface和抽象类abstract
    实现接口,就要实现接口的所以方法,相当于重写方法,方法的重写需要满足:三同一大一小(方法名、返回值类型、形参相同;访问权限>=重写前;抛出异常<=重写前)
    图片说明
    不能被new出来自然就没有构造器。
    图片说明
    接口的作用
  2. 面向对象
  • 继承extends:子类可以继承父类的所有public方法(私有属性无法被继承);

    在父类中有private的name=“张三”属性,在子类中若也定义了这个且name="李四";则this.name为李四,super.name为张三。

  • super:子类构造器中第一行默认会调用父类无参构造器super();;super只能出现在子类的方法或构造方法中;
    图片说明
  • 多态:若B是A子类,且B b=new A(),则b.fun()调用的是B的方法;

    多态是方法的多态,而不是属性的;对象能执行哪些方法主要看=号左边的;
    假设a是一个学生,a instanceof Person判断类型,并用(Person)a强制类型转换(下转上);
    父类引用可以直接指向子类对象。

  1. static
    在一个类中,static用在方法前时,与类同时加载;而非static方法是在实例化的时候才加载的。
    类中的static方法要想调用当前类中的其他方法也只能调用静态方法。且调用方式为类名.方法名
    一个类中的私有静态变量可以用类名.变量名使用。

  2. 内部类
    有成员内部类 局部内部类(定义在方法中) 匿名内部类

    Outer outer = new Outer();
    Outer.inner inner = Outer.new Inner();
    //Inner在Outer类内部,需要public。
    public class Outer{
     private int id;
     public class Inner{
         //内部类可以获得外部类的私有属性
     }//若改为静态内部类就不能取得私有属性
    }

一个java文件只有一个public类,可以有多个其他class,其他内也叫内部类:
匿名内部类:
没有名字初试化类,不用将实例保存到变量中。



运算符优先级

  1. 加减法
    int a =100,b=50,c=a---b,d=a---b;
    先考虑a--,a执行后自减操作,即先用a后再自减1,与--a先反
    (1)c=a---b,先执行a-b操作,得到c=50,再执行a减1操作,得到a=99
    (2)d=a---b,先执行a-b操作,得到d=49,再执行a减1操作,得到a=98
    运算符优先级及结合性

JVM

  1. 控制台命令
    javac -d destination 目的地 -s source 起源地图片说明

  2. java内存分析
    图片说明
    int[] a=null;时在栈区会创建a,此时堆区没有任何东西;new int[10]后才会在堆中开辟一个大小为10的空间。

    数组也是一种引用类型(除了八种基本类型外都是),故它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式初始化了。

    public class Pet {
     String name;
     int age;
     public void shot(){
         System.out.println("叫了一声");
     }
    }
    public class Demo {
     public static void main(String[] args) {
         Pet dog = new Pet();
         dog.name = "旺财";
         dog.age = 1;
         dog.shot();
         System.out.println(dog.name);
         System.out.println(dog.age);
    
     }
    }

图片说明

  • 首先加载Demo类以及里面的main方法,还有字符串之类的常量池到中的方法区
  • 然后将main方法压入栈底(故main退栈时基本代表程序执行结束);
  • main方法中dog = new Pet()时会把pet类加载到方法区;同时在栈中引用dog变量名;并在堆中建立dog对象。(在堆中shout()时调用的是方法区中的shout()方法)
    详情参考:创建对象的过程详解

全部评论

相关推荐

数学转码崽:一直给我推,投了又不理,理了又秒挂
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务