零、绪论:

  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初学者笔记一:元类、获取类型、枚举的更多相关文章

  1. Java初学者笔记

    Java初学者笔记 前提:认识汉字,认识英语单词,会用键盘打字 ------------------------------- 端口是什么: --------面向对象编程(OOP) 接口”(Inter ...

  2. 【原】Java学习笔记031 - 常用类

    package cn.temptation; public class Sample01 { public static void main(String[] args) { /* * 类 Math: ...

  3. Java初学者笔记六:反射

    Java反射基础 零.基础类代码 import java.io.*; import java.lang.reflect.*; class father{ public String fName; fa ...

  4. java学习笔记7--抽象类与抽象方法

    接着前面的学习: java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) jav ...

  5. 1.9(java学习笔记)object类及toString()与equals()方法

    object类 java中objec是所有类公共的父类,一个类只要没有明显的继承某一类,那么它就是继承object类. 例如 class Person {......};和class Person e ...

  6. Java学习笔记day06_自定义类_ArrayList

    1.自定义类class 使用类的形式, 对现实中的事物进行描述. 类是引用数据类型. 事物: 方法,变量. 方法:事物具备的功能. 变量:事物的属性. 格式: public class 类名{ //属 ...

  7. 面向对象相关概念与在python中的面向对象知识(魔法方法+反射+元类+鸭子类型)

    面向对象知识 封装 封装的原理是,其成员变量代表对象的属性,方法代表这个对象的动作真正的封装是,经过深入的思考,做出良好的抽象(设计属性时用到),给出“完整且最小”的接口,并使得内部细节可以对外透明( ...

  8. Java学习笔记(2)——有关类

    Java类的高级特性: {Java管理文件机制:类包. 同一个包中的类互相访问时,可以不指定包名. 同一个包中的类不必存放在同一位置,如com.lang.class1和com.lang.class2可 ...

  9. 廖雪峰Python学习笔记——使用元类

    元类(MetaClasses) 元类提供了一个改变Python类行为的有效方式. 元类的定义是“一个类的类”.任何实例是它自己的类都是元类. class demo(object): pass obj ...

随机推荐

  1. ES6 学习笔记 (2)-- Liunx环境安装Node.js 与 搭建 Node.js 开发环境

    笔记参考来源:廖雪峰老师的javascript全栈教程 一.安装Node.js 目前Node.js的最新版本是6.2.x.首先,从Node.js官网下载对应平台的安装程序. 1.下载 选择对应的Liu ...

  2. synchronize模块

    synchronize模块 使用rsync同步文件,其参数如下: archive: 归档,相当于同时开启recursive(递归).links.perms.times.owner.group.-D选项 ...

  3. BeamNG.drive物理引擎评鉴

    BeamNG.drive是一款由BeamNG公司开发并于2013年首次发布的软体物理模拟游戏.作为模拟游戏,特别是物理模拟的粉丝,我早早就开始使用BeamNG.drive.我立即对崩溃的准确性和细节印 ...

  4. DataGridView:DataGridView控件清空绑定的数据

    使用DataGridView控件绑定数据后有时需要清空绑定的数据,在清除DataGridView绑定的数据时: 1.设置DataSource为null this.dgvDemo.DataSource ...

  5. MongoDB · 引擎特性 · MongoDB索引原理

    MongoDB · 引擎特性 · MongoDB索引原理数据库内核月报原文链接 http://mysql.taobao.org/monthly/2018/09/06/ 为什么需要索引?当你抱怨Mong ...

  6. java英文缩写

    JSR Java Specification Request Java规范请求 POJO Plain Old Java Object  简单的Java对象

  7. oracle jar

    关于oracle 11g jdbc驱动 的jar包 (2012-11-21 11:17:41)转载▼ 标签: 杂谈 分类:java学习 oracle11的jdbc\lib下没有classer12.ja ...

  8. sdut2852 小鑫去爬山9dp入门)

    #include<stdio.h> int a[100][100]; int main() { int n; while(scanf("%d",&n)!=EOF ...

  9. enumerate遍历列表

    enumerate 函数用于遍历序列中的元素以及它们的下标: >>> for i,j in enumerate(('a','b','c')):  print i,j 0 a 1 b ...

  10. erlang 自定义函数的初步应用

    一.模块内调用 1> AA=fun(BB)-> io:format("this is test args ~s~n",[BB]) end.#Fun<erl_eva ...