Java小白 学习笔记(二)——2020版Java语言基础

0 前言

对于java或者其他编程语言的学习,没有良好的学习认知和习惯是无法高效快速掌握的,为了避免繁文缛节,仅用关键句列出(方法学习自韩顺平老师)
(1)学习过程要高效且愉快——通过搭建游戏、好玩的项目边玩边学
(2)先建立一个整体框架,然后再做细节——要有整体的知识体系(笔记目录整体来看就是框架了)
(3)先知道怎么去做,然后再去琢磨为什么
(4)不是会了再做,而是做了才会,是“做中学”的过程
(5)适当囫囵吞枣,不需要每一个细节都抠
(6)用到什么再学什么
(7)学习软件编程的初始阶段应该是在琢磨别人怎么做,而不是我认为应该怎么做的过程

这次笔记的主要内容是计算机进制转换、java变量及运算、java语句结构、数组字符串。最后给出实例并学习java错误的调试方式。
笔记的核心原则是:精简易懂+容易复现

1 计算机进制转换

(1)概述

计算机在设计出来后,能够识别的数制是二进制;而我们日常生活所用的是十进制。拿我们日常的十进制来说:0-9,逢十进位,这就是十进制,其他二进制、八进制、十六进制等都可以依次类推。其中,十六进制的基本数字是0-9,ABCDEF

(2)进制转换

详细可阅读博文:计算机基础进制转换(二进制、八进制、十进制、十六进制)
此处仅给出总结性结论
Java小白 学习笔记(二)——2020版Java语言基础_第1张图片
(3)java编码实现
该代码仅用于数值转换使用,而非知识点学习,可囫囵吞枣只用即可,具体细节知识后续会提及。
代码源自网络

// 作者:网络
// 功能:用来实现进制数之间的转换功能。
// 日期:2020年5月24日

package calculate;

public class conversionNumber {
		/**
		*② 算法思想是先把一个m进制的数转换为10进制
		*	再将转换的十进制数转换为要转换的n进制数。
		*/
		public static void main(String[] args){
			input();
		}
		/**
		*该函数,用来实现十进制数转换为任意进制数
		*
		*
		*/
		public static void changeTenToNum(int ten,int number){
			int sum=0;
			int i=0;
			int j=0;
			while(ten>0){
				int remainder=ten%number;
				ten =ten/number;
				sum+=remainder*Math.pow(10,j);
				j++;
			}
			System.out.println("\n"+"结果为:"+sum);
		}
		/**
		*input函数用来实现数据的输入输出功能。
		*/
		public static void input(){
			boolean flag=true;
			System.out.println("输入0结束循环\n");
			while(flag){
				System.out.println("\n请输入要转换的进制数:\n");
				java.util.Scanner read=new java.util.Scanner(System.in);
				int fristNum=read.nextInt();
				if(fristNum==0)
				{
					flag=false;
					System.out.println("\n你已结束了该算法,请重新进入!\n");
					break;
				}
				System.out.println("请输入该数字是几进位数:\n");
				int secondNum=read.nextInt();
				if(secondNum==0)
				{
					flag=false;
					System.out.println("\n你已结束了该算法,请重新进入!\n");
					break;
				}
				int copy=fristNum;
				/*
				下面的while循环和if判断语句,用来实现判断输入数字的准确性。
				*/
				while(fristNum>0){
					int judgment=fristNum%10;
					fristNum /=10;
					if(judgment>=secondNum){
						System.out.println("你输入了一个错误的数字,可能是该数字与其进制数不匹配!");
						flag=false;
						break;
					}
				}
				if(flag==false){
					flag=true;
					continue;
				}
				fristNum=copy;
				System.out.println("请输入要转换为几进位数:\n");
				int thirdlyNum=read.nextInt();
				if(thirdlyNum==0)
				{
					flag=false;
					System.out.println("\n你已结束了该算法,请重新进入!\n");
					break;
				}
				changeTenToNum(changeNumToTen(fristNum,secondNum),thirdlyNum);
			}
		}
		/**
		*changeNumToTen函数用于实现n进制数转换为十进制数。
		*/
		public static int changeNumToTen(int n,int num)
		{
			int i=0;
			int sum=0;
			int j=0;
			while(n>0){
				i=n%10;
				n/=10;
				sum+=i*Math.pow(num,j);
				j++;		
			}
			return sum;
		}
}

(4)二进制补码
计算机系统的内部,数值以二进制的补码形式存储。在java程序中输入的十进制数据都会被自动转换为二进制,java内部也以二进制来进行数值计算,但返回的结果是十进制
补码可以将符号位和其他位统一处理;最高位不再表示数值,而是最为符号位,可以讲数值折半;减法也可以按假发来处理

计算机中正负数的关系是取反加一
Java小白 学习笔记(二)——2020版Java语言基础_第2张图片
补码计算:
二进制的最高位是符号位,0表示正数,1表示负数;正数的值是其本身,负数的值是最高位不变,其他位逐渐取反。两数相加,若最高位有进位,则进位被舍弃,例如:
Java小白 学习笔记(二)——2020版Java语言基础_第3张图片
正数+负数=模(某种类型数据的总数)

2 变量与数据类型

2.1 变量

(1)数据类型
java定义了基本数据类型、引用数据类型和自定义类型
Java小白 学习笔记(二)——2020版Java语言基础_第4张图片
(2)变量概述

在计算机的高级语言中用变量来管理引用类型的数据,
其中,变量是可变的量,相对应的常量就是不可变的量,字面量是指java常/变量中存放的具体数据
变量作用域:java用一对大括号作为语句块的范围,称为作用域,作用域中的变量是不能重复定义的
变量可以简化运算,能够保存多种数据类型

(3)变量的命名规则
首字母采用英文、$或下划线;名称由字母、数字和下划线组成
命名遵循见名知义的原则,首字母建议不用大写字母,用驼峰命名法命名多个单词组成的变量名。

(4)变量的定义、初始化
定义:类型 变量名1 变量名2…;
每种变量必须属于一种数据类型
初始化:age=23;

(5)包装类
java为基本数据类型提供了对应的类,这些类称为包装类。包装类封装了一些很实用的方法和常量,在集合中用来定义集合元素的类型
Java小白 学习笔记(二)——2020版Java语言基础_第5张图片
Java小白 学习笔记(二)——2020版Java语言基础_第6张图片

2.2 数据类型

(1)整数类型

java有四种整数类型:byte/short/int/long
java默认整数计算的结果是int类型
整数的字面量是int类型,若字面量超过int类型的最大值,则字面量是long类型,那么后面要用L或者l表示该值是long类型
java底层byte和short按照32位计算

(2)浮点类型

浮点类型用于表示小数的数据类型,包括float和double两种,默认的计算结果和字面量都是double类型
科学计算法:
在这里插入图片描述
float类型共32位,1位位符号位,指数8位,尾数23位;精度是23位,小数是以尾数长度表示精确度

(3)字符类型

char的字面量可以是一个英文字母、字符和一个汉字,并且由单引号包括
java底层使用一个16位Unicode字符编码处理

(4)转义符

转义字符是“\”,通过转义字符,可表示一些特殊的字符
Java小白 学习笔记(二)——2020版Java语言基础_第7张图片
(5)布尔类型

布尔类型是用来表示肯定或否定两种可能,常用在分支语句、循环语句中,只有两个值:true和false表示;
定义:boolean isPass;

2.3 类型转换

java中经常出现不同类型数据进行相互转换的现象

(1)自动类型转换

小类型向大类型的转换会自动完成,即不需要程序员编写额外的代码,由JVM负责
自动类型转换也叫“隐式类型转换”
转换规则:符号位会自动扩展,负数补1,正数补0
自动转换包括的情况:
在这里插入图片描述
(2)强制转换

强制转换过程中可能发生数据溢出。

(3)转换一览图(图片来源:https://www.cnblogs.com/tyyt/p/10398270.html)
Java小白 学习笔记(二)——2020版Java语言基础_第8张图片

3 变量运算

(1)自运算
自增: i=i+1,space=space+""; ++i,(先加1);i++(后加1);i+=n
自减:–i (先减1);i++(后加1);i-=n
自乘:i*=n
自除:i/=n

(2)关系运算
关系运算种类如下,结果只有true和false两种
Java小白 学习笔记(二)——2020版Java语言基础_第9张图片
(3)逻辑运算
逻辑运算种类如下,结果只有true和false两种
Java小白 学习笔记(二)——2020版Java语言基础_第10张图片

4 结构语句

(1)if 判断语句
if语句用于判断不同的条件,根据关系运算、逻辑运算等得到的true、false等逻辑值来决定执行不同的代码
格式一:

if (Score>=60){
System.out.println(score+"及格")
}

格式二:

if (a>b){
sysytem.out.println(a+"max");
}
else{
system.out.println(b+"min");
}

(2)Switch语句

switch语句称为情况选择语句,又称开关语句
Java小白 学习笔记(二)——2020版Java语言基础_第11张图片

Scanner scanner=new Scanner(System.in);
System.out.println("输入月份");
int month=scanner.nextInt();
switch(month){
case 1;
case 3;
case 5;
case 7;
case 8;
case 10;
case 12;
System,out,println("31");
break;
case 4;
case 6;
case 9;
case 11;
System,out.println("30");
break;
case 2;
System,out.println("28");
break;
default;
system.out.println("输入的月份有误")}

(3)循环语句
循环语句有while和for循环两类
Java小白 学习笔记(二)——2020版Java语言基础_第12张图片
· while 循环

int i=1;
while(i<=20){
System.out.println("上课迟到,罚做俯卧撑"+i+"次");
i++;
}
int i=1;
do{
System.out.println("上课迟到,罚做俯卧撑"+i+"次");
i++;
}while (i<=20);

·for循环

for (int i=1;i<=20;i++){
System,out.println("上课迟到,罚做俯卧撑"+i+"次");
}

5 数组与字符串

5.1 数组

(1)定义

数组是有序数据的集合,数组中的每个元素具有相同的数组名和下标来做标识

(2)分类

一维、二维、多维

(3)数组的声明
声明形式有如下两种
Java小白 学习笔记(二)——2020版Java语言基础_第13张图片
但是,为数组分配内存空间,如果不分配内存,将不能访问它的任何元素,我们使用new关键字来为数组分配内存空间

int arrayDemo[];
arrayDemo=new int[3];
int[] acore;
acore =new int[3];

Java小白 学习笔记(二)——2020版Java语言基础_第14张图片
(4)数组的初始化

初始化方式有两种:静态初始化和动态初始化

(5)数组的使用

int score[]={43,34,5,66,12};
int max,min;
max=min=scaore[0];
for(int i=0;i<score.length;i++){
if(score[i]>max){
max=score[0];
}
if(score[i]<min){
min=score[0];
}
System.out.println(max);
System.out.println(min);

(6)二维数组
声明、内存分配和一维数组类似

int score[][];
score = new int [5][5];
for (int i=0;li<score,length;i++){
for(int j=0;j<socre[i].length;j++){
System.out.println(score[i][j]+" ");
}
System.out.println();
}

静态初始化

int score[][]={{100,90},{67,70},{50,78,80}};

5.2 字符串

(1)字符串概述
·实例化String对象,直接赋值或者用new,通过new关键字创建占用空间较大。

String str="Hello";
String str=new String("hello");
System,out.println(str);

Java小白 学习笔记(二)——2020版Java语言基础_第15张图片
注意:字符串内容不可更改
Java小白 学习笔记(二)——2020版Java语言基础_第16张图片
字符串常用方法:
字符串长度:length()方法

String str="Sonny";
System,out,println(str.length());
}

字符串转换为数组:toCharArray();

char data[]=str,toCharArray();
for(int i=0;i<data,length;i++){
System,out,println(data[i]);
}

从字符串中取出特定位置的字符:charAt();

char data[]=str,toCharArray();
System,out,println(str.charAt(3));

字符串与byte数组的转换方法:getBytes()

byte data[]=str.getBytes();
for(int i=0;i<data,length;i++){
System,out,println(new String(data));
}

过滤字符串中存在的字符indexOf()

String str="[email protected]";
System,out,println(str.indexOf("@"));

去掉字符串中的空格:trim();
从字符串中取出子字符串:subString()
大小写转换:toLowerCase() toUpperCase()
判断 字符串开头结尾字符:endsWith() startWith()
替换String字符串中的一个字符:replace()
(2)args数组

通过main方法的args数组可以从控制台获取一组字符串数据

(3)scanner

Scanner类用于扫描从控制台输入的数据,可以接收字符串和基本数据类型的数据,位于java.util.Scanner包中
string next():接收控制台输入的一个字符串
string nextLine():接收控制台输入的一个字符串(可以接收空格)
string nextInt():接收控制台输入的一个int数据
string nextDouble():接收控制台输入的一个double数据
string nextBoolean():接收控制台输入的一个boolean数据

可以通过charAt()方法从next()或nextLine()中获取输入的字符
例如:
“abc”.charAt(0),可获取第一个字母a
步骤:
Scanner scanner =new Scanner(System.in);
System.out.println("")
String name = scanner.next();

(4)StringBuffer
缓冲区,本身也是操作字符串,但是与String不同,它是可以更改的
属于一种操作类,必须通过实例化操作
常用方法:
append():追加内容
insert():插入内容
replace()::替换内容
indexOf():过滤字符串

StringBuffer sb=new StringBuffer();
sb.append("Sonny");
sb.insert(0,"love");
System.out.println(sb);

(5)StringBuilder
一个可变的字符序列,被设计作用为StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候,建议优先考虑该类,速度比StringBuffer要快。但是如果涉及到线程安全方面,建议使用StringBuffer
常用方法:
append():追加内容
insert():插入内容

6 错误调试

6.1 错误调试

(1)程序错误类型

程序的错误分为编译期语法错误、运行期异常错误、运行期逻辑错误

(2)调试——Debug

先将下面的程序输入到eclipse中

package com.sonny.exc;

public class debug00 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a=100;
		int b=10;
		System.out.println("a="+a+"\tb="+b);
		a=b;
		b=a;
		System.out.println("a="+a+"\tb="+b);
	}

}

Java小白 学习笔记(二)——2020版Java语言基础_第17张图片

debug调试按钮如图
Java小白 学习笔记(二)——2020版Java语言基础_第18张图片
如果没有跳出debug窗口,可在右上角选择debug
Java小白 学习笔记(二)——2020版Java语言基础_第19张图片
断点是在源代码的可执行部分的指定行(断点设置位置应该是程序员怀疑错误代码的附近位置)设置一个标志,通过设置断点可以快速执行断点之前的代码,然后在调试运行方式下,程序运行到该断点标志处会自动暂停,等待下一步操作;这时可以换单个命令运行的方式来运行程序,查找程序中的逻辑错误。

6.2 异常处理

(1)异常是什么
异常是导致程序中断运行的一种指令流,如果不对异常进行正确处理,则可能导致程序的中断执行,造成不必要的损失。

例如错误的代码:

package com.sonny.exc;

class Exc{
	int i =10;
}
public class exceotiionDemo01 {
public static void main(String[] args) {
	int a=10;
	int b=0;
	int **temp=a/b;**
	System.out.println(temp);
}
}

(2)异常的格式:
Java小白 学习笔记(二)——2020版Java语言基础_第20张图片
try里面放置的是可能出现异常的语句,在catch中对异常进行捕获,可以多个模块一起进行,finally是程序一定会运行的部分,不管是否有异常
对前面提到的异常程序进行捕获:

package com.sonny.exc;

class Exc{
	int i =10;
}
public class exceotiionDemo01 {
public static void main(String[] args) {
	int a=10;
	int b=0;
	int temp=0;
	try {
		temp=a/b;
	} catch (Exception e) {
		System.out.println(e);
	// TODO: handle exception
	}
	System.out.println(temp);
}
}

输出异常:在这里插入图片描述
多个catch块处理异常

package com.sonny.exc;

class Exc{
	int a =10;
	int b =10;
}
public class exceotiionDemo01 {
	
	public static void main(String[] args) {
		int temp=0;
		Exc e=null;
		try {
			temp=e.a/e.b;
			System.out.println("程序推出");
		} catch (NullPointerException e2) {
		System.out.println("空指针异常"+e2);
		}
		 catch (ArithmeticException e2) {
				System.out.println("算数异常"+e2);
		}finally {
			System.out.println("程序推出");
		}
	
}
}

(3)常见异常
数组越界异常:ArraylndexOutOfBoundsException
数字格式化异常:NumberFormatException
算数异常:ArithmeticException
空指针异常:NullPointerException

(4) Throws 关键字
定义一个方法时可以调用throws关键字声明,使用throws声明的方法表示此方法不处理异常,抛给方法的调用者处理

格式:
在这里插入图片描述

package com.sonny.exc;

public class exceptionDemo02 {
	public static void main(String[] args) {
	try {
		tell(10, 0);
	} catch (Exception e) {
		// TODO: handle exception
		System.out.println(e);
	}
		
}
	public static void tell(int i,int j) throws ArithmeticException{
		int temp=0;
		temp=i/j;
		System.out.println(temp);
	}
}

throws关键字将异常抛出,交给方法的调用者进行处理,如果主方法抛出异常,那么将由jvm处理

package com.sonny.exc;

public class exceptionDemo02 {
	public static void main(String[] args) throws Exception {
		tell(10, 0);		
	}
	public static void tell(int i,int j) throws ArithmeticException{
		int temp=0;
		temp=i/j;
		System.out.println(temp);
	}
}

throws抛出一个异常,抛出的时候直接抛出异常类的实例化对象即可

package com.sonny.exc;

public class exceptionDemo03 {
	public static void main(String[] args) {
	try {
		throw new Exception("实例化异常对象");
	} catch (Exception e) {
		// TODO: handle exception
		System.out.println(e);
	}
	
}
}

在这里插入图片描述

(5)自定义异常

自定义异常直接继承Exception就可以完成自定义异常类

package com.sonny.exc;

class MyException extends Exception{
	public MyException(String msg) {
		super(msg);
	}
}
public class exceptionDemo04 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
try {
	throw new MyException("自定义异常");
} catch (MyException e) {
	// TODO: handle exception
	System.out.println(e);
}
	}

}

你可能感兴趣的:(java)