java基础学习笔记(三)
1、装箱和拆箱
所有基本类型都有对应的类类型,比如int对应的类是Integer,这种类就叫做封装类。数字封装类有Byte、Short、Integer、Long、Float、Double这些类都是抽象类Number的子类。封装类和基本类型之间可以相互转换,而基本类型自动转封装类型就叫装箱,反之则是拆箱,代码如下
int i = 5;//基本类型转换成封装类型Integer it = new Integer(i);//自动转换就叫装箱,通过=符号Integer it2 = i;//Integer是Number的子类,所以打印trueSystem.out.println(it instanceof Number);//封装类型转换成基本类型int i2 = it.intValue();
2、字符串转换:数字转字符串:方法一使用String 类的静态方法valueOf(); 方法二是把基本类型装箱为封装类型,然后调用封装类类型的toString();
int i = 5;String str = String.valueOf(i);//方法一使用封装类的valueOf方法Integer it = i; //自动转换装箱String str2 = it.toString(); //调用字符串封装类的toString方法
3、数学方法:java.lang.Math提供了一些常用的数学运算方法,并且都是以静态方法的形式存在。如Math.round()是四省五入,Math.sqrt(9)是开平方,Math.pow(2,4)是2的4次方,Math.E是自然常数。
4、格式化输出:输出时如果变量过多时会用字符串拼接,拼接会显得繁琐,另一种解决方式是格式化输出,printf和format能够达到一模一样的效果,其中%s表示字符串,%d表示数字,%n表示换行。如下:
String sentenceFormat="%s 在进行了连续 %d 次击杀后,获得了 %s 的称号%n";
System.out.printf(sentenceFormat, "teemo", 5,"超神");
System.out.format(sentenceFormat, "teemo", 5,"超神");
5、Char基本类型对应的封装类型是Character,Character常用静态方法如下:
System.out.println(Character.isLetter('a'));//判断是否为字母System.out.println(Character.isDigit('a')); //判断是否为数字System.out.println(Character.isWhitespace(' ')); //是否是空白System.out.println(Character.isUpperCase('a')); //是否是大写System.out.println(Character.isLowerCase('a')); //是否是小写System.out.println(Character.toUpperCase('a')); //转换为大写System.out.println(Character.toLowerCase('A')); //转换为小写String a = 'a'; //不能够直接把一个字符转换成字符串String a2 = Character.toString('a'); //转换为字符串
6、字符串使用:String 被修饰为final,所以不能被继承。String的成员变量是private final 的,所以String 是immutable的,表现像个常量。如String s=”abc”;s=”123”;字符串创建的内容并没有改变,s引用指向发生改变了,“abc”和“123”是两个字符串对象,在内存空间上占两个位置。
7、获取随机字符串的多种方法:
ASCII码对照表
方法1,思路是随机获取字母数字ASCII码数对应范围内的数,判断是否是字母或数字,循环获取5个满足要求的字符拼接成字符串
char cs[] = new char[5];short start = '0';short end = 'z'+1;for (int i = 0; i < cs.length; i++) {while (true) {char c = (char) ((Math.random() * (end - start)) + start);if (Character.isLetter(c) || Character.isDigit(c)) {cs[i] = c;break;}}}String result = new String(cs);System.out.println(result);
方法2,思路是将所有数字、字母字符拼接成一个字符串,再随机获取字符
String pool = "";for (short i = '0'; i <= '9'; i++) {pool+=(char)i;}for (short i = 'a'; i <= 'z'; i++) {pool+=(char)i;}for (short i = 'A'; i <= 'Z'; i++) {pool+=(char)i;}char cs2[] = new char[5];for (int i = 0; i < cs2.length; i++) {int index = (int) (Math.random()*pool.length());cs2[i] = pool.charAt( index );}String result2 = new String(cs2);System.out.println(result2);
方法3:思路是在数字字母分块对应的ASCII码数值间获取随机数,循环多次获取随机数转换成字符拼接成字符串
public class TestNumber {public static void main(String[] args) {// TODO Auto-generated method stubchar[] chars = new char[5]; // 创建字符数组,每一个字符都将随机获取String str = ""; // 空字符串用来最后组合随机字符的for (int i = 0; i < chars.length; i++) {chars[i] = getRadomChar();str += chars[i];}System.out.println(str);}public static char getRadomChar() {int m1 = (int) (Math.random() * (90 - 65)) + 65;int m2 = (int) (Math.random() * (57 - 48)) + 48;int m3 = (int) (Math.random() * (122 - 97)) + 97;int[] m = { m1, m2, m3 };int index = (int) Math.floor((Math.random() * 3));char c = (char) m[index];System.out.println(c);return c;}}
其中
public static void main(String[] args) {//获取拼接好的所有字符//在for循环中采用StringBuilder比用String的 `+=`高效;StringBuilder strPool_tmp = new StringBuilder(); for(short i='0';i<'z';i++) {if(Character.isLetter((char)i)||Character.isDigit((char)i)) {strPool_tmp.append((char)i);}}System.out.println(strPool_tmp.toString());}
8、穷举法(枚举法):
枚举法是在分析问题时,逐个列举出所有可能情况,然后根据条件判断此答案是否合适,合适就保留,不合适就丢弃,最后得出一般结论。主要利用计算机运算速度快、精确度高的特点,对要解决问题的所有可能情况,一个不漏地进行检验,从中找出符合要求的答案,因此枚举法是通过牺牲时间来换取答案的全面性。
说白了,就是通过循环或者递归,把所有可能的情况过一遍,符合条件就留下,不符合继续找。
9、递归算法。递归的基本思想是把规模大的问题转化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了调用它自身的情况。递归是利用系统的堆栈保存函数当中的局部变量来解决问题的,因为函数调用的开销,递归常常会带来效率问题。
//斐波拉契数列问题。找出数列中指定index位置的数值 1,1,2,3,5,8,13,21,34,55public static int getNum(int testNum) { if(testNum<3) {return 1;}else {return getNum(testNum-1)+getNum(testNum-2);}}
10、字符串方法:
charAt(int index)获取指定位置的字符;toCharArray()是将字符串转换为对应的字符数组;subString 截取子字符串;split 根据分隔符进行分隔生成字符串数组;trim 去掉首尾空格后返回新的字符串;toLowerCase 返回全部变成小写 ,toUpperCase 返回全部变成大写的字符串;indexOf 判断字符或者子字符串出现的位置;contains 是否包含子字符串;replaceAll 替换所有的 ,replaceFirst 只替换第一个;
public class TestString {public static void main(String[] args) {// TODO Auto-generated method stubString sentence = "盖伦,在进行了连续8次击杀后,获得了 超神 的称号";char c = sentence.charAt(0);System.out.println(c); //输出 盖char[] cs = sentence.toCharArray(); //获取对应的字符数组System.out.println(sentence.length() == cs.length); //截取从第3个开始的字符串 (基0)//到5-1的位置的字符串//左闭右开String subString2 = sentence.substring(3,5);System.out.println(subString2);//根据,进行分割,得到3个子字符串String subSentences[] = sentence.split(",");for (String sub : subSentences) {System.out.println(sub);}System.out.println(sentence.indexOf('8')); //字符第一次出现的位置System.out.println(sentence.indexOf("超神")); //字符串第一次出现的位置System.out.println(sentence.lastIndexOf("了")); //字符串最后出现的位置System.out.println(sentence.indexOf(',',5)); //从位置5开始,出现的第一次,的位置 System.out.println(sentence.contains("击杀")); //是否包含字符串"击杀"String temp = sentence.replaceFirst(",","");//只替换第一个System.out.println(temp);}}
11、比较字符串:
public class TestString {public static void main(String[] args) {// TODO Auto-generated method stubString str="the light"; //编译器碰到字符串的字面值就会创建一个新对象String str2=new String();String str3="the light"; //当发现已经存在的字符串对象就不会重复创建System.out.println(str==str2); //falseSystem.out.println(str==str3); //trueSystem.out.println(str.equals(str2)); //false,完全一样则返回trueString str4=str3.toUpperCase();System.out.println(str.equalsIgnoreCase(str4)); //trueString start="th";String end="ight";System.out.println(str.startsWith(start));//true,是否以字符串开始或结束System.out.println(str.endsWith(end));}}
11、StringBuffer可变长的字符串,有以下方法
public static void main(String[] args) {String str="the";StringBuffer sb=new StringBuffer(str);System.out.println(str.length()); //3,String内部是一个字符数组System.out.println(sb.capacity()); //19,内部也有一个字符数组,留有冗余数组,19这个空间大小,不同JDK不一样sb.append(" Man"); //追加sb.insert(7," IS BOY"); //插入sb.reverse(); //反转System.out.println(sb);
}
12、Date类:注意:是java.util.Date; 而非 java.sql.Date,此类是给数据库访问的时候使用的
时间原点概念:Java中的时间原点,其对应的日期是1970年1月1日 8点0分0秒 。
public static void main(String[] args) {Date d1=new Date(); //创建日期对象System.out.println("当前日期时间是"+d1);// 从1970年1月1日 早上8点0分0秒 开始经历的毫秒数Date d2 = new Date(5000);System.out.println("从1970年1月1日 早上8点0分0秒 开始经历了5秒的时间");System.out.println(d2);//getTime()方法得到一个long型的整数System.out.println("从时间原点开始经历的毫秒数:"+d1.getTime());//new Date().getTime() 和 System.currentTimeMillis() 基本是一样的System.out.println("系统的当前毫秒数:"+System.currentTimeMillis());}
13、SimpleDateFormat 日期格式化类,有以下方法
public static void main(String[] args) {//日期转字符串//y 代表年//M 代表月//d 代表日//H 代表24进制的小时//h 代表12进制的小时//m 代表分钟//s 代表秒//S 代表毫秒SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS" );Date d= new Date();String str = sdf.format(d);System.out.println("当前时间通过 yyyy-MM-dd HH:mm:ss SSS 格式化后的输出: "+str);//字符串转日期SimpleDateFormat sdf2 =new SimpleDateFormat("yyyy/MM/dd HH:mm:ss" );String str2 = "2016/1/5 12:12:12";//需要进行异常处理try {Date d2 = sdf2.parse(str2);System.out.printf("字符串 %s 通过格式 yyyy/MM/dd HH:mm:ss %n转换为日期对象: %s",str2,d2.toString());} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
14、日历对象,采用单例模式获取日历对象Calendar.getInstance();
public static void main(String[] args) {Calendar c = Calendar.getInstance();Date now = c.getTime();// 当前日期System.out.println("当前日期:\t" + format(c.getTime()));// 下个月的今天c.setTime(now);c.add(Calendar.MONTH, 1);System.out.println("下个月的今天:\t" +format(c.getTime()));// 去年的今天c.setTime(now);c.add(Calendar.YEAR, -1);System.out.println("去年的今天:\t" +format(c.getTime()));// 上个月的第三天c.setTime(now);c.add(Calendar.MONTH, -1);c.set(Calendar.DATE, 3);System.out.println("上个月的第三天:\t" +format(c.getTime()));}
更多资源或实战项目详细可以了解:http://how2j.cn/k/interface-inheritance/interface-inheritance-practise/679.html?p=29570
java基础学习笔记(三)相关推荐
- Java基础学习笔记(三)_Java核心技术(高阶)
本篇文章的学习资源来自Java学习视频教程:Java核心技术(高阶)_华东师范大学_中国大学MOOC(慕课) 本篇文章的学习笔记即是对Java核心技术课程的总结,也是对自己学习的总结 文章目录 Jav ...
- Java基础学习笔记三 Java基础语法
Scanner类 Scanner类属于引用数据类型,先了解下引用数据类型. 引用数据类型的使用 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式. 数据类型 变量名 ...
- Python基础学习笔记三
Python基础学习笔记三 print和import print可以用,分割变量来输出 import copy import copy as co from copy import deepcopy ...
- 尚学堂JAVA基础学习笔记_2/2
尚学堂JAVA基础学习笔记_2/2 文章目录 尚学堂JAVA基础学习笔记_2/2 写在前面 第10章 IO技术 1. IO入门 2. IO的API 3. 装饰流 4. IO实战 5. CommonsI ...
- 【Java基础学习笔记】- Day11 - 第四章 引用类型用法总结
Java基础学习笔记 - Day11 - 第四章 引用类型用法总结 Java基础学习笔记 - Day11 - 第四章 引用类型用法总结 4.1 class作为成员变量 4.2 interface作为成 ...
- Java中大数据数组,Java基础学习笔记之数组详解
摘要:这篇Java开发技术栏目下的"Java基础学习笔记之数组详解",介绍的技术点是"java基础学习笔记.基础学习笔记.Java基础.数组详解.学习笔记.Java&qu ...
- 【已完结!】Java基础--学习笔记(零起点打开java世界的大门)--博客汇总表【附:视频、工程源码、资料、详细笔记】
java零基础入门到精通(2019版)[黑马程序员] 视频+资料(工程源码.笔记)[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg 提取码:z ...
- Java基础学习笔记(二)_Java核心技术(进阶)
本篇文章的学习资源来自Java学习视频教程:Java核心技术(进阶)_华东师范大学_中国大学MOOC(慕课) 本篇文章的学习笔记即是对Java核心技术课程的总结,也是对自己学习的总结 文章目录 Jav ...
- Java基础(学习笔记)
其他文章链接 Java基础 Java集合 多线程 JVM MySQL Redis docker 计算机网络 操作系统 文章目录 前言 1.⾯向对象和⾯向过程的区别 2.Java 和 C++的共性与区别 ...
- Java基础学习笔记(完结)
Java基础 前言 一.Java基础语法 1.注释 2.标识符 3.数据类型 4.类型转换 5.变量.作用域.常量 6. 运算符 二.Scanner与流程控制 1. Scanner对象 2. 流程控制 ...
最新文章
- Android -- 通知栏的使用
- Linux-鸟菜-5-文件权限
- Extjs4中up()和down()的用法以及组件查找_ComponentQuery类
- 为什么已有Elasticsearch,我们还要重造实时分析引擎AresDB?
- spring boot示例_Spring Boot完成示例
- LeetCode 820. 单词的压缩编码(后缀树)
- 《日志管理与分析权威指南》一1.6 人、过程和技术
- 2小时学会java_2小时学会springboot源码
- php自动打印小票_服装店专用小票机自带进销存
- Hadoop学习总结(2)——Hadoop入门详解
- java简介 ppt 精,TP1java简介.ppt
- 定区关联快递员 定区关联收派时间
- 字符串未被识别为有效的布尔值
- 第014讲 CSS 定位
- freeswitch连接postgres数据库
- Julia: Dates =DateFormat, format,parse.......
- 【刷题】清橙 A1339 JZPLCM(顾昱洲)
- linux 限制进程网速,Linux限制网速
- Cesium 1.87+实现建筑泛光效果
- EFR32晶体校准指南
热门文章
- python爬虫的用途_python爬虫用途
- html调用js页面显示不出来了,JS代码文件调用显示乱码,直接写在html页面的里可以调用,但是单独放在js文件里不能调用...
- boot spring 没有父子容器_Spring 系列(二):Spring MVC的父子容器
- c语言i++和++i程序_使用C ++程序修改链接列表的内容
- linux adduser mysql_linux_adduser
- echaer 地图_ECharts地图系列
- python公共变量_Python中的公共变量
- Java Random nextInt()方法与示例
- python字符串find_Python字符串| 带示例的find()方法
- 用贪婪算法解决背包问题_解决主要算法问题的贪婪策略