第一章
JAVA语言概述
一、基础语法
变量分类
引用数据类型,赋值的是变量所保存的数据的地址值
1.基本数据类型之间的运算规则:
byte、char、short->int->long->float->double
String运算
- 和8种基本数据类型做运算,只能是连接:+
- 整型+char型:结果为整型,做运算 (char ,short,byte做运算结果为int型)
char c='a';
int num=10;
String str="hello";
//字符数组+整型=整型
System.out.println(c+num+str); //c加10=107,拼接hello
System.out.println((c+num)+str);//107hello
// string拼接string
System.out.println(c+(num+str)); //a10hello
System.out.println(c+str+num); //ahello10
System.out.println(str+num+c); //hello10a
byte b=5;
short s=3;
short t=s+b; // no! 结果为int型
2.补码->原码
减一求反(除去符号位1)加负号
二进制的整数有如下三种形式:
- 原码:直接将一个数值换成二进制数。最高位是符号位
- 负数的反码:是对原码按位取反,只是最高位(符号位)确定为1。
- 负数的补码:其反码加1。
#开发工具
JDK=JRE+开发工具集
JR E=JVM+JAVA SE标准类库
3.位运算:
<< 左移一位,相等于*2
(||)右移一位,相当于 /2
P83 位运算——>项目一 127-131
for循环 外层循环控制行数 内层循环控制列数
4.流程控制
break
continue
流程控制结构的使用+算法逻辑
标题1.return
return 结束整个方法,不管return处于多少个循环中、
2.break
break跳出离此关键字最近的一层循环
class xunhuan{
public static void main(String[] args) {
for(int i=1;i<=4;i++){
for (int j=1;j<=10;j++){
if(j%4==0){
break;
}
System.out.print(j);
}
System.out.println();
}
}
}
3.continue
continue是结束这一次循环,执行上一个循环
循环语句:
- 初始化部分
- 循环条件部分
- 循环体部分
- 迭代部分
二、运算符
-
算术
-
赋值
-
比较
-
逻辑
-
位运算符
-
三元运算符
三、数组
1.数组的命名规则
动态数组:类型 [ ]数组名=new 类型**[长度]**
静态数组:数组名=new 类型**[数组长度]**
2.数组的特点:序列 类型
错误 值类型错误
3.数组的分类:
一维数组
二维数组
Person p=new Person();
栈(stack):main方法里,局部变量(形参) Person p 栈内存
堆(heap):(地址)new对象(属性)、数组 new Person();使用new开辟堆内存
方法区: 类的信息加载、常量池、静态域
return的作用:
1.在循环中判断条件时使用。帮助当你的需要的条件满足时跳出或中止循环。
2.在方法里,当你定义一个方法,需要它返回一个值给你的时候,在方法最后,将处理的值返回到你需要的地方。
3.一维数组举例p146
1.赋值
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TA8tAt7o-1650185449138)(C:\Users\Lucky\AppData\Roaming\Typora\typora-user-images\image-20211231155245624.png)]
package com.atguigu.exer;
public class ArrayDemo1 {
public static void main(String[] args)
{
int[] array1,array2;
array1=new int[] {2,3,5,7,11,13,17,19};
for(int i=0;i<=array1.length;i++) {
System.out.print(array1[i]+"\t");
}
array2 = array1;
for(int i=0;i<array2.length;i++) {
if(i%2==0) {
array2[i]=i;
}
}
System.out.println();
for(int i=0;i<=array1.length;i++) {
System.out.print(array1[i]+"\t");
}
}
}
//数组的赋值
array2-=new int[array1.length];
for(i=o;i<array2.length;i++) {
array2[i]=array[1];
2.反转
// 三个变量转换
public static void main(String[] args){
String[] array =new String[] {"aa","bb","cc","dd"};
}
{
for (int i=0,j=array.length-1;i<j;i++,j--) { //记得减一
String temp=array[i]; //三个变量转换
array[i]=array[j];
array[j]=temp;
}
}
3.线性查找
//线性查找
// 1.二维数组 2.从后往前遍历 3.找到目标值退出
public static void main(String[] args){
String[] array =new String[] {"aa","bb","cc","dd"};
String dest="bb";
boolean IsFlag=true; //标志为真,如果找到为false
for (int i=0;i<array.length;i++) {
if(dest.equals(array[i])) {
System.out.print("找到了指定位置"+i);
IsFlag=false;
//isFlag是一个bool类型的值(只有false和true两种状态。‘可以理解为int型的0和1’),作为之后判断输出x为奇数或偶数的标志。
break;
}
}
if(isFlag) {
System.out.print("没有找到");
}
}
}
4.二分法查找 数组必须有序
int index=arrays.binarysearch(arr3,key);
//二分法查找
//从mid开始,确定左边/右边,再确定中间
public static void erfen(String[] args) {
int[] arr2=new int[]{-98,-34,1,5,10,45,210};
int dest=250;
int begin=0; //首索引
int end=arr2.length-1; //尾索引
boolean isFlag=true;
while (begin<end){
int mid=begin+(begin+end)>>1; //中间索引
if(dest==arr2[mid]){
System.out.println("索引为"+mid);
isFlag=false; //进入改变值
break;
}
else if(arr2[mid]>dest){ //中间值>目标值 =>左侧有序
end=mid-1;
}
else { //arr2[mid]<test
begin=mid+1;
}
}
if(isFlag){
System.out.println("没有找到哦");
}
}
5.排序
-
时间复杂度
-
空间复杂度
-
稳定性:排序后次序保持不变则为稳定
交换排序:
冒泡排序、快速排序
1.冒泡排序:
从头开始,相邻比较 O(n*n)
class paixu{
//冒泡排序 从小到大排序
public static void main(String[] args) {
int[] arr = new int[]{43, 32, 12, 22, 45, 65, 67};
for (int i =0;i<arr.length-1;i++) { //外层循环 长度减一
for (int j=0;j<arr.length-1-i;j++) { //内存循环从左到右 j-i个长
if (arr[j]>arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp; //交换
}
}
}
System.out.println(Arrays.toString(arr));
}
}
2.快速排序 O(nlog2n)
念叨叨:
本学习内容来源于【B站尚硅谷】,个人学习笔记。