栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java笔试题笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java笔试题笔记

java笔试题记录 基本数据类型、运算

包装类型就是基础数据类型的引用类型

八大基本数据类型

byte,short,int ,long

double ,float,boolean,char

不同数据类型组合运算

最终的结果类型向右看齐,——自动向上强转,变为更大的数据类型

char=short 低精度与高精度一起运算——自动向上强转

高精度类型得到低精度结果需要进行强转

int、integer、new Integer()

**int与integer、new Integer在使用==========比较时,结果一定为true**

因为在比较的时候涉及到自动拆装箱

**integer与new Integer()进行==========比较时,结果一定是false**

integer是内存地址值是指向integer缓存中,new integer()的地址值是指向堆中的

Integer与Integer进行==比较时,看范围;在大于等于-128小于等于127的范围内为true,在此范围外为false。

访问控制权限

类、接口、方法

java.lang下的方法不需要导包

Math中的几个常见方法

Math.floor() 表示向下取整,返回double类型 (floor—地板)

​ 往小了取值

Math.ceil() 表示向上取整,返回double类型 (ceil—天花板) 、

​ 往大了取值

Math.round() 四舍五入,返回int类型

方法名

​ 不能以数字开头

方法结束之后由谁结束

​ 方法在调用时,会占用栈内存,调用完毕之后程序由栈自动释放,而不是gc

​ gc主要针对的是堆区

内存

1、堆区(heap):用于存放所有对象,是线程共享的(注:数组也属于对象)

2、栈区(stack):用于存放基本数据类型的数据和对象的引用,是线程私有的(分为:虚拟机栈和本地方法栈)

3、方法区(method):用于存放类信息、常量、静态变量、编译后的字节码等,是线程共享的(也被称为非堆,即 None-Heap)

构造方法 特点

方法名和类名相同没有返回值,也不写void构造方法可以重载 作用

创建对象时进行赋值在创建对象的时候被调用 分类

默认无参带参构造方法可以重载 Object基类

java中的所有类都直接或者间接的继承object

注意上面说了是所有的类,但是接口不继承object类,因为java中接口就是接口,类就是类是两个完全不一样的平行的概念

抽象类

abstract类不能用来创建abstract类的对象;

final类不能用来派生子类,因为用final修饰的类不能被继承;

abstract类就是被用来继承的;

接口中也可以有abstract方法。

抽象类中可以有普通方法,但是抽象方法必须在抽象类中

继承

子类只可以单继承,继承具有传递性,

但是子类不可以继承父类的构造方法

子类构造器会默认调用super(),用于初始化父类成员

当父类中存在有参构造时,必须提供无参构造器,因为子类构造器会默认调用super()使用无参构造来初始化父类

一个类作为父类必须有无参构造

接口

接口的实现类可以直接获取接口中的属性

重写实现接口中的方法只能使用public方法

内部类

变量

成员变量:定义在类中的变量是类的成员变量,可以不进行初始化,java会自动进行初始化,

​ 如果是引用类型默认初始化为null,

​ 如果是基本类型例如int则会默认初始化为0

局部变量:被定义在方法中的变量,必须有初始值,否则通不过编译

类变量:被static修饰的变量——是静态变量,会随着类的加载而加载,所以被称为类变量

常量:被final修饰的变量

字符串

s.length——获取的是字符串长度

s.getBytes("")——获取的是字节长度——一个中文字符两个字节

== 和 equals():

(1)“==” 用于比较基本数据类型时比较的是值,用于比较引用类型时比较的是引用指向的地址。

(2)Object 中的equals() 与 “==” 的作用相同,但重写了equals()方法,比较的是对象中的内容。

初始化字符串

(注意字符串的拼接)

字符串进行拼接是创建的对象在堆中

​ 有两种方式——

​ 一、new对象——new String(“hello”);——这种先在堆方法区中,开辟一个newString的空间,然后检查括号中的值在字符常量池中是否存在,

​ 如果存在,就直接将该值在字符常量池中的地址赋给该字符串

​ 如果不存在,就在常量池中开辟空间,存储值,然后将地址赋给字符串

​ 二、直接赋值——String s=”hello“;——这种初始化方法是直接将hello放进字符串常量池中

public class Example{
    String str = new String("good");
    char[ ] ch = { 'a' , 'b' , 'c' };
    public static void main(String args[]){
        Example ex = new Example();
        ex.change(ex.str,ex.ch);
        System.out.print(ex.str + " and ");
        System.out.print(ex.ch);
    }
    public void change(String str,char ch[ ]){
        str = "test ok";
        ch[0] = 'g';
    }
}

注意这题不可以被String的是不可变对象所蒙蔽

这个题中ex.change(ex.str,ex.ch);——这里的参数实际上是传递的一个形参,传递的是一个副本,

ex.str,ex.ch,这里就相当于是复制了一份原有的数据,实际参与change运算的过程中,对字符串str进行了重新赋值,这里test ok 在原本的和str的源字符串不一样,这里又在常量池中开辟了一个新的空间,并将这个值的地址赋给这个形参字符串 ,但是这里改变不了原有的参数str的值

这里的数组却是改变了原本0位置的字符,将原有的地址的值该变为g

异常

集合 继承体系

Collection和Collections的区别:

Collection:是顶层接口,有子接口List和Set

Collections:是针对集合操作的工具类,有对集合进行排序和二分查找的方法

map集合的方法

collection values:获取所有的值,封装在conllection集合中

V get(object key):根据键获取值

IO流

读取——input

输出——output

字节流和字符流的区分

stream结尾都是字节流

reader和writer结尾都是字符流

两者的区别

就是读写的时候一个是按字节读写,一个是按字符

在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选择字符流

只是读写文件,和文件内容无关的,一般选择字节流。

继承体系

多线程 创建多线程的方式

继承thread类

重写该类的run()方法通过线程对象的startt()来启动线程

实现runable接口

重写该接口的run()方法,run方法为线程的执行体通过线程对象start()来调用

实现callable接口

run()和start()的区别:

​ run():仅仅是用来封装被线程执行的代码,直接调用时是普通的方法​ start() : 先启动线程,然后由jvm去调用run方法,执行run()中的代码

正则表达式

^表示匹配输入的开始,$表示匹配输入的结束

?表示匹配某元素0次或1次

//严格匹配两个//

]表示字符集合,它用在正则表达式中表示匹配集合中的任一字符

[a-zA-Zd] 表示匹配一个小写字母 或者 大写字母 或者 数字

w 表示匹配字母数字或下划线

+表示匹配某元素1次或多次

.可以匹配除了换行符n r外的任何字符

D 表示匹配一个非数字字符而非数字字符

d匹配数字,

{m,n}表示最少匹配m次,最多匹配n

/?能匹配末尾的0个或1个/字符

*表示匹配某元素0次或多次

代码题 1、包装类的自动拆装箱
Boolean flag = ``false``;
if` `(flag = ``true``)
{
  ``System.out.println(``"true"``);
}
else
{
  ``System.out.println(``"false"``);
}

Boolean是包装类型,初始化值为false

在if (flag= “true”)中会调用Boolean.valueOf(boolean b)方法自动拆箱为基本数据类型,因此赋值后flag值为true,输出文本true

输出的 true

2、try—catch返回值
public static int method() {
        int a=10;
        try {
            System.out.println(a/0);
        }catch (Exception e) {
            a=30;
            return a;
        }finally {
            a=40;
        }
        return 50;
    }

Return a在执行到这一步是,a=30;

执行return a,实际上执行的是返回路径 return 30;

但是这时发现后面还有finally语句,

所以就继续执行下面的finally,执行过之后a=40,

然后在返回来执行之前已经形成的返回路径 return 30;

如果仅 try中有return,返回的就是try语句中的return

如果try、finally语句中都有return,忽略try中的return,返回finally中的return

如果catch、finally中都有return,忽略finally中的return,返回catch中的return

try《finally《catch

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/781715.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号