java内部类、数据类型转换
来源:互联网 发布:马克斯cms模板防盗 编辑:程序博客网 时间:2024/06/09 15:09
一、java内部类:在一个类内部的类,可以有自己的属性和方法。分四种:
1、正则内部类(也称常规内部类 ),写在类里面普通的类,相当于外部类的类成员。特点:
1)外部类不可直接访问内部类的属性和方法。
2)在正则内部类中可以直接访问外部类的类成员。
3)使用正则内部类,必须先创建外部类的实例,再创建正则内部类的实例,使用.new关键字。
4)正则内部类中不可以写静态的属性和方法,除非加上final。原因:外部类非静态。
用法可参考代码:
public class employee {private int i=10;//类级别的变量 成员变量 属性 全局变量private void saySomething(){System.out.println("外部类方法"+i);}//正则内部类/常规内部类,相当于外部类的成员,可以直接访问外部类的属性和方法public class Department{static final int k=9;int j=100;public void speak(){//内部类的方法System.out.println("正则内部类可以直接访问外部类的类成员"+i);saySomething();}}public static void main(String[] args) {employee e=new employee();//创建和使用正则内部类 <span style="color:#FF0000;">.new()关键字</span>Department d=<span style="color:#FF0000;">e.new</span> Department();d.speak();System.out.println(d.j);}}2、静态内部类(也称嵌套类):static修饰的内部类,特点:
1)相当于外部类的静态成员,只能访问外部类的静态的属性和方法。
2)静态内部类中可以写静态的属性和方法。
3)static修饰的变量和方法,在实例化类之前就可以直接使用。所有static的变量或方法,所有类的实例共享一个。
4)访问静态内部类:创建静态内部类,不需要创建外部类实例。
用法可参考代码:
public class Employee1 {int m=99;//非静态变量//非静态方法必须在实例化后才可以使用public void test(){ }static int i=10;static void staticMethod(){System.out.println("外部类静态方法");}//静态内部类,只能访问外部类的静态的属性和方法。static class Department{int k=10;public void speak(){ }static int j=0;static void h(){staticMethod();System.out.println("访问外部类的静态属性和方法"+i);}}public static void main(String[] args) {Employee1 e1=new Employee1();e1.i++;Employee1 e2=new Employee1();e2.i++;Employee1.staticMethod();//test();//静态方法里面不可以直接调用非静态方法//访问静态内部类:创建静态内部类,不需要创建外部类实例<span style="color:#FF0000;">Employee1.Department d=new Employee1.Department();</span>d.k=100;<span style="color:#FF0000;">Employee1.Department.j=10;//静态的变量,不需要实例化Department</span>}}
3、方法局部内部类:写在方法里的类,特点:
1)属于方法里面的类,调用方法时才能调用方法局部内部类。
2)但该类不是执行方法时调用,在实例化外部类时已经创建 该方法内部类。
3)方法局部内部类,只能用final 和 abstract,不能使用public/private/protected。
4)访问局部变量时,只能访问内部类所在方法中final修饰的局部变量。
5)jdk<=7,不可以访问所在方法的局部变量,jdk8不会有编译错误,jdk8会自动加final。
6)实例化时,只能在所在的这个方法里面进行实例化。
用法可参考代码:
public class Employee2 {int i=10;public void saySomething(){int j=100;//方法的局部变量final int k=8;//方法的常量//方法局部内部类,只能用final 和 abstract,不能使用public/private/protected//不是执行方法时调用,在实例化外部类时已经创建 该方法内部类class Department{int h=9;public void say(){System.out.println(i);//可以访问外部类的属性//System.out.println(j);//jdk<=7,不可以访问所在方法的局部变量,jdk8不会有编译错误,jdk8会自动加finalSystem.out.println(k);//只能访问final修饰的局部变量,因为类先于方法创建System.out.println(h);//可以访问}}Department d=new Department();System.out.println(d.h);d.say();}public static void main(String[] args) {Employee2 e=new Employee2();//实例化外部类时已经创建 了方法局部内部类e.saySomething();}}
4、匿名内部类:定义类没有名字,没有实例。优点:
1)只能使用一次。
2)用于接口、抽象类的实现。
3)其他地方不可访问。
用法可参考代码:
public class AnonymousInner {public Student getStudent(){return new Student();}//定义匿名类实现接口,只能使用一次public Person getPerson(){//Person不是一个类,这样写就是匿名类,来实现接口return new Person(){@Overridepublic void sleep() {System.out.println("这是匿名类的方法");}};}public static void main(String[] args) {AnonymousInner e=new AnonymousInner();e.getPerson();e.getStudent();//定义匿名类实现继承抽象类,只能使用一次new Animal(){@Overridepublic void sleep() {System.out.println("这是匿名类的方法");}};}}//使用类来实现接口class Student implements Person{@Overridepublic void sleep() { System.out.println("非匿名类的sleep");}}interface Person{public void sleep();}abstract class Animal{public abstract void sleep();}在GUI中的用法参考代码:
public class AnonymousDemo extends JFrame{JMenuBar mbar;JMenu menu;JMenuItem item;public AnonymousDemo(){setVisible(true);setSize(400,400);setTitle("匿名类在界面的实现");mbar=new JMenuBar();menu=new JMenu("文件");item=new JMenuItem("打开");menu.add(item);mbar.add(menu);setJMenuBar(mbar);//<span style="color:#FF0000;">匿名类只为item实现事件处理,且只执行一次</span>item.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {}});}public static void main(String[] args) {new AnonymousDemo();}}
5、内部类的用途的一种:实现多继承,用法可参考代码:
public class InnerClassDemo {class InnerA extends ParentA{@Overridevoid test() {}}class InnerB extends ParentB{@Overridevoid test() {}}abstract class ParentA{abstract void test();}abstract class ParentB{abstract void test();}}
二、数据类型转换
1、基本类型转换:在兼容类型前提下进行转换:
1)默认类型转换,小- -大,自动发生,隐式转换。
2)显示转换,大- -小,强制类型转换(如果大于目标类型的范围时,小心数据丢失)。
2、String类型与基本类型的转换:
public static void main(String[] args) {// 字符串转换为其他类型String score = "123456";int result = Integer.parseInt(score);// Integer是int的包装类int result1 = Integer.valueOf(score);// 与上面的方法都可以转换,只是效率不同// 其他类型转换为字符串String s1 = String.valueOf(result);String s2 = String.valueOf('a');String s3 = String.valueOf(100);}3、对象类型转换:只发生在继承前提下。
1)向下类型转换,必须发生过向上类型转换的类才能转换。
2)向上类型转换,自动转换。
用法可参考代码:
public class ObjectCastDemo {public static void main(String[] args) {Animal a1=new Animal();Animal a2=new Animal();Dog d=new Dog();Dog d2=new Dog();Cat c=new Cat();a1=d;//使用父类的引用a1引用了子类d,向上类型转换,沿着子类到父类的方向转换//向下类型转换 必须发生过向上类型转换的类//c=(Cat)a2;//转换出错//判断a2是否为Cat类型if(a2 instanceof Cat){} d2=(Dog)a1;}}class Animal{}class Dog extends Animal{}class Cat extends Animal{}3)变量引用的内存:
- java内部类、数据类型转换
- 【Java】【内部类】Java 内部类简介
- Java基础 7 类型转换 接口 内部类
- [Java] Java 内部类
- Java 内部类(成员内部类、局部内部类、静态内部类和匿名内部类)
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、局部内部类、静态内部类、匿名内部类)
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- java的内部类、匿名内部类、局部内部类
- java内部类之成员内部类、静态内部类
- java 成员内部类 局部内部类,匿名内部类
- Java 静态内部类/内部类
- java内部类、静态内部类 小结
- Java内部类,静态内部类
- JAVA 内部类与静态内部类
- java.sql.SQLException: com.informix.asf.IfxASFException: Invalid ASF API input parameters.
- X86平台项目经历
- HashMap为什么存取效率那么高?
- UVALive2247 Prime Digital Roots
- 设置导航栏标题,字体颜色,大小 背景颜色 等
- java内部类、数据类型转换
- XXX.axf: Error: L6218E: Undefined symbol xxx (referred from xxxx.o).
- 子类方法与父类方法
- 快速排序
- 【Android基础知识】Apache HttpClient的基本使用
- Redis和Memcache的区别分析
- windows php安装redis扩展
- 网络编程基本概念
- Spark tungsten shuffle过程