JAVA面向对象one

	java包类	
1.把字符串类型的值转换为基本类型的值的两种方法

利用包装类提供的parseXXX(String s) 静态方法 (除了Character之外的所有包装类都提供了该方法)

int it1 = Integer.parseInt(intStr);
利用包装类提供的xxx(String s)构造器

int it2 = new Integer(intStr);
//把一个float变量转换成String变量
String ftStr = String.valueOf(2.345f);
//把一个boolean变量转换成String变量
String boolStr = String.valueOf(true);



Objects类提供的toString()方法总是返回该对象实现类的“类名+@+hashCode”值,这个返回值不能真正实现“自我描述”的功能,因此必须重写Objects类的toString()方法

2.内部类

a.内部类提了很好的封装

b.内部类成员可以直接访问外部类的私有数据,因为内部类被当成其外部类成员;但外部类不能访问内部类的实现细节

c.匿名内部类适合用于创建那些仅需要使用一次的类

d.内部类比外部类可以多使用三个修饰符:private/protect/static,外部类不可以使用此三个

e.非静态内部类不能拥有静态成员。

  3.java 8改进的匿名内部类

new 实现接口()   | 父类构造器(实参列表)
{
//匿名内部类的类体部分
}
规则:

(1)匿名内部类不能是抽象类,因为系统在创建匿名内部类时,会立即创建匿名内部类的对象。因此不允许将匿名内部类定义成抽象类

(2)匿名内部类不能定义构造器。由于匿名内部类没有类名,所以无法定义构造器,但匿名内部类可以定义初始化块,可以通过实例初始化块来完成构造器需要完成的事情。

注:定义匿名内部类时无须class关键字,而是在定义匿名内部类时直接生成该匿名内部类的对象

如果局部变量被匿名内部类访问,那么该局部变量相当于自动使用了final修饰;

4.java 8新增的Lambda表达式

Lambda表达式支持将代码块作为方法参数,允许用更简洁的代码来创建只有一个抽象方法的接口(称为函数式接口)

Lambda表达式主要作用就是代替匿名内部类的烦琐的语法,由三部分组成:

a.形参列表  允许省略形参类型,如果形参列表只有一个参数,甚至形参列表的圆括号也可以省略

b.箭头 (->)  必须用英文中画线和大于号组成

c. 代码块  如果代码块只包含一条语句,Lambda表达式允许省略代码块的花括号,Lambda表达式代码块只有一条return 语句,甚至可以省略return关键字。Lambda表达式需要返回值,而它的代码块中仅有一条省略了return语句,Lambda表达式会自动返回这条语句的值。

  Lambda表达式与函数式接口

Lambda表达式类型,也称为“目标类型”,Lambda表达式的目标类型必须是“函数式接口”,函数式接口只包含一个抽象方法的接口,函数式接口可以包含多个默认方法、类方法,但只能声明一个抽象方法;

由于Lambda表达式的结果就是被当成对象,因此程序中完全可以使用Lambda表达式进行赋值

Lambda表达式有如下限制:

(1)Lambda表达式的目标类型必须是明确的函数式的接口

(2)Lambda表达式只能为函数式接口创建对象。Lambda表达式只能实现一个方法,只能有一个抽象的方法的接口创建对象。

为保证Lambda表达式的目标类型是一个明确的函数式接口,有如下三种常见方式:

(1)将Lambda表达式赋值给函数式接口类型的变量;

(2)将Lambda表达式作为函数式接口类型的参数传给某个方法;

(3)使用函数式接口对Lambda表达式进行强制类型转换;

5.Lambda表达式支持的方法引用和构造器引用:

如果Lambda表达式代码块中只有一条语句,还可以使用方法引用和构造器引用

a.引用类方法

interface Converter{
Integer convert(String from);
}
//下面代码使用Lambda表达式创建Converter对象
Convertr converter1 = from -> Integer.valueOf(from);

Integer va1 = converter1.convert("99");
System.out.println(va1);

//方法引用代替Lambda表达式
Conveter conveter1 = Integer::valueOf;
b.引用特定对象的实例方法

//下面使用Lambda表达式创建Converter对象
Converter converter2 = from ->"fkit.org".indexOf(from);
//调用convert()方法将字符串转换成整数了
Integer value = converter2.convert("it");
Systen.out.println(value);
//方法引用代替Lambda表达式:引用特定对象的实例方法
Converter converter2 = "fkit.org"::indexOf;
c.引用某类对象的实例方法

interface MyTest
{
String test(String a,int b, int c);
}
//使用Lambda 表达式创建MyTest对象
MyTest mt = (a,b,c) -> a.substring(b,c);
//调用mt对象的test()方法
String str = mt.test("java i love you",2,9);
System.out.println(str);
//方法引用代替Lambda表达式:引用某类对象的实例方法
MyTest mt = String::substring;
d.引用构造器

interface YourTest
{
JFrame win(String title);
}
//使用Lambda表达式创建YourTest对象
YourTest yt = (String a)-> new JFrame(a);
//调用yt对象的win()方法,
JFrame jf = yt.win("我的窗口");
System.out.println(jf);

//构造器引用代替Lambda表达式
YourTest yt = JFrame::new;








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值