零、绪论:

  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. TCPdump抓包命令详解

    http://starsliao.blog.163.com/blog/static/89048201062333032563/ TCPdump抓包命令 tcpdump是一个用于截取网络分组,并输出分组 ...

  2. springmvc拦截器的配置、使用

    springmvc拦截器的配置.使用:1.自定义拦截器,实现HandlerInterceptor接口. package com.bybo.aca.web.interceptor; import jav ...

  3. npm常用命令汇总

    npm是一个node包管理和分发工具,已经成为了非官方的发布node模块(包)的标准. 有了npm,可以很快的找到特定服务要使用的包,进行下载.安装以及管理已经安装的包. 1.npm install ...

  4. MySQL多表数据记录查询详解

    在实际应用中,经常需要实现在一个查询语句中显示多张表的数据,这就是所谓的多表数据记录连接查询,简称来年将诶查询. 在具体实现连接查询操作时,首先将两个或两个以上的表按照某个条件连接起来,然后再查询到所 ...

  5. Python版本,pip版本手动管理

    http://blog.csdn.net/jiandanjinxin/article/details/53175121

  6. Spring 4 官方文档学习(十)数据访问之DAO支持

    1.介绍 Spring 中 Data Access Object (DAO)支持 的目标是以一种一致的方式更简单的使用JDBC.Hibernate.JPA或JDO等数据访问技术.可以在前面说的几种数据 ...

  7. 谷哥的小弟学后台(04)——MySQL(4)

    探索Android软键盘的疑难杂症 深入探讨Android异步精髓Handler 具体解释Android主流框架不可或缺的基石 站在源代码的肩膀上全解Scroller工作机制 Android多分辨率适 ...

  8. 转载: erlang连接mysql

    转自:http://blog.csdn.net/flyinmind/article/details/7740540 项目中用到erlang,同时也用到mysql.惯例,google. 但是,按照网上说 ...

  9. circRNA 序列提取中的难点

    在预测circRNA时,都是检测breakpoint 处的reads 数,最后给出的环状RNA的ID 都是诸如 chr14:106994222-107183708 这样的形式,给出了起始和终止位置: ...

  10. 手动安装OpenStack Mistral

    Prepare packages: $ sudo apt-get install python-dev python-setuptools python-pip libffi-dev libxslt1 ...