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取随机数shell版本
#!/bin/bash aa=$(-) ..} do useradd $i echo $aa|passwd --stdin $i echo "${i} ${aa}" >> ...
- DataGridView使用技巧九:DataGridView的右键菜单(ContextMenuStrip)
DataGridView,DataGridViewColumn,DataGridViewRow,DataGridViewCell有ContextMenuStrip属性.可以通过设置ContextMen ...
- 【Spring boot】第一个项目 Springboot + mysql + hibernate
今天公司要做一个小项目,好久没碰项目了(刷题好累...),听说spring boot很火,决定试一试.暂时就从mysql里面读数据好了,使用hiberante. 1.获取jar包. 从http://s ...
- 用大白话揭开Ajax长轮询(long polling)的神秘面纱
在看这篇Ajax长轮询之前可以先看看Ajax轮询技术(没有长),有助于理解: Ajax长轮询属于Ajax轮询的升级版,在客户端和服务端都进行了一些改造,使得消耗更低,速度更快. "不间断的通 ...
- ViZDoom安装
官网:https://github.com/mwydmuch/ViZDoom/blob/master/doc/Building.md 环境:ubuntu16, python2.7, Anaconda2 ...
- 【转】WCF入门教程六[一个简单的Demo]
一.前言 前面的几个章节介绍了很多理论基础,如:什么是WCF.WCF中的A.B.C.WCF的传输模式.本文从零开始和大家一起写一个小的WCF应用程序Demo. 大多框架的学习都是从增.删.改.查开始来 ...
- 【转】MFC 数据绑定 DoDataExchange( )
void CRegisterDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DAT ...
- Spring 4 官方文档学习(十一)Web MVC 框架之themes
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-themeresolver ...
- strcpy、strncpy、memcpy的区别
一.strcpy.strncpy区别 struct gpInfo { char gpcode[9]; char gpName[50]; }; string gpstr = "SZ000001 ...
- gsoap简介
gSoap是什么? 请进 官方网站 http://genivia.com/index.html 这里更直接 http://www.cs.fsu.edu/~engelen/soap.html 英语水平很 ...