Java初学者笔记一:元类、获取类型、枚举
零、绪论:
2018年新年伊始,学习Java的冲动越来越强烈,毕竟以后无论是做安全开发还是安全研究都必不可少的掌握这门语言,所以在不断完善Python作为脚本语言的主语言的情况下觉得学习Java作为高级语言当中的主语言(无奈C、C++指针太虐人,内存太虐人,还是被JVM屏蔽了的好,虽然后面的也得看)所以觉得写一个学习系列的Java博客,作为学习笔记。希望能非常基础的但也完整的记录自己学习Java的一点一滴,备忘同时提升。本系列的后续篇章不再像WEB安全系列那样每一篇都把绪论作为开头了,先写下来作为开篇吧。由于大学期间学习过Java最基础的,而且具备一点点C\C++的阅读代码能力,所以想hello world啊,环境配置就不写了。
一、Object类:
在java中Object是所有类的基类,蛮类似python中的新式类的,哈哈。对于Object的定义的参数,你传入什么类型的动心这个参数变量就是什么类型的,这样就解决了一个数据结构中保存不同类型对象的问题。
例如,我要搞一个数组{"a",1,c} c是一个类的实例对象,那么该如何定义这个数组呢?
Object[] objlist = new Object[10];
你对Object参数传参后类型就是你传入的类型,如下是我模仿python字典的一些基本操作,用java实现的一个数据结构:
节点类:
 class dictnode{
     private Object key;
     private Object value;
     dictnode(Object keyname,Object valueitem){
         this.key = keyname;
         this.value = valueitem;
     }
     protected void finalize() {}
     public Object getValue() {
         return this.value;
     }
     public void setValue(Object value) {
         this.value = value;
     }
     public Object getKey() {
         return this.key;
     }
 }
字典类:
 class dict{
     private int max;
     private int size = 0;
     private dictnode[] nodelist;
     dict(int max){
         this.max = max;
         nodelist = new dictnode[max];
     }
     public boolean set(Object key,Object value) throws Exception {
         if(this.size <= this.max-1 ) {
             for(int flag=0;flag<this.size;flag++) {
                 if (nodelist[flag].getKey() == key) {
                     nodelist[flag].setValue(value);
                     return true;
                 }
             }
             nodelist[this.size] = new dictnode(key,value);
             this.size++;
             return false;
         }
         else {
             throw new Exception("字典已经满额");
         }
     }
     public Object get(Object key) throws Exception {
         for(int flag=0;flag<this.size;flag++) {
             if (nodelist[flag].getKey() == key) {
                 return nodelist[flag].getValue();
             }
         }
         throw new Exception("未找到该键值");
     }
     public int getSize() {
         return this.size;
     }
     public void clear() {
         for(int flag=0;flag<this.size;flag++) {
             this.nodelist[flag] = null;
         }
         this.size = 0;
     }
     public boolean hasKeys(Object key) {
         for(int flag=0;flag<this.size;flag++) {
             if (this.nodelist[flag].getKey() == key) {
                 return true;
             }
         }
         return false;
     }
     public dictnode[] items() {
         return this.nodelist;
     }
     public Object[] keys() {
         Object[] keylist= new Object[this.size];
         for(int flag=0;flag<this.size;flag++) {
             keylist[flag] = this.nodelist[flag].getKey();
             //System.out.println(keylist[flag]);
         }
         return keylist;
     }
     public Object[] values() {
         Object[] valuelist= new Object[this.size];
         for(int flag=0;flag<this.size;flag++) {
             valuelist[flag] = this.nodelist[flag].getValue();
         }
         return valuelist;
     }
 }
对于Object类型参数,我传入一个{“1”:2},那么节点中的Object参数value的getClass()就变成了你还:
class java.lang.Integer
如上,我们可以通过Object数据类型来构造范式的数据结构。
特殊的类型枚举类
我们来看一个定义:
class student{
    public String Name;
    enum gendertype{MALE,FEMALE}
    public gendertype Gender;
    public String StudentID;
    public int Age;
    public String Level;
    private double AveryScore;
    public student(String name,int gender,String studentid,int age,String level) {
        this.Name = name;
        if(gender == 0){
            this.Gender = Gender.MALE;
        }
        else {
            this.Gender = Gender.FEMALE;
        }
        this.StudentID = studentid;
        this.Age = age;
        this.Level = level;
        this.AveryScore = 0.00;
    }
    public double getStudentAveryScore() {
        return this.AveryScore;
    }
    public void setStudentAveryScore(double averscore) {
        this.AveryScore = averscore;
    }
    public void show() {
        String infostr = "学号:"+this.StudentID+"姓名:"+this.Name+" 性别:"+this.Gender+" 年龄:"+String.valueOf(this.Age)+" 年级:"+this.Level;
        System.out.println(infostr);
    }
}
我们来看枚举类的定义方法:
 enum gendertype{MALE,FEMALE}
 public gendertype Gender;
 //调用的时候
 if(gender == 0){
     this.Gender = Gender.MALE;
 }
 else {
     this.Gender = Gender.FEMALE;
 }
Java初学者笔记一:元类、获取类型、枚举的更多相关文章
- Java初学者笔记
		
Java初学者笔记 前提:认识汉字,认识英语单词,会用键盘打字 ------------------------------- 端口是什么: --------面向对象编程(OOP) 接口”(Inter ...
 - 【原】Java学习笔记031 - 常用类
		
package cn.temptation; public class Sample01 { public static void main(String[] args) { /* * 类 Math: ...
 - Java初学者笔记六:反射
		
Java反射基础 零.基础类代码 import java.io.*; import java.lang.reflect.*; class father{ public String fName; fa ...
 - java学习笔记7--抽象类与抽象方法
		
接着前面的学习: java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) jav ...
 - 1.9(java学习笔记)object类及toString()与equals()方法
		
object类 java中objec是所有类公共的父类,一个类只要没有明显的继承某一类,那么它就是继承object类. 例如 class Person {......};和class Person e ...
 - Java学习笔记day06_自定义类_ArrayList
		
1.自定义类class 使用类的形式, 对现实中的事物进行描述. 类是引用数据类型. 事物: 方法,变量. 方法:事物具备的功能. 变量:事物的属性. 格式: public class 类名{ //属 ...
 - 面向对象相关概念与在python中的面向对象知识(魔法方法+反射+元类+鸭子类型)
		
面向对象知识 封装 封装的原理是,其成员变量代表对象的属性,方法代表这个对象的动作真正的封装是,经过深入的思考,做出良好的抽象(设计属性时用到),给出“完整且最小”的接口,并使得内部细节可以对外透明( ...
 - Java学习笔记(2)——有关类
		
Java类的高级特性: {Java管理文件机制:类包. 同一个包中的类互相访问时,可以不指定包名. 同一个包中的类不必存放在同一位置,如com.lang.class1和com.lang.class2可 ...
 - 廖雪峰Python学习笔记——使用元类
		
元类(MetaClasses) 元类提供了一个改变Python类行为的有效方式. 元类的定义是“一个类的类”.任何实例是它自己的类都是元类. class demo(object): pass obj ...
 
随机推荐
- linux 使用NSF 映射远程磁盘目录
			
假设源目录在192.168.1.1机器上,目录为/data 客户端集群在192.168.1.2, 需要将192.168.1.1机器上的/data目录到本地的/data目录 1.在两台机器上安装nsf ...
 - MySQL命令学习(二)
			
(13)where字句操作符 = 等于 <> 不等于 != 不等于 < 小于 > ...
 - jsp页面的el表达式取数据
			
在jsp页面去Id时候要照上面的方式取,不能照下面的方式取:
 - js彈出層或者js彈出引用url Frame 層
			
function Popup() { var _this = this; this.CssName = "layermask";//樣式 //遮蓋層 this.hiddLayer ...
 - Unity3D深入浅出 -组件与节点之间的调用关系
			
一.transform组件用途 1.维护场景树 2.对3D物体的平移,缩放,旋转 二.场景树定义 在Hierarchy视图中显示的: 一个game_scene场景,下面有Main Camera节点,D ...
 - 鼠标捕获(setCapture,releaseCapture)的学习
			
鼠标捕获(setCapture)作用是将鼠标事件捕获到当前文档的指定的对象——对指定的对象设置鼠标捕获.这个对象会为当前应用程序或整个系统接收所有鼠标事件. 所谓鼠标捕获,是指对鼠标事件(onmous ...
 - 【问题】报错[CRITICAL] Rendering SLS 'base:minions.install' failed: Jinja variable 'list' object has no element 0
			
1.报错[CRITICAL] Rendering SLS 'base:minions.install' failed: Jinja variable 'list' object has no elem ...
 - CIRI 识别circRNA的原理
			
CIRI 根据circRNA 连接点处的reads来识别circRNA, 在连接点处的reads 其比对情况非常特殊: CIRI 根据3种模型来识别circRNA, 连接点处的read 叫做junct ...
 - Shader开发之三大着色器
			
固定功能管线着色器Fixed Function Shaders 固定功能管线着色器的关键代码一般都在Pass的材质设置Material{}和纹理设置SetTexture{}部分. Shader &qu ...
 - js中以键值对的形式当枚举
			
js中以键值对的形式当枚举var Penum= { B: "姓名", C: "所属居委", D: "证件号", E: "性别&qu ...