java第四周笔记

成员内部类
在类的内部定义,与实例变量、实例方法同级别的类。
外部类的一个实例部分,创建内部类对象时,必须依赖外部类对象。
Outer out = new Outer();
Outer.Inner in = out.new Inner();
当外部类、内部类存在重名属性时,会优先访问内部类属性。
成员内部类不能定义静态成员。
内部类要使用需要实例化,在那之前是需要外部类实例化后再去实例化内部类,所以要
加载内部类必须在实例化外部类之后完成 , 但是 java 虚拟机要求所有的静态变量必须在对
象创建之前完成, 这样便产生了矛盾。
成员可以有静态常量
java 常量放在内存中常量池,它的机制与变量是不同的,编译时,加载常量是不需要加
载类的
案例演示:成员内部类使用。

静态内部类
不依赖外部类对象,可直接创建或通过类名访问,可声明静态成员。
只能直接访问外部类的静态成员(实例成员需实例化外部类对象)。
Outer.Inner inner = new Outer.Inner();
Outer.Inner.show();

局部内部类
定义在外部类方法中,作用范围和创建对象范围仅限于当前方法。
局部内部类访问外部类当前方法中的局部变量时,因无法保障变量的生命周期与自身相同,
变量必须修饰为 final
限制类的使用范围。
案例演示:局部内部类使用。

 

匿名内部类
没有类名的局部内部类(一切特征都与局部内部类相同)。
必须继承一个父类或者实现一个接口。
定义类、实现类、创建对象的语法合并,只能创建一个该类的对象。
优点:减少代码量。
缺点:可读性较差。
案例演示:匿名内部类使用。

Object 类【 重点
  概述
超类、基类,所有类的直接或间接父类,位于继承树的最顶层。
任何类,如没有书写 extends 显示继承某个类,都默认直接继承 Object 类,否则为间接继
承。
Object 类中所定义的方法,是所有对象都具备的方法。
Object 类型可以存储任何对象。
作为参数,可接受任何对象。
作为返回值,可返回任何对象。

toString() 返回对象的字符串表示形式。如果一个对象所在的类中,没有重写Object类中            toString(),那么这个对象调用toString()返回的是对象内存地址的字符串形式;
            如果一个对象所在的类中,重写Object类中toString(),那么这个对象调用toString()
            返回的是重写属性值的字符串形式.
            注意:注意,System.out.println()和System.out.print()这两个方法输出的变量是基本数                据类型,直接输出值;如果输出的引用数据类型,会自动调用这个变量的toString();
 

八种基本数据类型违反Java是一种纯面向对象的语言,Java为了维护自己是一种纯面向对象的语        言,给八种基本数据类型提供包装类.
    5.1:包装类:将基本数据类型封装成类;
    5.2:八种基本数据类型的包装类
        基本数据类型     包装类
            byte            java.lang.Byte 
            short        java.lang.Short 
            int            java.lang.Integer 
            long            java.lang.Long
            float        java.lang.Float
            double       java.lang.Double
            boolean      java.lang.Boolean
            char         java.lang.Character 

2 装箱、拆箱
八种包装类提供不同类型间的转换方式。
Number 父类中提供的 6 个共性方法。
parseXXX() 静态方法(除了 Character )。
valueOf() 静态方法。
注意:需保证类型兼容,否则抛出 NumberFormatException 异常。
JDK 5.0 之后,自动装箱、拆箱。基本数据类型和包装类自动转换。
案例演示:包装类使用。
String 类【 重点
4.1 概述
Java 程序中的所有字符串文本(例如 “abc” )都是此类的实例。
字符串字面值是常量,创建之后不可改变。
常用创建方式:
String str1 = “Hello”;
String str2 = new String(“World”);
4.2 常用方法
案例演示: String 的使用
public char charAt(int index)
根据下标获取字符
public boolean contains(String str)
判断当前字符串中是否包含 str
public char[] toCharArray()
将字符串转换成数组。
public int indexOf(String str)
查找 str 首次出现的下标,存在,则返回该下标;不
存在,则返回 -1
public int length()
返回字符串的长度
public String trim(
去掉字符串前后的空格
public String toUpperCase()
将小写转成大写
public boolean endsWith(String str)
判断字符串是否以 str 结尾
public String replace(char oldChar,char
newChar)
将旧字符串替换成新字符串
public String[] split(String str)
根据 str 做拆分
public String subString(int
beginIndex,int endIndex)
在字符串中截取出一个子字符串
StringBuffer:是一个最终的,可变字符串类,它的值可更改.在多线程中使用安全,效率低.
  StringBuilder:是一个最终的,可变字符串类,它的值可更改.在单线程中使用效率高,在多线程中                使用不安全.
    7.1:常用方法
        eg:public static void main(String[] args) {
        //创建StringBuilder对象
        StringBuilder sb1=new StringBuilder("哈哈");
        
        //1.append(Object obj) 追加 Object参数的字符串 Object形式。
        sb1.append("嘻嘻");
        
        //2.delete(int start, int end) 删除此序列的子字符串中的字符。包括起始索引,不包括终止索引 
        //sb1.delete(1, 4);
        
        //3.insert(int offset, Object obj) 将 Object参数的字符串表示插入到此字符序列中。
        sb1.insert(2, "今晚周考");
        
        //4.reverse() 导致该字符序列被序列的相反代替。
        sb1.reverse();
        
        System.out.println(sb1);
    }
 

String VS StringBuffer VS StringBuilder(面试)
    8.1:相同点:
        8.1.1:都是字符串类,都可以存字符串.
        8.1.2:都是最终类,不能被继承.

    8.2:不同点:
        String:是一个最终字符串类,它空间一但赋值,不可更改.
        StringBuffer: 是一个最终字符串类,它是一个可变字符序列,空间中值可更改.在多线程中                        使用安全,但是效率低.
        StringBuilder:是一个最终字符串类,它是一个可变字符序列,空间中值可更改.在单线程中                        使用效率高,在多线程中使用不安全

BigDecimal类:精确计算浮点数.
    9.1:为什么要用BigDecimal
        eg:public static void main(String[] args) {
        //声明变量并赋值
        double num1=1;
        double num2=0.9;
        //计算两数之差
        double result=num1-num2;
        System.out.println(result);
    }
        
    9.2:BigDecimal类的常用方法
        eg:public static void main(String[] args) {
        //创建对象
        BigDecimal num1=new BigDecimal(10);
        BigDecimal num2=new BigDecimal(3);
        
        //计算两数之和
        BigDecimal result1=num1.add(num2);
        //计算两数之差
        BigDecimal result2=num1.subtract(num2);
        //计算两数之积
        BigDecimal result3=num1.multiply(num2);
        //计算两数之商,如果两个数除不断,BigDecimal会报错
        //BigDecimal result4=num1.divide(num2);
        //第一个参数是除数,第二个参数保留的小数位数,第三个参数是取舍模式(四舍五入)
        BigDecimal result4=num1.divide(num2, 2, BigDecimal.ROUND_HALF_UP);
        
        System.out.println("两数之和为:"+result1);
        System.out.println("两数之差为:"+result2);
        System.out.println("两数之积为:"+result3);
        System.out.println("两数之商为:"+result4);
    }
    
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值