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 ...
随机推荐
- Java GUI画圆。
package ydj; import java.awt.*; import javax.swing.*; public class huayuan extends JFrame { public h ...
- Phalcon学习-model
Model:表与表之间的关系:hasOne 一对一( $fields, $referenceModel, $referencedFields : 当前表中的字段, 对应关系模型, 对应关系模型中表的字 ...
- tomcat http协议与ajp协议
AJP13是定向包协议.因为性能原因,使用二进制格式来传输可读性文本.WEB服务器通过 TCP连接和SERVLET容器连接.为了减少进程生成 socket的花费,WEB服务器和SERVLET容器之间尝 ...
- jQuery的Cookie操作插件
jQuery的cookie插件 01 // jQuery.cookie.js 02 jQuery.cookie = function(name, value, options) { 03 if ...
- ajax传值给php
test.php <script type="text/javascript"> function selectInput(oSelect) { var value= ...
- Linux之zip压缩
1.压缩 对于test目录,使用 zip -rq test.zip test r表示递归压缩,q表示不显示过程 2.解压缩 unzip -q test.zip
- DOM编程 学习笔记(二)
学习内容: 1.document对象 2.event对象 该对象将标记型文档进行封装 该对象的作用,是对可标记型文档进行操作 常见操作,想要实现动态效果,需要对节点操作,那么先获取到这个节点,想获取节 ...
- 在windows下编译ffmpeg
编译ffmpeg,我在网上找了很多相关的方法,但最后都没编译成功. 所以下面就记录下自己的编译方法吧,留着以后编译的时候做参考. 1.首先,下载编译工具MinGW+Msys,搭建编译环境.工具下载地址 ...
- LINUX下CPU Load Average的一点研究
背景: 公司的某个系统工作在基于Linux的Cent OS下,一个host下同时连接了许多client, 最近某台Host总是显示CPU Load Average过高,我们单纯的以为是CPU的占用过高 ...
- java动态代码的实现以及Class的卸载 (转至http://dustin.iteye.com/blog/46393)
JavaWorld一篇题为 Add dynamic code to your application 的文章介绍了如何使用动态代理技术使普通的java源代码具有像jsp一样的动态编译效果,十分有趣. ...