网站首页 > 精选教程 正文
617、java类,对象,集合的介绍
本章内容只做了解,与编写淘宝整站无关,目的是让学生理解现有计算机技术,希望同学们能革故鼎新,取其优,去其糟粕。
Java中没有json,需要用对象数组转json结构,徒耗计算机资源。如有json的原生支持,将提高互联网执行速度。
类的概念其实质是结构与函数的合体。有人赞誉之,有人诋毁之。在做互联网前后端分离应用时,更多的是用json字符串构成的结构。在前后端通讯时,也只能使用字符串进行前后端的勾连,网络光纤设备是不能理解类的结构的。为了学生能看懂其他人写的程序,本节讲讲类的概念。
思考目的:如何把类构成的结构转换为json字符串,从而实现前后端交流呢?
教学视频地址:
https://www.ixigua.com/7028722184373666317?id=7098326222375289355&logTag=03f6fc517b059fc526a6
教学素材下载地址:
http://disk.1473.cn/taobaoteaching
知识点:
1、类的概念
2、实例化对象
3、重载
4、集合、数组
5、awt和util的区别
6、实例化集合
7、给集合添加对象
8、输出集合到前端
9、未完
10、下节介绍map数据类型
11、杂论
在前后端分离的情况下如何把数组类转换为字符串
1、类的概念:
定义
public class Student{
String id;
String name;
}
类形同于结构,表达复杂事物。
使用:需生成对象,实例化
Student stu1=new Student();
stu1.id="1001";
stu1.name="吴楚淮";
很不方便
学过结构体的会觉得很不方便,因其不能直接赋值,增加了劳动量,为了达到与结构体同样的赋值效果,需要额外添加2个构造函数,
构造函数与重载
public class Student{
String id;
String name;
//重载,两个函数名字一样,参数不一样。
Student(){
}
Student(String id,String name){
this.id=id;
this.name=name;
}
}
此时,可以同结构体一样使用
Student stu1=new Student();
stu1.id="1001";
stu1.name="吴楚淮";
Student stu2=new Student("0002","黄嘉森");
技术有适用范围,为了技术而盲目技术,不会带来好处,会增加工作量
2、Java中的集合(数组)
List数据类型
List是Java中比较常用的集合类,关于List接口有很多实现类,作为初学者可直接把它当做数组的概念,可直接忽略下面的介绍。
ArrayList、LinkedList和Vector之间的关系和区别。
ArrayList底层是用数组实现的,可以认为ArrayList是一个可改变大小的数组。随着越来越多的元素被添加到ArrayList中,其规模是动态增加的。
LinkedList底层是通过双向链表实现的。所以,LinkedList和ArrayList之前的区别主要就是数组和链表的区别。
Vector和ArrayList一样,都是通过数组实现的,但是Vector是线程安全的。和ArrayList相比,其中的很多方法都通过同步(synchronized)处理来保证线程安全。
awt和util的区别
java.util包 ,包含集合框架,collection 类、事件模型、日期和时间设施、国际化和数组各种实用工具类(字符串标记生成器、随机数生成器和位数组)。
java.awt包,包含用于创建用户界面和绘制图形图像的所有类。awt是abstract window toolkit抽象窗口工具集的缩写,用来编写窗口应用程序(现在一般常用awt的事件系统,而窗口内容代码放到了javax.swing包中)。
eg:List集合应当导入import java.util.List包;但也存在import java.awt.List的包。
导包的时候要注意区分。
基于以上分析,线性数据库我们使用Arraylist结构,其实例化方法为:
List<Student> stus=new ArrayList<Student>();
其添加到集合的方法为:
stus.add(stu1);
stus.add(stu2);
输出集合到前端
Java中集合转换为json字符串,没有这样的方法,因此需要引用阿里巴巴的json操作库,
即使引用了json库,可实现转换,多了无意义的转换操作,加重了服务器负担。输出到前端需要转换为字符串类型。
//转换为字符串
String str=stus.toString();
//输出到控制台的系统函数
System.out.println(str);
//返回到浏览器端。
return str;
有思俱乐部也写了一套集合转json字符串的方法,原理很简单,字符串拼凑即可实现。
集合的用法
有了集合,我们就可以对集合进行循环,访问集合中的每个元素,对集合进行排序,查找,增加,删除等操作,就可以控制集合中的每一个元素。
//定义返回到前端的字符串变量
String _str="";
//集合的使用,与数组相同,但提供了很多已经写好的方法
for(int i=0;i<stus.size();i++) {
//输出大禹1005的学号
if(stus.get(i).id.compareTo("1005")>0) {
//循环arraylist取其中一条数据的方法
_str=_str+stus.get(i).id;
}
}
源代码如下:
package cn.usestudio.controller;
import java.util.ArrayList;
import java.util.List;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSON;
//一定要添加此标识,否则找不到首页,报错
@RestController
public class DirectoryController {
//helloworld程序;
@RequestMapping(value = "/helloworld")
public @ResponseBody String hello(){
//java不支持json数据类型,此处用字符串模拟json类型。在前端转换为json。
String z= "[{'id':'1001','name':'张三'},"
+ "{'id':'1002','name':'李四'},"
+ "{'id':'1003','name':'王五'},"
+ "{'id':'1004','name':'甘铁生'},"
+ "{'id':'1005','name':'马继祖'},"
+ "{'id':'1006','name':'章汉夫'},"
+ "{'id':'1007','name':'黄强辉'},"
+ "{'id':'1008','name':'马宏宇'},"
+ "{'id':'1009','name':'谢大海'},"
+ "{'id':'1010','name':'吕显祖'}"
+ "]";
//类的实例化方法,默认实例化方法,可不申明,如添加了新的实例方法,则必须在类中显性申明此方法
Student stu1=new Student();
stu1.id="1001";
stu1.name="张三";
//类的实例化方法,需要编写相应构造函数
Student stu2=new Student("0002","李四");
Student stu3=new Student("0003","王五");
Student stu4=new Student("0004","甘铁生");
Student stu5=new Student("0005","马继祖");
Student stu6=new Student("0006","章汉夫");
Student stu7=new Student("0007","黄强辉");
Student stu8=new Student("0008","马宏宇");
Student stu9=new Student("0009","谢大海");
Student stu10=new Student("0010","吕显祖");
List<Student> stus=new ArrayList<Student>();
stus.add(stu1);
stus.add(stu2);
stus.add(stu3);
stus.add(stu4);
stus.add(stu5);
stus.add(stu6);
stus.add(stu7);
stus.add(stu8);
stus.add(stu9);
stus.add(stu10);
//java中没有集合转换为json的方法,因此需要引用阿里巴巴的json操作库,
//引用了json库,可实现转换,多了无意义的转换操作,加重了服务器负担。
//下节介绍map数据类型,同样是为学生的学习做铺垫,并不会用于项目中。
String str=stus.toString();
//定义返回到前端的字符串变量
String _str="";
//集合的使用,与数组相同,但提供了很多已经写好的方法
for(int i=0;i<stus.size();i++) {
//输出大禹1005的学号
if(stus.get(i).id.compareTo("1005")>0) {
//循环arraylist取其中一条数据的方法
_str=_str+stus.get(i).id;
}
}
//输出到控制台的系统函数
System.out.println(_str);
//返回到浏览器端。
return _str;
}
public class Student{
String id;
String name;
//构造函数:函数名与类名相同。
//重载,两个函数名称相同,参数不同。
Student(){
}
Student(String id,String name){
this.id=id;
this.name=name;
}
}
}
未完
完了吗?没有,因为前端需要json结构,集合是复杂类型,还需要转换为json。由此看出,本节讲述的类的概念在实际项目中起到的是中转站的作用。如果后端能直接支持json,是否可节约计算机计算时间?有待各位学者努力,提出后端直接处理json的方法,既提高计算速度,又能让程序员不再兜兜转转,徒耗精力。
下节介绍map数据类型,同样是为学生的学习做铺垫,并不会用于项目中。
杂论
关于类和对象的作用
在互联网中的引用,此处有一段对话比较有意思。
在很多程序中,都喜欢定义一个private变量,然后为这个私有变量加上get(),set()方法。那为什么不直接定义一个public变量呢?这样做到底有什么好处和意义呢?难道真的仅仅只是为了代码规范?别逗了,不管你信不信,反正我是不信!带着这个问题我在网上寻找答案,真是众说纷纭啊,每个人都能说出一点点道理,但是却都不足以说服我!(所以在这里做一些总结,和大家分享,我们共同学习,共同进步。如果有什么想法和意见,也欢迎大家提出来,我们一起交流。)
其中看到有这样一种说法: “get()和set()方法起到对外界封闭的作用,举个例子:假如你的裤兜里有很多钱,你肯定不会让别人都来掏,肯定只有自己能拿到,或者你拿出来给他,set和get就相当与你的手 而你类里的变量就相当与你兜里的钱,对于外面的人来说不知道你类里有什么他就知道调用这个get会给他一个什么东西”
哇!貌似回答得很专业,很形象,很生动,很有道理啊,差一点我就要膜拜了,但是就在千钧一发的时刻,我冷静了下来。TNN的,差点就被你给忽悠了,这个举例完全没有回答实质性的问题嘛,会举例子的人伤不起啊~~(>_<)~~ 。如果一定要把get()和set()比喻成手的话,也不能比喻成你自己的手,因为get()和set()方法也是public属性的,谁都可以调用,也就是说任何人的手都还是可以拿到你的钱,那和直接把变量设成public有什么区别吗?至于对外面的人来说知不知道你类里有什么,这个只是变量命名规范问题而已,和属性不存在半毛钱关系吧?想让人看见和更改的变量就设成public,不想让人看见和更改的就设成privtata,已经很天衣无缝了,为什么还要get(),set()方法呢? 我又迷茫了,带着依依不舍的心情,我离开了这位大神,继续寻找答案。
结论,类是结构与函数的封装,便于团队协作,用传统的结构与函数完全可以达到相同目的,代码更精简。
大道至简,程序用不到而强行使用类和对象,只是照本宣科,不足道矣!
- 上一篇: 聊聊最近面试中遇到的算法题:公平的随机
- 下一篇: Java中生成唯一ID的方法(java 生成id)
猜你喜欢
- 2024-11-16 Java编程从零开始07 数组的基本算法(查找和排序)
- 2024-11-16 Java练习:一个猜数游戏(java猜数游戏程序)
- 2024-11-16 Java中生成唯一ID的方法(java 生成id)
- 2024-11-16 聊聊最近面试中遇到的算法题:公平的随机
- 2024-11-16 Java实现7种常见密码算法(java密码加密哪种方式最安全)
- 2024-11-16 JAVA入门:零基础实现幸运抽奖功能
- 2024-11-16 Hive 自定UDF函数,生成 32 位随机数
- 2024-11-16 四十三、Java常用类-Random类:深入理解与实践指南
- 2024-11-16 在程序中用的随机数,足够随机吗?
- 2024-11-16 用java实现跳表SkipList(跳表 java实现)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)