(2)java基础技巧总结

2.java基础

1.命名方法:

程序里面用的是骆驼命名法第一个单词小写,后面单词第一个字母大写
类,命名空间以及左边的文件用帕斯卡命名法,每一个单词首字母都大写。

2.注释

一行 //
多行/* /
文档 /
* */

3.数据类型:

1位=1bit 8bit=1byte=1字节 4字节=1字
char 2个字节 (C++和C是1个字节)
short 2个字节
int 4个字节,但会随着机器变,16位机器就是2个字节与C++一样,32位正常
long 8个字节,但会随着机器变,32位机器就是4个字节与C++一样,64位正常
bool 1个字节
float 4个字节 可用科学计数法表示xxeaa 表示xx乘10的aa次方

4.数据类型转换:

合法转化时会自动转换
长类型转为短类型,浮点数转为整数要强转,会直接截断小数部分,四舍五入用Math.round(a),得到最近整数
浮点数之间舍弃精度转换,会四舍五入(2.5会向偶数变)

5.位运算

二进制用前面加0b来表示 十六进制是0x 八进制是o
&就是x与y二进制相与 (x&0b1000)会得到第四位是1或者0,其他位全0的数,再除以0b1000就可以得到第四位的值为0或者是1
^是异或 a=a^b; b=a^b; a=a^b;可以将a与b交换位置,但这个方法不适合改变对象的某个属性,因为它不会改变属性,会改变本身。
>>表示移位 往左移动或者往右移动 (x&0b1000)>>3也可得到第四位的值是1或者0

6.运算规则

运算 在普通的加减乘除中,两边都为整数则为整数除法,否则为浮点除法
整数除法是截断小数,直接舍去了,没有向上向下,用Math的方法可做到 四舍五入round,向上取整ceil,向下取整floor。
%为整数求余,整数取余a%b转换为a-(a/b)*b来算,不管正负
除了++,–,! ,~,=都是从左到右运行的
while(x)x在java中只能是boolean 在C中可以是其他
Math还有很多函数,比如CopyOf()复制 copyOfrange(int a[],int b,int c);返回左闭右开复制数组 binarySerch()需要有序数组fill(int[] a,b)用b填充a equals(int[] a,int[] b)判断数组a和数组b是否相同 random()*10就是得到0到10的左闭右开值,再直接舍去小数即可得到0到9的任意值
sqrt()开方 pow(a,b)a的b次方
sort()如果数组内为基础数据类型,那么排序将会按照从小到大来排序,自定义类型会按照内存中的地址排序。若要自己定义就需要传入Comparator()对象,其中实现compare方法,令某种情况返回正数则是说明这种情况o1在o2后面,返回负数的情况就是o1在o2前面
比较还有一种方法是将这个类实现compareable接口,在里面实现compareTo()方法。
int[] a=new int[100]; 初始化和复制,遍历都可使用for循环 复制还可用函数 初始化直接={1,2}或者new int[]{1,2}; 遍历还可以用foreach
for(int b:a){
使用b就是a中的元素了

7.函数

java传对象给函数,是结合了C++的传指针和传引用,C++中的指针改变是不影响原值的,而引用就是原值的别名,改变引用是会改变原值的。java中传的是指向这个对象的引用复制,如果直接改变值,原值就会变,但如果创建一个新的对象给这个复制引用,那这个引用就会指向新的对象,而原来的对象并不会变。
比如交换函数,交换一棵树的左右节点,如果传入的是头结点,在里面改变节点的左右子树,这是改变指向值的内部属性,是可以改变值的的。但如果传入左右节点,将他们交换,这样改变的就是指向原来两个值的引用,是没有改变原值的属性的。
传值:C,java,C++都不会改变原值
传引用:C++中引用就是值的别名,改引用就是在改变原值,且引用绑定之后不可交换。 java中传值是引用和指针的结合,改变传的值就相当于在改变引用,但它的引用是可以交换的,交换时不影响原值,这又和指针很像
在Java中对象作为参数传递时,是把对象在内存中的地址拷贝了一份传给了参数。改变引用的值就会改变原值,但交换引用不会影响原值
传指针:java没有,C++和C光改变指针对原值无影响,改变*p会改变原值

8.字符串

字符串与字符的处理,一般用**String.valueOf()**将字符转换为String来处理
1.在java中,字符串一般以String表示(不可修改,但可通过substring(a,b)来获得子串,通过加来获得新的字符串,以及分割替换转换等获得新字符串)。
与C的区别是C的字符串就是纯字符数组,获得值也是拿a[b],而java中不能改变字符串长度,是通过方法来查以及改字符串
:endwith,startwith,charAt,indexof,length,empty,contains equals(重写了equals方法)
:replace substring trim split (string的替换是直接替换,不用考虑长度的问题)
其他获得字符串:通用String.valueof()(目的是返回number的值,如Integer,用于计算,valueOf也就是转换为调用格式)以及xx.tostirng()(对于不同引用对象,可以重写为自己想要的输出方法)
转成其他:toCharArray字符数组 getBytes字节数组 xx.parsexx基本数据类型 Interger.valueOf(String a)包装类
注: intValue是把包装类对象变成int
比较:str.equals(s)不是用来判断,因为比较的是两个声明是否指向同一个对象,字符串中的equals是被重写的。(其他类如果不重写则会继承object的,其实就是==。另一个比较方法是实现comparable接口,并实现其中的compareTo()方法,与comparator中的compare方法类似)
空串和null是不一样的,判断也要分开判断,空串为“”长度为0或者用equals(""),一个直接为null,用s==null来判断 所以判断是否有值要两个都判断
2.StringBuffer(效率低,多线程),StringBuilder(效率高,单线程)append()来添加这里可以添加字符串,也可以添加字符,,insert()在某处插入 setCharAt()替换一个字符,delete()getchar(i)
可以通过toSting()转换为String()
3.char[]类型出现 C语言中一般都是char[],这种可以直接当成数组来处理,也是最需要掌握的C语言中的字符数组没有length方法,可通过strlen来获得长度,以及普通数组可用sizeof(str)/sizeof(str[0])

9.IO

(1)标准化输入:
Scanner in=new Scaneer(System.in);
In.nextLine()读取一行包括空格 in.next()读一个单词以空格为分割 in.nextInt() in.nextDouble()
In.hasNext() in.hasNextInt()
(2)标准化输出:
输出为System.out.println(xxx)
格式化输出还是要用到printf,用法与C语言类似System.out.printf(“xx%2d”,x);
输出日期也可用printf,可规定输出System.out.printf(“%tx”,new Date()); x可表示很多日期信息,可为c(完整日期,时间)
(3)文件
用scanner来读取,参数为Paths.get(“C:\my\xx”)
PrintWrite来写入文件 PrintWrite out=new PrintWrite(“x.txt”)不存在则创建
(4)File类
File对象有方法getname()getpah()getabsoluteFile()getparent()都是获取名字的
exists()判断文件目录是否存在 isFile()检查是否是文件而不是目录 length()获取文件长度
(5)IO流
流分为输入输出,也分为字节字符(字节流操作8位的字节,字符流操作16位的字符)。字节有InputStream,OutputStream 字符有reader和writer
InputStream i=new InputStream (“xxx”);也就是打开这个文件,目的是为了读取里面的内容
InputStream 有方法read()从输入流中读取单个字节 read(byte[] b)读取最多b的长度的字节,并存到b中read(byte[] b,int off,int len)从b的off位置开始读取len个字节到b中
Reader 有方法read()从输入流中读取单个字符 read(char[] b)读取最多b的长度的字符,并存到b中read(char[] b,int off,int len)读取len个字符到b中,并从b的off开始
OutputStream o=new OutputStream (“xxx”);也就是创建或者打开一个文件,目的是为了写入文件到里面
OutputStream 有方法write(int c),把c写到文件中,c可以代表字符也可代表数字 write(byte[] b)write(char[] b)将b中内容写入文件 write(char[] b,off,len)或int[] b
Writer 有方法write(String a)把a写入文件 write(String a,off,len)把从off开始的字符串a共len长度的字符加入文件中

10.lambda表达式

就是一个带参数的匿名方法(int a,int b)->a+b 或者写具体点就是 (int a,int b)->{return a+b},参数只有一个时括号可以省略,它的类型是一个函数接口(只有一个方法的接口,比如说比较器,克隆接口,runnable),本来要把这个接口实现,然后再实例化出来传入某个函数中用,比如sort,但现在不用写实现类和实例化对象了,直接将这个表达式传入需要的方法中就可以了,它可以赋值给一个接口,也可以强转成接口后赋值给Object。
这里就是简化了这个接口的实现,后面实现时又没有方法名,他具体是什么类型完全取决于要赋值的接口,传给sort时就知道它需要一个compareable接口,所以就可实现
作用:简化实现函数接口,代替内部匿名类
成员内部类:就是作为一个成员在类中,可以访问外面的所有变量,内部的变量和外面重名时会隐藏,可用this.lai访问外面的。内部类本身相当于private的,对外面的类隐藏,而外部类访问内部类时需要创建内部类对象 如果A中有内部类B A a=new A(); A.B b=a.new B();
局部内部类:在一个 方法中定义,只能在这个方法中实例化,就是一个局部变量,没有权限修饰符
匿名内部类new A(){。。。}只有一次实例化,无构造器,A是接口,拉姆达表达式就可以代替它
静态内部类:static的内部类,不用外面的数据,只有内部类才可以声明成static的,不用外面的类对象也可以实例化。A中有B,B b=new A.B();
作用:每一个内部类都可以实现独立的接口,与外面没有关系,可以更好的完善多继承,可以将类组织在一起而且对外部隐藏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值