title: 基本数据类型 与 引用数据类型 原理及其应用
#数据类型原理
(以 bit (字符)为单位即1/0,通常有 byte(字节) 单位,1byte=8bite)
##基本数据类型:可以表达的数据范围 都是固定的
###带符号(有正负之分)
####整数型:byte short int long (bit 数:8 16 32 64)
####浮点型:float double (bit 数:32 64)
###不带符号
####字符型:char (bit 数:16)
####布尔型:boolean 1/0(true/false)
##引用数据类型:类 接口
###所用的类,都是类型(如String/JFrame)
对比
基本数据类型声明的变量存储的都是数据
如:int n=10;n 存储对事 10 这个 十进制数的 32 位二进制编码,
如果要改变 n 的值要对这个 32bit 的二进制码做重新排列
###引用数据类型变量声明会确定一个固体空间,存储地址编码(整数)
当数据存储内存时,会占用一块内存空间,这块空间地址编码,存入变量名中。
数据类型应用(以实现登陆注册为例)
首先创建一个 UseUI类,创建一个方法和一个程序入口
public class UserUI {
public void intUser(){
}
public static void main(String[] args) {
UserUI userUI=new UserUI();
userUI.intUser();
}
接着来写方法,先创建一个窗体
JFrame jf=new JFrame();
jf.setSize(500,600);
jf.setTitle("登陆注册——作者:hyx");
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//设置布局
jf.setLayout(new FlowLayout());
//设置组建
JLabel namelab=new JLabel("账号");
JLabel pswlab=new JLabel("密码");
JTextField namein=new JTextField();
JTextField pswin=new JTextField();
Dimension dim=new Dimension(450,30);
namein.setPreferredSize(dim);
pswin.setPreferredSize(dim);
JButton Lognin=new JButton("登陆");
JButton Register=new JButton("注册")
//将组件添加到界面上
jf.add(namelab);
jf.add(namein);
jf.add(pswlab);
jf.add(pswin);
jf.add(Lognin);
jf.add(Register);
jf.setVisible(true);
接下来为按钮创建监听器,给监听器附上需要的对象,这时该对象就有了属于自己的一份属性,
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class UIListener implements ActionListener {
TextField nameIN;
TextField pswIN;
@Override
public void actionPerformed(ActionEvent e) {
String actionStr= e.getActionCommand();
System.out.println("点击了"+actionStr);
String nameStr=nameIN.getText();
String pswStr= pswIN.getText();
}
}
然后在 UserInt 方法中把监听器给两个按钮接上,
并把这边的输入框获取到的对象地址复制传给 UserListener 中的变量名
UIListener UIL=new UIListener();
Lognin.addActionListener(UIL);
Register.addActionListener(UIL);
UIListener.nameIN=namein;
UIListener.pswIN=pswin;
这时可以运行一下,看是否有误。
运行点击后有“xx 被点击”输出,则完成了按钮监听
接下来,开始分注册,和登陆实现功能
首先这里我们需要一个数据结构 ArrayList 用于储存对象;
ArrayList
即数组表,是基于数组的,是一个动态的允许增加,取出,减少的数组
常用方法:add get remove
size()(用于查看已经存了几个对象)
格式:ArrayList<> xxx=new ArrayList()
在这里建一个 User 类用于创建的对象的存放,将 User 类写在<>内便于取放
public class User {
String name;
String pwd;
public User(String name,String psw){
this.name=name;
this.pwd=psw;
}
}
然后来写注册的存入运行代码,
if(actionStr.equals("注册")){
User user=new User(nameStr,pswStr);
//这里面是将数据打包为一个对象,再存储在 list 中
useList.add(user);
JOptionPane.showMessageDialog(null,"恭喜注册为本平台第"+useList.size()+"位用户!!");
}
接着来写登陆时遍历已存入对象的代码,
if (actionStr.equals("登陆")){
for (int i = 0; i <useList.size() ; i++) {
//遍历所有已经存在的用户对象,比较用户名是否有跟输入框输入的一致
User gesture=useList.get(i);
if (gesture.name.equals(nameStr)){
if (gesture.pwd.equals(pswStr)){
JOptionPane.showMessageDialog(null,"登陆成功!!");
return;
}
}
}
}
最后再完善一下,考虑到可能有重复注册或者密码或账号重复的情况,可以在监听到点击“注册”后,
通过遍历的方法,在存入对象之前进行对比并弹出提醒。
for (int i = 0; i <useList.size() ; i++) {
//遍历对照用户是否存在和提醒
User gesture1=useList.get(i);
if (gesture1.name.equals(nameStr)){
JOptionPane.showMessageDialog(null,"账号已存在,请修改");
return;
}
if (gesture1.pwd.equals(pswStr)){
JOptionPane.showMessageDialog(null,"密码已存在,请修改");
return;
}
}
然后又考虑到可能存在没有注册的用户点击登陆后没有反应,
可以在 for语句后加上提醒弹窗,
JOptionPane.showMessageDialog(null,"该用户不存在"); return;
又考虑到存在账号正确密码错误的情况,可以在账号equals 的语句后添加
JOptionPane.showMessageDialog(null,"密码输入错误!!"); return;
到此整个“登陆”运行语句的程序为
if (actionStr.equals("登陆")){
for (int i = 0; i <useList.size() ; i++) {
//遍历对照用户
User gesture=useList.get(i);
if (gesture.name.equals(nameStr)){
if (gesture.pwd.equals(pswStr)){
JOptionPane.showMessageDialog(null,"登陆成功!!");
return;
}
//考虑到密码错误问题
JOptionPane.showMessageDialog(null,"密码输入错误!!");
return;
}
}
//考虑到账号错误或未注册
JOptionPane.showMessageDialog(null,"该用户不存在");
return;
}
运行测试
1.输入账号:hyx
密码:123
点击“登陆”,由于之前为注册故应显示“用户不存在”
接着点击“注册”,应该显示“注册成功”
如再次点击“注册”,因为已经注册,应该显示“账户已存在”
如改账号为 hy,再点击“注册”,则应显示“密码已存在”
这时再改账号为 hyx,密码为 1234,则应显示“密码错误”
到此全部验证正确。