文档章节

Java-J2SE常用的类和方法复习

pmos
 pmos
发布于 2016/05/11 16:05
字数 2301
阅读 86
收藏 5
点赞 2
评论 0

1、随机数

	public static void main(String[] args) {
		//Math.random()会得到一个0-1之间double类型的值
		System.out.println(Math.random());
		//获取[0-9]之间的整数
		System.out.println((int)(Math.random()*10));
		for(int i=0;i<100;i++) {
			System.out.println(randomRange(18,28));
		}
	}
	
	//获取两个数之间的随机数
	public static int randomRange(int start,int end) {
		return (int)(Math.random()*(end-start)+start);
	}

2、Object:所有类都默认继承Object

    2.1、toString()方法

        当输出对象时会自动调用该对象的toString()方法打印信息,如果希望按照自己的需求进行对象信息的显示,可以在子类中覆盖父类的toString()方法。

    

		System.out.println(p2.toString());
		//说明输出对象的时候,会自动调用对象的toString()方法
		//输出id:XXX,name:XXX,直接在子类中覆盖toString()方法即可
		System.out.println(p);


class Person {
	int id;
	String name;
	
	public Person(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}

	@Override
	public String toString() {
		return "id:"+id+",name:"+name;
	}

    2.2、equals()

        使用equals()方法可以比较两个对象是否相等,如果子类没有覆盖父类的equals()方法,会默认调用==进行比较。

    

		String str3 = new String("456");
		String str4 = new String("456");
		//==表示两个引用是否指向同一块内存
		System.out.println(str3==str4);
		//比较两个字符串的值是否相等
		//String可以通过equals()比较两个对象的内容是否相等,是因为
		//String覆盖了父类的equals()方法
		System.out.println(str3.equals(str4));

class Person {
	int id;
	String name;
	
	public Person(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}

	@Override
	public String toString() {
		return "id:"+id+",name:"+name;
	}

	@Override
	public boolean equals(Object obj) {
		Person person = (Person)obj;
		return this.id==person.id;
	}

    比较两个对象是否相等,首先需要覆盖equals()方法还要覆盖hashCode()方法。

    

	@Override
	public boolean equals(Object obj) {
		Person person = (Person)obj;
		//return this.id==person.id;
		//判断name相同两个person对象就相同
		return this.name.equals(person.name);
	}

	@Override
	public int hashCode() {
		//return id;
		return name.hashCode();
	}

main函数

main函数中的args参数用来在运行时传入一些值改变其函数的方法。

	//args用来存储运行时的参数,可以在运行时指定相应的参数,使用空格来分分隔
	public static void main(String[] args) {
		/*
		System.out.println(args.length);
		for(String arg:args) {
			System.out.println(arg);
		}
		*/

		try{
		    //字符串转换为int
		    //转换时会抛出相应的NumberFormatException异常
		    int r = Integer.parseInt(args[0])+Integer.parseInt(args[1]);
		    System.out.println(r);
		}catch (NumberFormatException e)
		{
			System.out.println("请输入正确的参数");
		}

String

String内存

		String str1 = new String("123");
		String str2 = new String("123");
		//str1和str2指向不同的内存
		System.out.println(str1==str2);
		System.out.println(str1.equals(str2));
		
		String str3 = "123";
		String str4 = "123";
		System.out.println(str3==str4);//str3和str4指向同一块内存
		System.out.println(str3.equals(str4));
		
		str3 = "234";
		str4 = "456";
		str4 = "789";
		String str5 = "456";

		/**
		 * 由于String是字符串常量,每新建一个字符串就会分配一块内存
		 * 此时以下循环会分配100块内存,但是只有在最后一块被使用,
		 * 而且String pool中的内存不会被回收,
		 * 所以如果进行大量字符串叠加,请不要使用以下方法
		 */
		String str6 = "";
		for(int i=0;i<100;i++) {
			str6+=i;
		}
		System.out.println(str6);

StringBuilder:使用StringBuilder来连接字符串

		StringBuilder sb = new StringBuilder("abc");
		for(int i=0;i<100;i++) {
			//使用append()连接
			sb.append(i);
		}
		System.out.println(sb);
		
		String str1 = "123";
		String str2 = "456";
		String str3 = "789";
		StringBuilder sb1 = new StringBuilder();
		//StringBuilder支持链式编程
		sb1.append(str1).append(str2);
		//sb1和sb2指向同一块内存
		StringBuilder sb2 = sb1;
		sb2.append(str3);
		System.out.println(sb1);

String的常用方法

		String word = "hello kk , welcome to china";
		//通过字符串将其拆分为数组
		String[] strs = word.split(" ");
		System.out.println(strs.length);
		for(String str:strs) {
			System.out.println(str);
		}
		String user = "系统管理员,文章发布人员,系统用户";
		String[] rs = user.split(",");
		for(String r:rs) {
			System.out.println(r);
		}
		//希望获取一个文件的后缀-->h.txt
		String str = "sad.sah.txt";
		//1、截取子串:开始包含,结束不包含
		System.out.println(str.substring(0,2));
		//2、获取某个字符串的位置,从0开始,如果字符串不存在返回-1
		System.out.println(str.indexOf("sdcs"));
		//从后向前获取某个字符串的位置,如果不存在返回-1
		System.out.println(str.lastIndexOf("."));
		
		System.out.println(str.substring(str.indexOf(".")+1));
		System.out.println(str.substring(str.lastIndexOf(".")+1));
		System.out.println(getFileType(str));

文件名的处理

	private static List<String> accTypes = Arrays
			.asList("jpg","bmp","gif","doc","docx","rar","xls","xlsx");
	
	public static void main(String[] args) {
		for(String str:args) {
			//判断文件是否可以传入
			if(accTypes.contains(getFileType(str))) {
				System.out.println("可以传入的类型:"+str);
			} else {
				System.out.println("不可以传入的类型:"+str);
			}
		}
	}
	
	//获取文件的后缀名
	public static String getFileType(String filename) {
		int pos = filename.indexOf(".");
		if(pos==-1) {
			return null;
		}
		return filename.substring(pos+1);
	}

日期的处理

		try {
			//定义一种日期的显示格式
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
			Date d = new Date();
			//将日期对象格式化为一个字符串对象,按照SimpleDateFormat中设置的格式
			System.out.println(sdf2.format(d));
			//创建一个日期的字符串对象
			String str = "1979-2-12 12:22:34";
			//将字符串转换为日期,使用sdf中的格式,注意如果格式不符,会抛出异常
			System.out.println(sdf.parse(str));
		} catch (ParseException e) {
			e.printStackTrace();
		}
		try {
			Date d = new Date();
			//通过1970-1-1 0:0来计算到今天的毫秒数
			System.out.println(d.getTime());
			long times = d.getTime();
			System.out.println(times);
			
			String olp = "2016-6-18";
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			long endTime = sdf.parse(olp).getTime();
			//通过两个time可以获取两个时间的差别,得到的是毫秒数
			long st = endTime-times;
			System.out.println(st/(1000*60*60*24));
		} catch (ParseException e) {
			e.printStackTrace();
		}

Collections

		List<String> songs = new ArrayList<String>();
		//快速添加列表
		Collections.addAll(songs, "明天会更好","怒放的生命","飞得更高","相信自己","明天的明天");
		//为列表排序
		Collections.sort(songs);
		//随机排序
		//Collections.shuffle(songs);
		Collections.reverse(songs);
		
		Collections.swap(songs, 2, 4);
		printList(songs);

对象排序1

//要进行Collections的排序,对象得实现Comparable接口,
//并且覆盖CompareTo()方法
class Song implements Comparable<Song> {
	
	private int id;
	private String name;
	private String songer;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSonger() {
		return songer;
	}
	public void setSonger(String songer) {
		this.songer = songer;
	}
	
	public Song(int id, String name, String songer) {
		super();
		this.id = id;
		this.name = name;
		this.songer = songer;
	}
	
	public Song() {
		super();
	}
	
	@Override
	public String toString() {
		return "Song [id=" + id + ", name=" + name + ", songer=" + songer + "]";
	}
	
	@Override
	public int compareTo(Song o) {
		/*
		 * 说明:
		 * 拿this来和o比较,如果返回1表示this比0大,如果返回-1表示this比0小,
		 * 如果返回0表示一样大
		 */
		//会使用this和o比较,如果返回的值>1表示顺序排序,返回值是<1的数表示倒序
//		if(this.id>o.id) return 1;
//		else if(this.id<o.id) return -1;
//		else return 0;
		
//		return this.getName().compareTo(o.getName());
		return this.getSonger().compareTo(o.songer);
	}

这种方法的排序仅仅只能针对一个属性排序,如果希望根据其它属性排序,需要修改CompareTo()方法。

对象排序2

//实现Comparator接口,可以专门针对一个对象写多种排序方式,
//compare()方法中的两个对象可以把第一个参数看作this,
//第二个参数看作o
class SongNameCompare implements Comparator<Song> {

	@Override
	public int compare(Song o1, Song o2) {
		return o1.getName().compareTo(o2.getName());
	}
	
}

class SongerCompare implements Comparator<Song> {

	@Override
	public int compare(Song o1, Song o2) {
		return o1.getSonger().compareTo(o2.getSonger());
	}
	
}

class IdCompare implements Comparator<Song> {

	@Override
	public int compare(Song o1, Song o2) {
		return o1.getId()>o2.getId()?1:(o1.getId()<o2.getId()?-1:0);
	}
	
}
		List<Song> songs = new ArrayList<Song>();
		songs.add(new Song(111,"爱你一万年","刘德华"));
		songs.add(new Song(1121,"忘情水","刘德华"));
		songs.add(new Song(222,"吻别","张学友"));
		songs.add(new Song(232,"一千个伤心的理由","张学友"));
		songs.add(new Song(33,"突然的自我","伍佰"));
		songs.add(new Song(34,"挪威森林","伍佰"));
		songs.add(new Song(44,"心太软","任贤齐"));
		songs.add(new Song(55,"有多少爱可以重来","迪克牛仔"));
		
		//传递一个实现了Comparator接口的实现类,来在运行时进行排序
//		Collections.sort(songs, new SongNameCompare());
//		Collections.sort(songs, new SongerCompare());
		Collections.sort(songs, new IdCompare());

JTable的使用

1、常规的方式

常规的方式就是定义表格表头和表格的元素

其中表格的表头使用一个Vector的列表来存储

表格中的元素使用一个Vector来存储,Vector中的每一个元素还是一个Vector

		//放置每一列的名称
		Vector<String> columnNames = new Vector<String>();
		columnNames.add("用户名");
		columnNames.add("用户密码");
		columnNames.add("用户昵称");
		//放置表格中的元素
		Vector<Vector<String>> rowData = new Vector<Vector<String>>();
		//表格中的每一行的数据
		Vector<String> ue = new Vector<String>();
		ue.add("ts");
		ue.add("123");
		ue.add("唐僧");
		rowData.add(ue);
		ue = new Vector<String>();
		ue.add("wk");
		ue.add("123");
		ue.add("悟空");
		rowData.add(ue);
		ue = new Vector<String>();
		ue.add("bj");
		ue.add("123");
		ue.add("八戒");
		rowData.add(ue);
		ue = new Vector<String>();
		ue.add("ss");
		ue.add("123");
		ue.add("沙僧");
		rowData.add(ue);
		jt = new JTable(rowData,columnNames);
		jsp = new JScrollPane(jt);
		this.add(jsp);

2、基于TableModel的模式

定义一个类继承AbstractTableModel

@SuppressWarnings("serial")
public class MyTableModel extends AbstractTableModel {
	Vector<String> columnNames;
	Vector<Vector<String>> rowData;

初始化数据

和常规的方式类似,进行数据的初始化操作

	//同样需要列和行
	Vector<String> columnNames;
	Vector<Vector<String>> rowData;
	
	public MyTableModel() {
		columnNames = new Vector<String>();
		rowData = new Vector<Vector<String>>();
		initData();
	}
	
	//和常规的操作一样进行数据的初始化操作
	private void initData() {
		columnNames.add("用户名");
		columnNames.add("用户密码");
		columnNames.add("用户昵称");
		Vector<String> ue = new Vector<String>();
		ue.add("ts");
		ue.add("123");
		ue.add("唐僧");
		rowData.add(ue);
		ue = new Vector<String>();
		ue.add("wk");
		ue.add("123");
		ue.add("悟空");
		rowData.add(ue);
		ue = new Vector<String>();
		ue.add("bj");
		ue.add("123");
		ue.add("八戒");
		rowData.add(ue);
		ue = new Vector<String>();
		ue.add("ss");
		ue.add("123");
		ue.add("沙僧");
		rowData.add(ue);
	}

覆盖几个基本的方法

	//返回一个行的数量
	@Override
	public int getRowCount() {
		return rowData.size();
	}
	//返回一个列的数量
	@Override
	public int getColumnCount() {
		return columnNames.size();
	}
	//获取某一行某一列的值
	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		return rowData.get(rowIndex).get(columnIndex);
	}
	//说明每一列的名称
	//该方法不是必须覆盖的,如果不覆盖,表格的表头就是A,B,C
	@Override
	public String getColumnName(int column) {
		return columnNames.get(column);
	}

创建表格时使用自己定义的Model

jt = new JTable(new MyTableModel());

 

© 著作权归作者所有

共有 人打赏支持
pmos
粉丝 12
博文 111
码字总数 208836
作品 0
其它
项目经理
百词斩Java程序员面试11个问题,你会几个?2018-04-10

近日,我们在w3cschool app开发者头条上,可以看到百词斩Java程序员面经。 在分享百词斩Java面经前,w3cschool特别给程序员小伙伴们带来一些Java学习干货: 0、学习Java必备的3大神器 如果你...

W3Cschool ⋅ 04/10 ⋅ 0

培训云计算学校,虚拟机基本结构讲解

我们要对JVM虚拟机的结构有一个感性的认知。毕竟我们不是编程人员,认知程度达不到那么深入。一个运行时的Java虚拟机实例的天职是:负责运行一个java程序。当启动一个Java程序时,一个虚拟机...

长沙千锋 ⋅ 05/17 ⋅ 0

Java编程基础知识点和技术点归纳

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/23 ⋅ 0

Android JNI学习(三)——Java与Native相互调用

本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Native相互调用 Android JNI学习(四)——JNI的常用方法...

隔壁老李头 ⋅ 05/09 ⋅ 0

14、Java并发性和多线程-Java ThreadLocal

以下内容转自http://ifeve.com/java-theadlocal/: Java中的ThreadLocal类可以让你创建的变量只被同一个线程进行读和写操作。因此,尽管有两个线程同时执行一段相同的代码,而且这段代码又有...

easonjim ⋅ 2017/06/16 ⋅ 0

Java基础|Java特性与HelloWorld运行流程

【Java基础】 Java语言特点:(着重了解两个)开源、跨平台。 跨平台如何实现:通过JVM实现,JVM充当Java和不同OS之间的翻译器,不同OS对应不同JVM。 Java语言的平台:JavaSE、JavaME(Androi...

darlingwood2013 ⋅ 05/29 ⋅ 0

【目录导航】JAVA零基础进阶之路

【JAVA零基础入门系列】(已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 Day4 变量与常量 Day5 Java中的运算符 Day6 Java字符串 Day7 Java输入与输出...

MFrank ⋅ 06/21 ⋅ 0

深入理解Java虚拟机的体系结构

JAVA虚拟机的生命周期 一个运行时的Java虚拟机实例的天职是:负责运行一个java程序。当启动一个Java程序时,一个虚拟机实例也就诞生了。当该程序关闭退出,这个虚拟机实例也就随之消亡。如果...

java进阶 ⋅ 06/22 ⋅ 0

java程序员基础进阶篇,万丈高楼平地起

一.final,finally,finalize 三者区别 Final是一个修饰符: 当final修饰一个变量的时候,变量变成一个常量,它不能被二次赋值 当final修饰的变量为静态变量(即由static修饰)时,必须在声明这...

启示录是真的 ⋅ 05/26 ⋅ 0

升级到JDK9的一个BUG,你了解吗

概述 前几天在一个群里看到一个朋友发了一个demo,说是JDK的bug,昨天在JVM的一个群里又有朋友发了,觉得挺有意思,分享给大家,希望大家升级JDK的版本的时候注意下是否存在这样的代码,如果...

你假笨 ⋅ 06/06 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

istio 文档

https://istio.io/docs/concepts/ https://istio.io/docs/concepts/traffic-management/handling-failures/ https://istio.io/docs/concepts/traffic-management/rules-configuration/......

xiaomin0322 ⋅ 11分钟前 ⋅ 0

编程语言的作用及与操作系统和硬件的关系

一、编程语言的作用及与操作系统和硬件的关系 作用:编程语言是计算机语言,是一种程序员与计算机之间沟通的介质,通过编程语言可以使得计算机能够根据人的指令一步一步去工作,完成某种特定...

slagga ⋅ 22分钟前 ⋅ 0

runtime实现按钮点击事件

也不能说是实现吧,,,就是有点类似于RAC里边的写法,不用给btn添加另外的点击事件,就那个add...select...这样子很不友好,来看下代码: [self.btn handleControlEvent:UIControlEventTou...

RainOrz ⋅ 22分钟前 ⋅ 0

Windows系统运维转linux系统运维的经历

开篇之前,首先介绍一下我的背景把:我是一个三线城市的甲方运维。最近,在《Linux就该这么学》书籍的影响下和朋友小A(Linux运维已经三年了,工资也比我的高很多)的影响下,决定转行。最近...

linux-tao ⋅ 23分钟前 ⋅ 0

zip压缩工具,tar打包工具

zip压缩工具 zip打包工具跟前面说到的gzip,bz2,xz 工具最大的不一样是zip可以压缩目录。如果没有安装,需要使用yum install -y zip 来安装。安装完之后就可以直接使用了,跟之前提到的压缩...

李超小牛子 ⋅ 31分钟前 ⋅ 0

使用npm发布自己的npm组件包

一、注册npm账号 官网:https://www.npmjs.com/signup 注册之后需要进行邮箱验证,否则后面进行组件包发布时候会提示403错误,让进行邮箱核准。 二、本地新建一个文件夹,cd进入后使用npm i...

灰白发 ⋅ 33分钟前 ⋅ 0

010. 深入JVM学习—垃圾收集策略概览

1. 新生代可用GC策略 1. 串行GC(Serial Copying) 算法:复制(Copying)清理算法; 操作步骤: 扫描年轻代中所有存活的对象; 使用Minor GC进行垃圾回收,同时将存活对象保存到“S0”或“S...

影狼 ⋅ 33分钟前 ⋅ 0

JVM性能调优实践——JVM篇

在遇到实际性能问题时,除了关注系统性能指标。还要结合应用程序的系统的日志、堆栈信息、GClog、threaddump等数据进行问题分析和定位。关于性能指标分析可以参考前一篇JVM性能调优实践——性...

Java小铺 ⋅ 34分钟前 ⋅ 0

误关了gitlab sign-in 功能的恢复记录

本想关sign-up的,误点了sign-in 退出后登录界面提示: No authentication methods configured 一脸懵逼.. 百度后众多方案说修改application_settings 的 signin_enabled字段; 实际上新版本字段...

铂金蛋蛋 ⋅ 35分钟前 ⋅ 0

登录后,后续请求接口没有带登录cookie可能原因

1.XMLHttpRequest.withCredentials没设置好,参考https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/withCredentials...

LM_Mike ⋅ 35分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部