Java基础小记
一、数据类型转换
1、引用数据类型
包装类型:Byte、Short、Long、Integer、Character、Float、Double、Boolean
2、基本类型与包装类转换
Java里有8种包装类,分别对应8种基本数据类型
基本数据类型是值类型,包装类是引用数据类型
① 基本数据类型转成包装类型,即值类型转成引用数据类型成为装箱
int m=20;
Integer num2=new Integer(m);
boolean b1=false;
Boolean bool3=new Boolean(b1);
② 包装类型转成基本数据类型,即引用数据类型转成值类型成为拆箱
Integer num=new Integer(10);
//可以通过.语法来调用对象的方法
//intValue是要获取对象的int型的值
int n=num.intValue();
Boolean bool=new Boolean(true);
boolean bool2=bool.booleanValue();
Double d=new Double(2.244);
double d1=d.doubleValue();
3、字符串与基本类型转换
① 字符串转成基本数据类型
String s="36";
//***包装类对象.parse***(参数)方法
//是将字符串转成基本数据类型***
int n2=Integer.parseInt(s); //转换成int型
double d2=Double.parseDouble(s); //转换成double型
String f="1.2f";
float f2=Float.parseFloat(f); //转换成float型
② 基本数据类型转换成字符串
String s=String.valueOf(123);
String s=Integer.toString(123);
String s=123+"";
二、分支与循环
1、顺序结构
2、选择结构
① 顺序选择(单个条件和多个条件)
if(条件){
}else if(条件2){
}else{
}
② 嵌套if选择结构
③ switch选择结构:
switch(表达式){
case(常量1):
语句1;
break; //跳出
case(常量2):
语句2;
break;
default:
语句3;
break;
}
if与switch的联系与区别:
* switch和if-else相比,由于使用了优化算法(Binary Tree),绝大部分情况下switch会快一点,除非是if-else的而第一个条件就为 true
* 等值分支使用switch
3、循环结构(while,for,do while,foreach语句)
(1) while循环
特点:先判断,再执行
while(循环条件){
循环操作
}
(2) do while (选择是否要先执行一次:while/do while)
特点:先执行(最少执行一次),再判断
do{
循环操作
}while(循环条件);
(3) for循环:先判断,再执行(已知循环次数)
for(表达式1;表达式2;表达式3){
循环操作;
}
for(参数初始化;条件判断;更新循环变量){
循环操作;(循环体被执行)
}
执行顺序:参数初始化--->条件判断--->循环操作--->更新循环变量
三、 数组
1、定义
(1) 数组是一组变量集合,存储相同数据类型的一组数据
数组:在内存中开辟的一串用于存储相同数据类型的连续空间!!
(2) 数组名:表示连续空间的首地址,通过地址可以依次访问数组所有元素。
(3)下标:元素在数组中的排序叫做下标,从0开始。
(4) 数组长度一旦声明,将不可改变,不可追加。
2、数组名:即标识符,连续空间的首地址
匈牙利命名法(所有字母都小写)
3、数组的声明
1)明数组:int[] arr; 或 int arr[]; //声明一个int类型的数组
2)给数组分配空间:arr=new int[5];
Exception---数组下标越界(运行错误)
3)给数组赋值:
① arr[0]=1;
② 使用循给数组赋值
4)访问数组数据:使用数组下标访问
[数组声明缩写]
* int[] arr={1,2,3,4,5}; //自动分配五个空间
* int[] arr=new int[]{1,2,3,4,5}; //new int[]的[]一定不能放内存大小
5、基本数据类型和引用数据类型
1)基本数据类型:声明时直接在栈内中开辟空间,并直接在当前空间中存放数据;
赋值时传递的是变量中的值。
基本数据类型是传值的
2)引用数据类型:声明引用数据类型(数组或对象),会将实际的数据存放在堆内存中。
同时,在栈内存中声明一个数组名或对象名,存放着在堆内存中的首地址;
所以,当使用数组名赋值时,传递的是地址。
引用数据类型是传地址(引用)的。
四、Arrays工具类
Array工具类是Java中提供的用于操作数组的工具类,位于java.util包中。
1、Arrays.equals(arr1, arr2):接受两个数组,返回两个数组是否向相等
比较的原理是,逐一比对两个数组中的每一个值,是否相等。
int[] arr1={1,2,3,4,5};
int[] arr2={1,2,0,4,5};
System.out.println(Arrays.equals(arr1, arr2)); 输出:false
而如果使用==判断,是比较两个数组名中存储的地址,是否相等。
int[] arr1={1,2,3,4,5};
int[] arr2={1,2,3,4,5};
System.out.println(Arrays.equals(arr1, arr2)); 输出:false
int[] arr1={1,2,3,4,5};
int[] arr2=arr1;
System.out.println(Arrays.equals(arr1, arr2)); 输出:true
2、Arrays.sort(arr):对数组进行升序排列,会直接改变原数组的排序。
Arrays.sort(arr,3,6):对数组的指定区域进行排序,左闭右开区间,包含其实下标,不含结束下标;
int[] arr={1,5,2,9,4,3,6,0,2,6,7};
Arrays.sort(arr);
Arrays.sort(arr,3,6); //左闭右开
System.out.println(Arrays.toString(arr));
3、Arrays.toString(arr): 将数组转成字符串,转换之后的格式:[1,2,3,4]
4、Arrays.fill(arr, 12): 将数组的每一项,都赋值为指定的数值
int[] arr=new int[10];
Arrays.fill(arr, 12);
System.out.println(Arrays.toString(arr));
5、Arrays.copyOf(arr, 50):将arr数组的指定个数,copy到一个新的数组;
如果个数>arr.length 则新数组中多余的位置用默认值补齐;
如果个数<arr.length 则只copy原数组的前半部分。
int[] arr={1,2,3,4,5,6,7,8,9};
int[] newArr=Arrays.copyOf(arr, arr.length); //copy整个数组
int[] newArr=Arrays.copyOf(arr, 50); //copy前50个元素
System.out.println(Arrays.toString(newArr));
6、Arrays.binarySearch(arr, 4) : 查找数组中的指定元素,如果找到返回下标,没有找到返回负数;
使用这个方法,原数组必须是有序的,可以先使用Arrays.sort(arr);进行排序
int[] arr={1,2,3,4,5,6};
Arrays.sort(arr);
System.out.println(Arrays.binarySearch(arr, 4));
五、字符串
(一) String类
1、String类位于java.lang包中,java.lang包是Java的语言包,使用时无需导包,自动导入。
2、拿到一个字符串对象:
① 字面量声明:String s="好好学习";
② new关键字声明:String s1=new String("好好学习");
3、s.length(): 返回字符串的长度,length()是一个方法,使用时注意不能掉() (arr.length是属性)
System.out.println("请输入用户名:");
String s=in.next();
if(s.length()<6){// s.length()是方法
System.out.println("用户名最小为6位!");
}
4、s1.equals(s2): 判断字符串是否相等
.equals()的比对原理,是判断两个字符串的每一个字符是否相等;
== 的比对原理,是判断两个字符串中存储的地址是否相等。
5、s1.equalsIgnoreCase(s2): 忽略大小写对比;
.toLowerCase(): 将所有字符都转化为小写;
.toUpperCase(): 将所有字符都转化为大写;
String s1="JH";
String s2="jh";
System.out.println(s1.equals(s2));
System.out.println(s1.equalsIgnoreCase(s2));
System.out.println(s1.toLowerCase());
System.out.println(s2.toUpperCase());
6、连接字符串:
① 使用+号连接;
② 使用s.concat(s2)连接,将s2连接到s1的后面,并返回一个新的字符串
String s="好好学习";
String s1=s.concat("天天向上");
System.out.println(s1);
7、① .indexOf(): 在字符串中查找指定的字符或子串 第一次出现的位置,并返回其下标,如果没有找到返 回-1;
可以接受字符串、字符、整数类型的参数,如果传入整数,将根据ASCII码自动转化为字符(A-65,a- 97)。
② .lastIndexOf(): 在字符串中查找指定的字符或子串 最后一次出现的位置,并返回其下标,如果没有找到返回-1;
String s="abcdedfg";
System.out.println(s.indexOf("cde"));
System.out.println(s.indexOf(100));//查找d
System.out.println(s.lastIndexOf(100));
8、.substring(): 截取字符串的指定位置,返回一个新的子串;
① 传入一个参数,表示起始下标,将从此下标开始,一直截到字符串最后;
② 传入两个参数,表示起始下标和结束下标,为左闭右开区间,包含起始,不含结束
String s="abcdefg";
System.out.println(s.substring(3));
System.out.println(s.substring(3,5));
9、 .trim(): 去掉字符串两端的空格
String s=" abc def gh ";
System.out.println(s);
System.out.println(s.trim());
10、s.replace("a","*"): 将字符串中的指定区域,用 新的字符串替换掉
System.out.println(s.replace("a","*"));
11、 .split();
① .split(""): 传入指定字符,将字符串分割为多个子串,返回一个字符串类型的数组;
如果传入一个空字符串,则将原来字符串的每一个字符串都进行分割。
String s="haha haha haha";
String[] arr=s.split("");
② .split(" ",30): 第二个参数,可以传入一个整数,表示将当前字符串分为几部分;
如果传入的整数,小于原来分割的总部分,则剩余的区域将不再分割。
String[] arr=s.split(" ",2);
System.out.println(Arrays.toString(arr));
(二) StringBuffer 类
1、StringBuffer是String的增强版,位于java.lang包中;
2、StringBuffer与String的最大区别在于:StringBuffer是可变可追加的;
而String一旦声明不可改变,不能插入;
StringBuffer sb=new StringBuffer("好好学习");
3、.toString(): 将StringBuffer类型,转换成String类型;
但在输出时,可以不用转换,将自动进行转换。
String s=sb.toString();
System.out.println(sb); //相当于调用了.toString()方法
4、.append(): 在原字符串的最后追加新的字符。
① 原字符串会被直接改变;同时还会将追加的字符串返回;
② append可以接受各种类型的参数,会自动转换成字符串后追加到原字符串最后。
char[] c={'a','b','c','d'};
StringBuffer sb1=sb.append(c);
System.out.println(sb);
System.out.println(sb1);
StringBuffer sb2=sb.append("天天向上");
System.out.println(sb2);
5、 .delete():传入两个下标,表示删除这两个下标之间的字符,左闭右开区间
StringBuffer s=sb.delete(0, 2);
.deleteCharAt(2): 传入一个下标,删除指定位置的一个字符。
StringBuffer s=sb.deleteCharAt(2);
6、 .insert():在原字符串的指定下标位置插入
StringBuffer s=sb.insert(3,"好");
Java基础小记的更多相关文章
- Java基础学习-- 继承 的简单总结
代码参考:Java基础学习小记--多态 为什么要引入继承? 还是做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD ...
- effective java读书小记(一)创建和销毁对象
序言 <effective java>可谓是java学习者心中的一本绝对不能不拜读的好书,她对于目标读者(有一点编程基础和开发经验)的人来说,由浅入深,言简意赅.每一章节都分为若干的条目, ...
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
- [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)
如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html 谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...
- 【JAVA面试题系列一】面试题总汇--JAVA基础部分
JAVA基础 基础部分的顺序: 基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法 线程的语法,集合的语法,io 的语法,虚拟机方面的语法 每天几道,持续更新!! 1.一个". ...
- 最适合作为Java基础面试题之Singleton模式
看似只是最简单的一种设计模式,可细细挖掘,static.synchronized.volatile关键字.内部类.对象克隆.序列化.枚举类型.反射和类加载机制等基础却又不易理解透彻的Java知识纷纷呼 ...
- java基础练习 字符串,控制流,日历,日期等
1,对基本控制流程的一些练习 package org.base.practice3; import org.junit.Test; /** * Created with IntelliJ IDEA. ...
- Java基础知识【下】( 转载)
http://blog.csdn.net/silentbalanceyh/article/details/4608360 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...
- Java基础知识【上】(转载)
http://blog.csdn.net/silentbalanceyh/article/details/4608272 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...
随机推荐
- Spring Clould负载均衡重要组件:Ribbon中重要类的用法
Ribbon是Spring Cloud Netflix全家桶中负责负载均衡的组件,它是一组类库的集合.通过Ribbon,程序员能在不涉及到具体实现细节的基础上"透明"地用到负载均衡 ...
- PAT-L2-007-gplt真题
题目分析: 1. 首先,题目说一个家庭有孩子爸爸妈妈等几辈人,可以利用并查集将一个家庭里的所有人变成一个集合: 2. 刚好题目的目的也是这样,输出的是一个家庭人数,人均房产面积,人均房产套数等: 3. ...
- MySQL基本语句与经典习题
[SQL语句大全] 本文用到的数据(5张表): customers: orders: orderitems: Products: Vendors: 一.检索数据-select语句select pro ...
- 【译】Java、Kotlin、RN、Flutter 开发出来的 App 大小,你了解过吗?
现在开发 App 的方式非常多,原生.ReactNative.Flutter 都是不错的选择.那你有没有关注过,使用不同的方式,编译生成的 Apk ,大小是否会有什么影响呢?本文就以一个最简单的 He ...
- .net core2.0下Ioc容器Autofac使用
.net core发布有一段时间了,最近两个月开始使用.net core2.0开发项目,大大小小遇到了一些问题.准备写个系列介绍一下是如何解决这些问题以及对应技术.先从IOC容器Autofac开始该系 ...
- 从源码来看ReentrantLock和ReentrantReadWriteLock
上一篇花了点时间将同步器看了一下,心中对锁的概念更加明确了一点,知道我们所使用到的锁是怎么样获取同步状态的,我们也写了一个自定义同步组件Mutex,讲到了它其实就是一个简版的ReentrantLock ...
- 关于php日期前置是否有0
例如:2018-01-04,这个日期和月份前置是有0 如果不想有0,date( 'y-n-j',time() ):默认的是date( 'y-m-d',time() ),这个日期和月份前置是有0. da ...
- Git详细教程(2)---多人协作开发
Git可以完成两件事情: 1. 版本控制 2.多人协作开发 如今的项目,规模越来越大,功能越来越多,需要有一个团队进行开发. 如果有多个开发人员共同开发一个项目,如何进行协作的呢. Git提供了一个非 ...
- datetimepicker.js 使用笔记
1.官网地址 官网传送门 2.属性及使用示例 2.1调用 html: <input type="text" readonly class="date" ...
- Spark性能优化总结
1. 避免重复加载RDD 比如一份从HDFS中加载的数据 val rdd1 = sc.textFile("hdfs://url:port/test.txt"),这个test.txt ...