后端开发Java基础学习(适合有其它语言基础)
Posted cls1277
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了后端开发Java基础学习(适合有其它语言基础)相关的知识,希望对你有一定的参考价值。
获取string的第i个位置的char
char c = s.charAt(i);
sublime小技巧
ctrl+shift+d:复制上一行
ctrl+shift+k:删除整行
(去查sublime快捷键)
直接输入main就可以显示
public static void main(String[] args)
cmd小技巧
按tab键自动补全
在dos里面先javac再java,且java命令的时候不需要后缀名
回车和换行符
回车\\r,换行\\n
回车是将光标移动到这一行的开头,换行是将光标移动到下一行的开头
javadoc
javadoc配合文档注释可以生成文档
javadoc -d d:\\\\cls1277\\\\Java\\\\javadoc -author -version Hello.java
其他标签自行查看:javadoc标签文档
dos指令
dir:查看当前目录的文件内容
cd:cd /D c: 切换磁盘,直接写cd c:不会切换,需要/D开关
cd :切换到根目录
tree:查看树形目录
exit:退出dos
echo:echo hello > hello.txt 输入内容到文件
type:nul > hello.txt 创建文件
help:help cd(指令)就可以看到参数
+号的使用
都是数值,加法;有一个为字符串,拼接。
查JavaAPI的网站
(不止java,不止api)
编码问题
ASCII码:1个字节
Unicode码:都是2个字节
Unicode码兼容ASCII码
UTF-8:对Unicode的改进,变长编码,使用1-6个字节表示,字母占1个字节,汉字占3个字节
基本类型转换
byte、short和char之间不会相互自动转换
为什么byte=10不报错?具体数值赋值的时候,先判断是否在byte的范围内,若在范围内,则不报错。
int a=1; byte b=a; //报错
byte、short、char计算时,都转化为int类型运算,结果也就是int,不能往小的数据类型中存储
自动提升原则:表达式结果的类型自动提升为 操作数中最大的类型
基本数据类型转字符串
在变量后加+“”即可。
int n = 100;
String s = n+"";
System.out.println(s);
字符串转基本数据类型
包装类(每个基本数据类型都对应一个包装类)调用parseXX
String s = "100";
int num = Integer.parseInt(s);
System.out.println(num);
运算符
&&:短路与;&:逻辑与,(其他类似)
复合赋值运算符会进行类型转换
byte b = 2;
b = b + 3;
这样会报错,因为b+3会被推导为int类型,不能放到byte类型的b变量中,但是b+=3;不会报错,b=b+1;与b++同理。
关键字和保留字区别
前者是已经有的,如public,static等;后者是保留起来,以后会使用,如goto,byValue,var等。
标识符命名规范
包名:所有字母都小写
类名、接口:所有单词首字母大写(大驼峰)
变量名、方法名:第一个单词首字母小写,第二个单词开始首字母大写(小驼峰、驼峰命名法)
常量名:所有字母均大写,单词间用下划线连接
键盘输入
import java.util.Scanner;
public class Hello
public static void main(String[] args)
Scanner myScanner = new Scanner(System.in);
String myText = myScanner.next();
int myInt = myScanner.nextInt();
double myDouble = myScanner.nextDouble();
System.out.println(myText);
原码、反码、补码
break和标签
public static void main(String[] args)
label1:
for(int i=0; i<3; i++)
label2:
for(int j=0; j<5; j++)
if(j==2)
break label1;
System.out.println("j="+j);
输出结果为j=0 j=1 因为break label1,相当于终止了外层i的循环。continue同理。
数组的使用
public static void main(String[] args)
//first
int a[] = new int [5];
int[] b = new int [5];
//second
int c[]; c = new int [10];
int []d; d = new int [10];
//third
int e[] = 1, 2, 3;
int[] f = 4, 5, 6;
数组的赋值机制
引用赋值方式
public static void main(String[] args)
int[] a = 1, 2, 3;
int[] b = a;
b[0] = 4;
for(int i=0; i<3; i++)
System.out.println(a[i]);
//输出 4 2 3
值传递和引用传递
二维数组
java允许数组每一行的列数不同,见下面的third代码
public static void main(String[] args)
//first
int a[][] = new int[2][3];
int[][] b = new int[2][3];
//second
int c[][]; c = new int[2][3];
int[][] d; d = new int[2][3];
//third
int[][] e = new int[3][];
for(int i=0; i<e.length; i++)
e[i] = new int[i+1];
for(int j=0; j<e[i].length; j++)
e[i][j] = i+1;
for(int i=0; i<e.length; i++)
for(int j=0; j<e[i].length; j++)
System.out.print(e[i][j]+" ");
System.out.println();
//forth
int[][] f = 1, 2, 3, 4, 2;
二维数组还可以” int [] y[] “的形式定义。
对象内存布局
类与对象内存分配机制
与数组相似,因为同为引用数据类型。
java内存分析
栈:一般存放基本数据类型(局部变量)
堆:存放对象(Cat cat,数组等)
方法区:常量池(常量,比如字符出),类加载信息
(先加载类信息,且该类只会加载一次)
方法调用机制
传参机制
基本数据类型:赋值;引用数据类型:赋地址。
引用数据类型为null相当于断开引用连接
public class Object
public static void main(String[] args)
Cat cat = new Cat();
cat.name="cls"; cat.age=10; cat.color="white";
Test test = new Test();
test.func(cat);
System.out.println(cat.name+" "+cat.age+" "+cat.color);
//输出 cls 100 white
class Cat
String name;
int age;
String color;
class Test
public void func(Cat cat)
cat.age = 100;
cat = null;
cat.name = "test";
判断对象是否为同一个
通过输出对象的hashCode,可以简单的当作对象地址,但其实不是对象的实际地址
public class Javap
public static void main(String[] args)
Test test = new Test();
System.out.println(test.hashCode());
class Test
或者直接对引用数据类型a和b,判断(a==b)
可变参数
public class Object
public static void main(String[] args)
Number number = new Number();
int a = number.add(1, 3, 5, 6);
System.out.println(a);
class Number
public int add(int ... nums)
int res = 0;
for(int num:nums)
res += num;
return res;
可变参数的实参可以为数组,可变参数的本质就是数组。
可变参数可以与普通参数一起放在形参列表,但是可变参数一定放到最后!不能有两个可变参数!
作用域
局部变量无默认赋值,全局变量有默认赋值。
属性/全局变量可以加修饰符,局部变量不能加修饰符。
构造器
其实就是构造函数,public也可不写。
public class Object
public static void main(String[] args)
Number number = new Number(1, 3);
System.out.println(number.num1+" "+number.num2);
class Number
int num1, num2;
public Number(int pnum1, int pnum2)
num1 = pnum1;
num2 = pnum2;
查看默认构造器
javap反编译指令!(也可直接写javap Test)
参数:-c:返回汇编代码;-v:输出附加信息。
自定义构造器后,默认构造器无效,此时无法使用new Test();构造器,除非显式定义无参构造器。
对象创建流程分析
this
可以使用hashCode判断this与当前对象的相等的本质。
this访问构造器语法,只能放到构造器内,必须放在第一条语句!:
public class Javap
public static void main(String[] args)
Test test = new Test();
System.out.println(test.a+" "+test.b);
class Test
int a, b;
public Test()
this(1, 3);
public Test(int a, int b)
this.a = a;
this.b = b;
IDEA
out存放编译后的文件.class,src存放源文件.java
快捷键:alt+/,自动补全。alt+enter,自动导入。ctrl+alt+L,自动排版(可能与QQ的锁定热键冲突)。
运行的快捷键,我改成了ctrl+alt+N,可以在设置中自定义。
自动添加构造器,alt+insert。
查看类的继承关系:ctrl+h,将光标移动到类名上。
定位到哪个类的方法:ctrl+b,将光标移动到方法上。
自动分配变量名:在声明的后面加.var,再按回车,如:
new Scanner(System.in).var
还有很多的快捷键!
模板:main,sout,fori,
以上是关于后端开发Java基础学习(适合有其它语言基础)的主要内容,如果未能解决你的问题,请参考以下文章