后端开发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的网站

https://www.matools.com/

(不止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基础学习(适合有其它语言基础)的主要内容,如果未能解决你的问题,请参考以下文章

Java进阶学习规划

Java与go哪个更适合后端开发呢?哪个更适合新手呢?

Java后端开发工程师学习笔记狂神说Java笔记

Java后端开发从初学者玩成大牛的学习路线

FFmpeg基础库编程开发学习笔记——视频常见格式

web后端开发需要啥技术