一.数据类型与运算符
1.数据类型的分类
·8大基本数据类型
数值型:·整形:byte(1) < short(2) < int(4) < long(8);
·浮点型 float(4)< double(8);
字符型:·char
布尔型:·boolean(false/true)
2.变量:
命名规则:(1)只能包含数字、字母、下划线;
(2)数字不能开头;
(3)变量名区分大小写;
规范:推荐变量名为小驼峰,多个单词时,除去首单词外,其他单词首字母大写;
推荐类命名为大驼峰,多个单词首字母全大写;
推荐包命名为全小写,多个单词用下划线_分割;
3.常量:
声明后不可更改;
语法:final int a = 10;
字面型常量:直接写出来的值;
4.数据类型转换:
a.小转大:涉及到运算时自动提升
b.大转小:强制类型转换,存在丢失精度风险;
5.运算符:
算数运算符:+ - * / %
关系运算符:< > == >= <= !=;
逻辑运算符: && || !
位操作:& | ^ ~
移位运算: << >> >>>(无符号右移);
条件运算符: 三木运算符 int c = a<b?a:b;
6.程序的逻辑结构:
顺序结构;
分支结构:
if结构:if()
else if()
else
switch结构:
switch() case a:break;
default:
循环结构:
while结构:
while(表达式){}
break与continue:
break:结束当前循环;
continue:跳过当前循环执行下一次循环;
for结构:用于循环次数已知
7.输入输出:
标准输入:System.out.print --------不带换行
System.out.println --------带换行
System.out.printf --------和c的printf一样
标准输入:原生的较难用,使用java.util.Scanner
Scanner scanner = new Scanner(System.in);
String name = scanner.next();
int age = scanner.nextInt();
从键盘读取多个内容:
while(scanner.hasNextDouble);
8.方法
定义:代码的复用性,表示一种行为或者能力
语法:public static 返回值 方法名称 (参数列表){具体代码 return;}
tips:break当有循环嵌套时,只能跳出本层循环,若跳出全部循环,可使用return;
方法的调用:通过主方法进行调用 数据类型 变量 = 方法名称,参数
若没有返回值,用void修饰
Java中没有函数声明的概念,一旦定义了必须实现,,与位置无关
参数传递:只有值传递,只是将数值拷贝一份给形参
方法的重载(overload):方法名称相同,根据参数列表的不同选择不同方法,例如println
方法重写(override):重写该方法,之前的无效。调用时使用自己写的方法
方法的递归:
使用场景:·大问题转换为多个子问题的求解
·拆分后的子问题和原问题除了数据规模不相同外,其他解决思路完全相同。
·存在递归出口条件
如何写出递归:关注方法的语义、关心如何利用方法解决我的问题、当前只能干什么,剩下交给子方法处理;
9.数组
详细看另一篇博客:JAVA数组笔记_@未来可期的博客-CSDN博客
定义:存放相同数据类型的一组集合;
创建:静态初始化:int[] data = {1,2,4,5,6};
动态初始化: int[] data = new int[]{1,2,4,5,6};
int[] data = new int[] -----------默认初始值都为0;
访问与长度:取得数组的长度,数组名.length
取得数组的元素arr[index] ->索引
练习题:
1.将数组转换成为字符串:Arrays.toString(数组名);
2.数组拷贝:Arrays.copyOf(原数组名,拷贝后的新数组长度);
深拷贝:创建新的对象,将原来的数组内容拷贝到新数组
浅拷贝:创建新的引用;
3找到无序的最大元素;
4.求整形数组的和;
5.查找数组中指定元素;
7.二分查找(数组必须有序);
8.数组排序:Arrays.sort(数组名) --------双轴快排;
9.数组逆序;
10.数组数字组合排列;
10.类和对象
编程思想:如何把现实生活的问题抽象成代码实现;
面向对象:JAVA语言一切皆为对象,所有行为与属性都被包装到一个个对象中;
类:模板,规定了该类所具备的属性和行为
对象:类的一个实例;
类的定义:class类名{}
根据类产生对象:类名 对象名 = new 类名();
static关键词:与对象无关,直接通过类名称进行调用;
static属性:静态属性,在JVM区进行保存,该类所有对象共享该属性
static方法:静态方法;
static代码块:静态代码块;
static类:静态内部类;
11.面对对象编程三大特性:封装继承多态
封装性:private实现属性的封装,当一个属性被private修饰,只在类的内部可看见,出了该类无法使用;
public:公共的,共有的,无论如何都可以使用;
阿里编码规约:所有的成员变量都使用private进行修饰(99%);
若想取得或者修改private属性的变量,需要使用提供的getter/setter方法;
12.线性表
1.顺序表:将java中的数组包装成为类,使得基本数组有了扩容的功能
插入:1.判断合法性;2.边界的判断;3.向index位置插入元素
查找,修改,删除等操作;
动态数组的优点:根据index来修改/查找元素快 时间复杂度为O(1);
缺点:数组定长的问题,需要扩容,需要大量的元素搬移工作,耗时;
2.链表:
为了解决动态数组的缺点,引入链表
头插法:先创建一个节点,使之指向链表头部;
遍历单链表:只能从头部开始遍历;
在中间位置进行插入 ;
增删改查;