黑马程序员_Java高薪技术2

本文深入探讨了枚举类型的使用场景及其实现方式,通过具体的Java示例代码展示了枚举如何帮助开发者确保变量值的有效性和一致性,并介绍了枚举的一些高级用法。

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------



为什么要有枚举
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译
器就会报错。枚举可以让编译器的编译时就可以控制源程序中填写的非法值,普遍变量的方式
在开发阶段无法实现这一目标。
枚举是JDK1.5新增加的一个新特性。
视频中提到在c语言中,臃肿的东西已经被排除掉了,但是由于后来的用户与功能的需要,
于是加上了某些必须加上的东西。比如:枚举。package cn.itcast.day1;

import java.util.Date;
public class EnumTest {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		WeekDay1 weekDay = WeekDay1.MON;//视频这个地方定义了一个新的规定,
						//星期天需要0表示。而且定义了新的类型。
		System.out.println(weekDay.nextDay());
		
		WeekDay weekDay2 = WeekDay.FRI;
		System.out.println(weekDay2);
		System.out.println(weekDay2.name());
		System.out.println(weekDay2.ordinal());	
		System.out.println(WeekDay.valueOf("SUN").toString());
		System.out.println(WeekDay.values().length);
		
		new Date(300){};
	}


	public enum WeekDay{


		SUN(1),MON(),TUE,WED,THI,FRI,SAT;
		private WeekDay(){System.out.println("first");}
		private WeekDay(int day){System.out.println("second");}
	}
	
	public enum TrafficLamp{
		RED(30){
			public  TrafficLamp nextLamp(){
				return GREEN;
			}
		},
		GREEN(45){
			public  TrafficLamp nextLamp(){
				return YELLOW;
			}			
		},
		YELLOW(5){
			public  TrafficLamp nextLamp(){
				return RED;
			}			
		};
		public abstract TrafficLamp nextLamp();
		private int time;
		private TrafficLamp(int time){this.time = time;}
	}
}


枚举就类似于c语言中的程序员自己定义的一个有范围的变量数组,可以调用。
可以赋值,因为这个数组中的所以的值都是变量。
package cn.itcast.day1;


public abstract class WeekDay1 {                          //这个地方产生了一个实例对象。
	private WeekDay1(){}			 //这个地方的构造方法要搞成私有的。
	
	public final static WeekDay1 SUN = new WeekDay1(){    //这个地方定以了一个静态的常量,其中,static和WeekDay1谁前都可以。
								//这个地方可以写七个方法。为了方便定义了两个!
		@Override
		public WeekDay1 nextDay() {              //赋值的时候只能调用WeekDay中的。
			// TODO Auto-generated method stub   
			return MON;
		}
		
	};
	public final static WeekDay1 MON = new WeekDay1(){


		@Override
		public WeekDay1 nextDay() {
			// TODO Auto-generated method stub
			return SUN;
		}
		
	};	
	
	public abstract WeekDay1 nextDay();
	
/*	public WeekDay nextDay(){
		if(this == SUN){
			return  MON;
		}else{
			return SUN;
		}
	}
*/
	
	public String toString(){
		return this==SUN?"SUN":"MON";
	}
}


----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

内容概要:本文详细记录了对一个Android ARM64静态ELF文件中字符串加密机制的逆向分析过程。该ELF文件的所有字符串均被加密,无法通过常规strings命令或IDA直接识别。作者通过分析发现,加密字符串存储在.rodata段,其解密所需信息(包括密文地址、长度和16位密钥)保存在.data.rel.ro段的40字节描述符中。核心解密函数sub_10F408采用自反的双pass流密码算法,结合固定密钥KEY_TERM(由.data段24字节数据计算得出),实现字节级非线性、位置与长度相关的加密。文章还复现了完整的Python解密脚本,并揭示了该保护机制的本质为代码混淆而非强加密,最终成功批量解密全部956条字符串,暴露程序真实行为,如shell命令模板、设备标识篡改、网络重置等操作。此外,文中还提及未启用的自定义壳框架及其反dump设计。; 适合人群:具备逆向工程基础的安全研究人员、二进制分析人员及对ELF保护技术感兴趣的开发者。; 使用场景及目标:①学习ELF二进制中字符串加密的典型实现方式与逆向突破口;②掌握从结构识别、函数追踪到算法还原的完整逆向流程;③理解“绑定二进制”的完整性校验设计及其局限性;④实践编写IDAPython脚本自动化提取与解密敏感数据。; 阅读建议:此资源以实战案例驱动,不仅展示技术细节,更强调逆向思维与验证方法,建议读者结合IDA调试环境,逐步跟随文中步骤进行动态分析与算法验证,深入理解每一步的推理依据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值