`
baiqian
  • 浏览: 38349 次
  • 性别: Icon_minigender_2
  • 来自: 河南
社区版块
存档分类
最新评论

黑马程序员—java基础加强—枚举、反射

阅读更多

---------------------- android培训java培训、期待与您交流! ----------------------

 

枚举:

如果枚举只有一个成员时,就可以作为一种单例的实现方式。

枚举就相当于一个类,其中也可以定义构造方法、成员方法、普通方法、抽象方法。

枚举元素必须位于枚举体中的最开始部分,且列表的后面要有分号与其他杨员分隔,

如果枚举中带有构造方法则这个方法必须定义成private

 

Overload vs Override:

 

Overload :方法重载,是指方法名相同参数个数不同、参数类型不同,如果一个方法的参数个数及参数类型都相同只是返回值不同,它也不是方法重载,因为方法重载与返回值无关。

Override:方法重写,方法重写是发生在子类中。方法的返回值类型、方法名、参数列表和父类中的方法完全一致,并且子类的访问级别不能低于父类的访问级别。但如果子类中的这个方法是private的那它就不是重写父类中的方法了,它完全就是另一个方法。

享元模式(flyweight):如果很多很小的对象它们又有很多相同的属性,就把它们封装成一个对象,而那些不同的属性就封装成外部对象作为方法的参数传入,称为外部状态,方法称为对象的内部状态。

 

 

反射:

Class 这个类代表内存中的一份字节码,

得到类的字节码有三种方式:

如:类名.class——Class c1=Date.class

对象.getClass()——new Date().getClass();

      反射Class.forName("类名")——

Class.forName(java.util.Date);来返回字节码,返回有两种情况:

1、是字节码已经加载到了虚拟机中只要返回就行

2、是虚拟机中还没有字节码,用类加载器去加载,把加载进来的的字节码缓存到虚拟机中返回

     判断是不是原始类型:

 

String s="abc"; 
Class c1=s.getClass(); 
System.out.println(c1.isPrimitive());
System.out.println(int.class.isPrimitive()); 
System.out.println(int.class==Integer.class);
System.out.println(int.class==Integer.TYPE); 
System.out.println(int[].class.isPrimitive()); 
判断是不是数据类型的Class实例对象: 
System.out.println(int[].class.isArray());

 

 

反射就是把java类中的各种成分映射成相应的java类 

得到某个类所有的构造方法:

Constructor[]constructors=

Class.forName("java.lang.String").getConstructors();

得到某类的一个构造方法:

Constructor constructor=

Class.forName("java.lang.String").

getConstructor(StringBuffer.class);//获得方法时要用到类型

创建实例对象:

通常方式:String str=new String(new StringBuffer("abc"));

反射方式:String str=

(String)constructor.newInstance(new StringBuffer("abc"));//调用获得的方法时要用到上面相同类型的实例对象

Field 类:它代表某个类中的一个成员变量

 

public class ReflactPoint {
	public int x;
	private int y;
	public String a="abckedg";
	public String b="basket";
	public String c="telnalPhona";
	public ReflactPoint(){}
	public ReflactPoint(int x, int y) {
		super();
		this.x = x;
		this.y = y;
	}
	@Override
	public String toString(){
		return "a:"+a+"b:"+b+"c:"+c;
	}
}
Public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchFieldException {

		ReflactPoint rp=new ReflactPoint(12,45);
		//访问公共的 x
		//Field不是对象身上的变量而是类身上的,要用它去取对象身上对应的变量
		Field fieldX=rp.getClass().getField("x");
		System.out.println(fieldX.get(rp));
		//访问私有的y
		Field fieldY=rp.getClass().getDeclaredField("y");
		fieldY.setAccessible(true);
		System.out.println(fieldY.get(rp));
比较两个字节码时要用==双等号,不要用.equals
//练习:把一个对象中所有String类型的变量中的b换成a.
public static void main(String[] args) throws...
		ReflactPoint rp=new ReflactPoint();
		changeString(rp);
		System.out.println(rp);

public static void changeString(Object obj) throws IllegalArgumentException, IllegalAccessException{
		Field[] fields=obj.getClass().getFields();
		for (Field field : fields) {
			if(field.getType()==String.class){
				String oldStr=(String) field.get(obj);
				String newStr=oldStr.replace("a", "e");
				field.set(obj, newStr);
			}
		}

 

 

Method:某个类中的一个成员方法。

得到类中的某一个方法:

Method charAt=

Class.forName("java.lang.String").getMethod("name",parameterTypes)

 如:

//得到方法

methodCharAt=String.class.getMethod("charAt",int.class);

methodCharAt.invoke(str,1);//调用方法

调用方法:

通常方式:System.out.println(str.charAt(1));

反射方式:System.out.println(charAt.invoke(str,1));

如果传递给Method对象的invoke()方法的第一个参数为null,说明该Method对象对应的是一个静态方法!

具有相同维数和元素类型的数组属于同一个类型,即具有相同的Class实例对象,代表数组的Class实例对象的getSuperClass()方法返回的父类为Object类对应的Class.

基本数据类型的一维数组可以被 当作Object类型来使用,不能当作Object[]类型来使用,非基础数据类型的一维数组既可以当作Object类型使用又可以当做Object[]类型使用。

Arrays.asList()方法处理int[]String[]时是不一样的。

数组的反射:

Array工具类用于完成对数组的反射操作。

ArrayList_HashSet的比较及Hashcode分析:

ArrayList它的底层实现是数组数据结构,是有顺序的集合它中存储的是对象的引用并且其中的元素可以重复

HashSet是它的底层实现是哈希表,它所存储的元素不允许重复。

Hashcode的作用:

hashcode时容易造成内存泄漏。

加载配置文件的三种方法:

InputStream is=new FileInputStream("文件名");

InputStream is=

Person.class.getClassLoader().getResourceAsStream("路径");

InputStream is=Person.class.getResourceAsStream("文件名");

 

 

---------------------- android培训java培训、期待与您交流! ----------------------

分享到:
评论

相关推荐

    黑马程序员Java基础视频辅导班Day03

    【Java基础知识点详解】 在Java编程中,运算符与流程控制是编程的基础,今天我们主要讨论的是位运算符、条件运算符以及流程控制结构,这些都是在实际编程中经常使用的概念。 1. **位运算符**: 位运算符在计算机...

    Java基础案例教程.rar

    10. **Java反射机制**:探索Java反射API,允许程序在运行时动态获取类的信息并进行操作。 11. **枚举与注解**:理解枚举类型的用法和其在程序设计中的优势,以及注解的作用和如何自定义注解。 12. **JavaFX与Swing...

    java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名

    在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时检查和操作类、接口、字段和方法等对象。枚举(Enumeration)是Java中的一个特殊类类型,用于定义一组常量。本项目"test-enum-demo-...

    Java基础案例教程(第2版)-教学设计.zip

    《Java基础案例教程(第2版)》是一本旨在教授初学者Java编程基础知识的教材,其教学设计旨在通过实例引导学生深入理解Java语言的核心概念。本教程覆盖了从环境搭建到程序设计的各个环节,旨在帮助学生建立起坚实的...

    java入门经典第五章

    《Java入门经典》第五章是Java编程初学者的重要学习资源,涵盖了丰富的基础知识和实践技能。在这一章中,我们通常会遇到以下几个核心知识点: 1. **基础语法**:Java的基础语法是所有编程学习的起点,包括变量声明...

    Java期末复习——枚举与反射机制

    Java编程语言中,枚举和反射机制是两个重要的特性,它们在不同的场景下有着独特的用途。下面我们将详细探讨这两个主题。 一、枚举 枚举(Enum)在Java中用于定义一组固定数量的值,这些值可以作为常量使用。枚举...

    java枚举实例代码

    Java枚举(enum)是Java语言中的一种特殊数据类型,用于定义一组有限的常量,这些常量在程序中作为固定的值使用。枚举在Java中被引入,目的是为了更好地管理和使用常量,提高代码的可读性和安全性。在本实例代码中,...

    说说Java中的枚举 转 可以了,够了 包括EnumSet(Map)

    Java中的枚举是一种特殊的类,它提供了一种安全的方式来表示有限集合中的值。枚举类型在Java中被引入,主要用于解决常量集合并提供一种强类型的安全性,防止了无意间创建新的实例或修改枚举常量。这篇博客将深入探讨...

    大学课程讲义-Java基础-枚举&注解.pptx

    Java 基础知识点总览 - 枚举和注解 Java 中的枚举(enumeration)是一种特殊的数据类型,它可以表示有限的、固定的常量集。枚举类是一种特殊的类,它的对象是有限的、固定的和不可变的。 枚举的定义 在 Java 中,...

    9.尚硅谷_java基础_枚举&注解

    枚举 定义 自实现枚举类 使用 enum 定义枚举类 实现接口的枚举类 枚举类的方法 注解

    Java SE程序 Enum枚举类

    Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类...

    Java源码查看枚举类型定义.rar

    在"查看枚举类型定义"的示例中,可能会展示如何通过反射API来获取枚举的详细信息,如枚举常量的名称、值以及它们的方法。这有助于在运行时分析和操作枚举类型。 总之,Java枚举类型是一种强大的工具,用于表示固定...

    Java高新技术_java5的枚举的基本应用

    Java高新技术——Java 5的枚举(Enum)基本应用 在Java编程语言中,枚举是一种特殊的类,用于定义一组预定义的常量。自从Java 5引入枚举类型以来,它已经成为处理固定集合常量的首选方式,因为它提供了比传统整数...

    java枚举结果类、根据状态值获取枚举值

    java枚举结果类、根据状态值获取枚举值 Controller: /** 模块类型枚举 */ model.addAttribute("mType", ModuleTypeEnum.ModuleTypeShow()); ftl: value="${mType.key}:${mType.value}” </#list>

    枚举和简单反射

    在Java编程语言中,枚举(Enum)和反射(Reflection)是两个非常重要的特性,它们在实际开发中有着广泛的应用。下面将详细讲解这两个概念及其使用技巧。 **枚举(Enum)** 枚举是一种特殊的类,它允许我们定义一组...

    最新的java程序员不可不学的java基础教程

    《最新的java程序员不可不学的java基础教程》是一本针对初级Java程序员的宝贵资源,旨在强化和深化对Java编程基础的理解。在这个版本中,我们有理由相信已经解决了之前版本可能出现的打开问题,使得学习者可以无障碍...

    Java枚举类型Enum的用法

    总结来说,Java枚举类型提供了一种安全、类型安全的方式来定义和使用常量,它可以拥有构造器、方法和字段,并能与switch语句、序列化、反射等Java特性很好地结合。理解并熟练使用枚举,能够使代码更加清晰、易读,...

    Java工作笔记-枚举类型反射

    枚举类型的反射是Java反射API的一个应用,允许我们在运行时动态地获取关于枚举的信息,包括枚举的常量、方法等。下面将详细阐述如何通过反射来操作Java中的枚举类型。 首先,枚举类型的反射主要涉及以下步骤: 1. ...

Global site tag (gtag.js) - Google Analytics