java基础小记_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 则新数组中多余的位置用默认值补齐;

如果个数

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,"好");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Protobuf是一种高效的序列化协议,可以用于数据交换和数据存储。它的主要优势是大小小,速度快,可扩展性强。下面是使用Protobuf的一些小记: 1. 定义消息格式 首先,需要定义消息格式,以便Protobuf可以将数据序列化和反序列化。消息格式定义在.proto文件中,使用protobuf语言编写。例如,下面是一个简单的消息格式定义: ``` syntax = "proto3"; message Person { string name = 1; int32 age = 2; } ``` 这个消息格式定义了一个名为Person的消息,包含两个字段:name和age。 2. 生成代码 一旦消息格式定义好,就可以使用Protobuf编译器生成代码。编译器将根据消息格式定义生成相应的代码,包括消息类、序列化和反序列化方法等。可以使用以下命令生成代码: ``` protoc --java_out=. message.proto ``` 这将生成一个名为message.pb.javaJava类,该类包含Person消息的定义以及相关方法。 3. 序列化和反序列化 一旦生成了代码,就可以使用Protobuf序列化和反序列化数据。例如,下面是一个示例代码,将一个Person对象序列化为字节数组,并将其反序列化为另一个Person对象: ``` Person person = Person.newBuilder() .setName("Alice") .setAge(25) .build(); byte[] bytes = person.toByteArray(); Person deserializedPerson = Person.parseFrom(bytes); ``` 这个示例代码创建了一个Person对象,将其序列化为字节数组,然后将其反序列化为另一个Person对象。在这个过程中,Protobuf使用生成的代码执行序列化和反序列化操作。 以上是使用Protobuf的一些基本步骤和注意事项,希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值