0 前言

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

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

1 计算机进制转换

(1)概述

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

(2)进制转换

详细可阅读博文:计算机基础进制转换(二进制、八进制、十进制、十六进制)
此处仅给出总结性结论

(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内部也以二进制来进行数值计算,但返回的结果是十进制
补码可以将符号位和其他位统一处理;最高位不再表示数值,而是最为符号位,可以讲数值折半;减法也可以按假发来处理

计算机中正负数的关系是取反加一

补码计算:
二进制的最高位是符号位,0表示正数,1表示负数;正数的值是其本身,负数的值是最高位不变,其他位逐渐取反。两数相加,若最高位有进位,则进位被舍弃,例如:

正数+负数=模(某种类型数据的总数)

2 变量与数据类型

2.1 变量

(1)数据类型
java定义了基本数据类型、引用数据类型和自定义类型

(2)变量概述

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

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

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

(5)包装类
java为基本数据类型提供了对应的类,这些类称为包装类。包装类封装了一些很实用的方法和常量,在集合中用来定义集合元素的类型

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)转义符

转义字符是“\”,通过转义字符,可表示一些特殊的字符

(5)布尔类型

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

2.3 类型转换

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

(1)自动类型转换

小类型向大类型的转换会自动完成,即不需要程序员编写额外的代码,由JVM负责
自动类型转换也叫“隐式类型转换”
转换规则:符号位会自动扩展,负数补1,正数补0
自动转换包括的情况:

(2)强制转换

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

(3)转换一览图(图片来源:https://www.cnblogs.com/tyyt/p/10398270.html)

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两种

(3)逻辑运算
逻辑运算种类如下,结果只有true和false两种

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语句称为情况选择语句,又称开关语句

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循环两类

· 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)数组的声明
声明形式有如下两种

但是,为数组分配内存空间,如果不分配内存,将不能访问它的任何元素,我们使用new关键字来为数组分配内存空间

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


(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);


注意:字符串内容不可更改

字符串常用方法:
字符串长度: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="SONNY@gmail.con";
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 stubint a=100;int b=10;System.out.println("a="+a+"\tb="+b);a=b;b=a;System.out.println("a="+a+"\tb="+b);}}

debug调试按钮如图

如果没有跳出debug窗口,可在右上角选择debug

断点是在源代码的可执行部分的指定行(断点设置位置应该是程序员怀疑错误代码的附近位置)设置一个标志,通过设置断点可以快速执行断点之前的代码,然后在调试运行方式下,程序运行到该断点标志处会自动暂停,等待下一步操作;这时可以换单个命令运行的方式来运行程序,查找程序中的逻辑错误。

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)异常的格式:

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 exceptionSystem.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 exceptionSystem.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 exceptionSystem.out.println(e);
}}}

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

  1. java jvm学习笔记二(类装载器的体系结构)

    欢迎装载请说明出处:http://blog.csdn.net/yfqnihao                  在了解java虚拟机的类装载器之前,有一个概念我们是必须先知道的,就是java的沙箱, ...

  2. Java虚拟机学习笔记(一)—Java虚拟机概述

    一:编程语言兼容底层系统的方式大概分为两种 1.通过编译器实现兼容 例如C.C++等编程语言,既能运行与Linux系统,也能运行与Windows系统:既能运行于x86平台,也能运行于AMD平台.这种能 ...

  3. Java小白进阶笔记(1)-重新认识Java

    摘要: 这是偏头痛杨的第一篇原文链接,其中,在系列的第二篇开头作者布置了十道题,下面是我的回答(大多是作者的文章摘录) 重新开始学习Java了,这也是为了以后找工作考虑.热爱的机器学习就先放一放了,作 ...

  4. 【深入理解Java虚拟机学习笔记】第二章 Java 内存区域与内存溢出异常

    最近想好好复习一下java虚拟机,我想通过深读 [理解Java虚拟机 jvm 高级特性与最佳实践] (作者 周志明) 并且通过写一些博客总结来将该书读薄读透,这里文章内容仅仅是个人阅读后简短总结,加强 ...

  5. Java前端学习(一)JavaScript脚本语言基础

    JavaScript脚本语言基础 前言 一.JavaScript简介 1.应用 2.特点 3.示例 4.补充 二.语法基础 1.数据类型 2.表达式和运算符 3.流程控制语句 4.函数 三.对话框 1 ...

  6. 【C++程序设计教程(第三版)钱能】 学习笔记 上半部/C++过程化语言基础

    ◆ 第一部分 C++过程化语言基础 >> 在生成可执行程序之前,C++忽略注释,并把每个注释都视为一个空格. ◆ 第2章 基本数据类型与输入/输出 >> 匈牙利标记法(Hung ...

  7. 【学习笔记】山东大学生物信息学——Perl 语言基础入门+高级

    文章目录 8.3 Perl 语言基础入门 8.3.1 第一个 Perl 8.3.2 Perl 的基本规则 8.3.3 字符串常用函数 8.3.4 数组常用函数 8.4 Perl 语言基础高级 8.4. ...

  8. Java学习笔记二十五:Java面向对象的三大特性之多态

    Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...

  9. Java学习笔记二十六:Java多态中的引用类型转换

    Java多态中的引用类型转换 引用类型转换: 1.向上类型转换(隐式/自动类型转换),是小类型到大类型的转换: 2.向下类型转换(强制类型转换),是大类型到小类型的转换: 3.instanceof运算 ...

  10. Java脚本学习-笔记二

    jsp中的除了标签script里面的内容外,其他的都是直接输出的,而script里的内容是执行的过程,只是把最终的结果输出. 看如下的例子: 例1输出结果为: var answer='Yes I am ...

最新文章

  1. 一文讲清,MySQL的执行计划
  2. 人工智能项目:需要注意的七件事
  3. 马斯克星际火箭原型机爆炸!测试失败,3年内至少还需迭代19版
  4. spring配置主库从库_spring下的数据库主从分离(下)
  5. 做产品:光有换位思考还不够
  6. piovt table python_python – Pandas:pivot和pivot_table之间的区别...
  7. 【HDU - 4990】 Reading comprehension (构造+矩阵快速幂)
  8. Java OutputStreamWriter close()方法与示例
  9. volatile的深入理解--【sky原创】
  10. 有没有办法从nodejs代码中的package.json获取版本?
  11. JVM第三节:垃圾回收算法与垃圾回收器
  12. 最新,87本SCI/SSCI期刊被剔除,这5本TOP刊也在内?
  13. matlab 矩阵最大值的求法
  14. 一文了解BIOS相关名词
  15. 主机远程登录报ssh_exchange_identification: read: Connection reset by peer
  16. qt 获取QString 中的数字
  17. 新浪采集内容数据自动发布
  18. 第六讲:STM32F4芯片解读
  19. 辩证法三大规律和五大范畴
  20. 消息Hander dispatchfalled; nested excepton is java.ang.NOSuchMethodError: org.springramewrk.utl.tring

热门文章

  1. 热风销售不合格凉鞋、外套遭处罚,服装商家经营需诚信
  2. 首先,打破一切常规 学习笔记 之四
  3. 请领导过目文件怎么说_职场干货|领导说“辛苦了”该怎么回?
  4. 如何将多个mp3文件合并成一个?
  5. 微信小程序圣诞帽_完成圣诞快乐Web应用程序界面
  6. 3D游戏模型之鼻子的建模
  7. 用Asp.net 就能轻松实现铁道部的订票系统
  8. 前端基础三剑客之——HTML超文本标记语言(上篇)
  9. QT 简单实现自定义标题栏
  10. 技术分享 | Frida 实现 Hook 功能的强大能力