java 基础学习笔记整理3-15

标识符命名

可以 a-z 0-9 _或者$ 不能数字开头,带关键词

包名 xxxyyyxxx

类名,接口名 XxxYyyZzz

变量名,方法名 xxxYyyZzz

常量名 XXX_YYY_ZZZ

变量名规则

变量先声明,后使用

变量都定义在其作用域内,他是有效的

字符串输出中 \

System.out.print("我的世界\\n不是我\"的\"游戏")
   \后面的字符,不算 系统符号

数据类型转换

double d1=12.9;
int a=(int)di;   //强制转换截断 a=12

byte,char,short -->int-->long-->float-->double'

long 1=123123;//没有L  自动转换int
// int i=(int)1

//报错   整型常量默认int型
byte a=12;
byte b=a+1;//1是整形常量int

浮点常量默认为double

 

变量

String字符串 'char' "String"

  • String不是基本数据类型,属于引用数据类型

  • 使用方法与基本数据类型一致,列如:String str="abcd";必须使用" "

  • 一个字符串可以串接另一个字符串,也可以直接串接其他类型数据。

str =str+"xyz";
int n=100;
str =str+n;
  • 声明String类型变量时,使用一对""

  • String可以和8中类型做运算,只能是连接运算

  • 运算的结果也是String类

  • String 挨着 +是连接符号

char c='a';//a=97
int num=10;
String str="hello";
System.out.println(c+num+str);//107hello
       System.out.println(c+str+num);//a hello 10
       System.out.println(c+(num+str));//a 10 hello
       System.out.println((c+num)+str);//107 hello
       System.out.println(str+num+c);//hello 10 a
   
  • 'a '是char类型 "a " String类型

String str=3.5F+"";// str="3.5"

 

进制

  • 二进制 binaru :0b或者0B开头

  • 十进制decimal:

  • 八进制octal; 0开头

  • 十六进制hex; 0-9 A-F 0x或者0X开头

    如0x21AF+1=0X21B0

 

数字-原码-反码-补码

  • 正数三码合一

  • 负数三码不一样

计算机的底层都是补码存储数据

 

运算符

运算符,表示数据运算,赋值,比较

  • 算数运算符 + - * / % ++ --

int a=5;
int b=2;
double c=b/(2+0.0);//0.0是浮点数 强制转换  
int m1 = -12;
int n1 = 5;
m1%n1=-2  //取余运算 结果的符号与被模数的结果相同
   %来判断能否除尽
int a=10;  //=是赋值
int b=++a; //a+1 赋值给b a=a+1
int c=a++; // c=10 a=11
++不会改变自身数字类型  byte short    

 

  • 赋值运算符 =

    = 两边的数据类型不一致时,可以使用自动类型装换或者使用强制类型装换进行处理

     + 扩展的赋值运算符   +=   -=   *=      /=   %=    (不会改变变量本身的类型)
    int i,j;
    i=j=10;  //连续赋值
    int a=10,b=20;

    int n=3;
    int m=2;
    n*=m++;//n=n*m++ 运算中m=2   运算完m=3   n=6
    n += (n++)+(++n); //n=n+(n++)+(++n) 3+3+5=11

     

  • 比较运算符(关系运算符) 结果都是boolean型

    • == 相等 != 不相等 < > <= >=

  • 逻辑运算符

    • & 逻辑与 | 逻辑或 ! 逻辑非

    • &&短路与 || 短路或 ^ 逻辑异或

    • && 判断false 后终止代码 不进行后面的判断

    • || 判断true 后终止代码 不进行后面的判断

  • 位运算符

    • << >> >>> & | ^ ~取反

  • 无符号右移 >>> 高位无论0或者1 都用0补

  • 0=true 1=false

  • 三元运算符 + (条件表达式)?表达式1:表达式2; + true 执行表达式1, fales执行表达式2

nt a=1,b=2;
int c=(a>b)?a:b;  //取较大值
String d=(a>b)?"a大":((a==b)?"a和b相等":"b大");
//可以嵌套使用,   输出类型必须一样

三元运算符 都可以改写 if else

 

流程控制

顺序结构

 

分支结构

if,,else 和switch-case

if(){
}else if(){
   
}else{
   
}//三选一

switch

表达式只能是 byte ,short, char, int, String(jdk7更新), 枚举类型 (jdk5更新)

switch(表达式){
   case 常量:
       语句:
       //break;      
       case 常量2:
       语句2
    //break;
           case 常量3:
       语句3
       //break;
   default:
  语句:
     //break;  
}      
break 穿透

 

循环结构

  • for

int num=1;
       for (System.out.print('a');num<=3;System.out.print('c'),num++) {
           System.out.print('b');
      }
//可以输出

 

  • while

初始化条件
while(判断条件){
   循环体;
   迭代;
}          

 

  • do-while

public static void main(String[] args) {
       int i=12;
       do{
           System.out.println(i);
           i--;
      }while(i>10);

       int j=12;
       while(j>10){
           System.out.println("是"+j);
           j--;
      }
  }
//满足条件多次循环,循环次数一样

 

break continue 关键字

break 用在循环,和switch中

  • 结束当前循环

continue 用在循环中

  • 结束当次循环

 

默认结束最接近自己的一层循环

 

利用标签,来指定结束的某一层循环

 label: for(int i=1;i<=4;i++){
           for(int j=1;j<=10;j++){
               break  label;

 

return 特殊流程控制符

  • return: 并非专门用于结束循环。他的功能是结束一个方法,当一个方法执行到return时,这个方法就结束了

  • 与break和continue不同的是,return直接结束整个方法,不管这个return处于多少层循环内

 

取10000以内的质数最快算法

int c=0;
       long start = System.currentTimeMillis();
           axt:for(int m =2;m<100000;m++){//遍历一边100000以内的自然数
               for(int k=2;k<=Math.sqrt(m);k++){//j被k除   开方,算法2-10以内
                   if(m%k==0){//m被k处尽
                       continue axt;
                  }
              }
           c++;
          }
           long end = System.currentTimeMillis();
           System.out.println(end-start);
       System.out.println(c);

 

Scanner类使用

1.导包

import java.util.Scanner;//导入包

public static void main(String[] args){
   Scanner 名字 = new Scanner(Systrm.in)//实例化
//类型 i = 名字.next类型(); 调用相关方法来获取指定类型的变量
       int i = 名字.nextInt();
}

Math方法

随机生成doublic 0.0-1.0 之间的数字

int 名字=(int)(Math.random()*90+10);//10-100之间的数
doublic 1.0*90  到不了100 截断后是99

 

数组

  1. 数组属于引用数据类型

  2. 相同数据有序排列,索引,角标,下标

  3. 数组长度一旦确定就不能修改

  4. 数组分类 + 维度:一维,二维,,,, + 元素类型:基本类型,引用类型

一维数组

声明,初始化,调用指定位数组

获取数组长度,遍历数组,数组的默认值

数组内存解析

 

int[] ids;//声明
ids = new int[]{1,2,3,4};//初始化静态
String[] names = new String[5];//动态初始化
String[0]="我";  //0号位赋值

length获取数组长度

数组名.length

boolean 默认值是false //0

String 默认值 null 没有赋值 没有""

二维数组

一维数组的元素还是一维数组;就是二维数组

int[][]b=new int[][]{{1,2,3,},{3,4,5},{2,1}};//二维静态初始化
       int[][]c = new int[3][2];//3个元素,长度为2
       int[][]d = new int[3][];//没有赋值 编程通过但无法 使用
int[][] e=[][]//二维数 可以不用new
   int[0].length //获取第二层数组的长度

数组默认值

int,byte,short=0 整形

long。float= 0.0 浮点型

Strting=null 引用类型

boolean=false

char :0

 

数组的常用算法

  • 数组元素赋值(杨辉三角,回形数)

  • 求数值型数组中最大值,最小值,平均数,总和

    + 注意负数的情况
  • 数组的复制,反转,查找(线性查找,二分发查找)

int[] a =new int[5];//数组反转
       for(int i=0;i<a.length/2;i++){
           int b=a[i];
           a[i]=a[a.length-1-i];
           a[a.length-1-i]=b;        

二分法必须是有序数组才可以使用

short[] a1=new short[]{-40,-23,-15,-2,4,15,20,120,200};
      short aa=15;
      int a2=0;
      int a3=a1.length-1;
      while(a2<=a3){
          int a4=(a2+a3)/2;
          if(aa==a1[a4]) {
              //找到了指定值
          }else if(a1[a4]>aa){
              a3=a4-1;
              //向右寻找
          }else if(a1[a4]<aa){
              a3=a4+1;
              //向左寻找
          }
      }

 

  • 素组元素的排序算法

    • 选择排序: 直接排序,堆排序

    • 交换排序:冒泡排序,快速排序

    冒泡排序0(nlong),2个数比较大的往后移动

    快排o(n^2)

    +   + 插入排序:直接插入排序,折半插入排序,Shell排序
    • 归并排序

    • 桶并排序

      + 基数排序

冒泡排序,每次比较 2个数,较大数换位子

 

equals 比较内容是否相等 String

String[] c=new String[]{"2","3"}
String d="2";
if(d.equals(c[1]))//判断c[1] 和d是否一样

 

Arrays 工具类的使用

java.util.Arrays 类为操作数组的工具类,包含了用来操作数组(比如排序和搜索)的各种方法

1boolean equala(int[]a,,int[]b)判断两个数组是否相等
2 String toString(int[]a) 输出数组信息
3 void fill(int[]a.int val) 将指定值填充到数组中
4 void sort(int[]a) 对数组进行排序
5 int binarySearch(int[]a,int key) 对排序后的数组进行二分法检测所指定的值

 

数组中的常见异常

1.ArrayIndexOutOfBoundsExcetion数组角标越界

2NullPointerExceptoin 空指针异常

 

面向对象-上

1.java类 及类成员

  • 属性

  • 方法

  • 构造

  • 代码块

  • 内部类

2.面向对象的三大特征

  • 封装性,继承性,多态性(抽象性)

3.其他关键字

  • this supre static final abstract

    • interface package import

 

类的创建

属性=成员变量=field=域,字段,

方法=成员方法=函数=method

创建类的对象=类的实例化=实例化一个类

class Person{  //类的创建
   //属性 有默认初始化值
   String name;
   int  age;
   boolean isMale;

   //方法
   public void eat(){
       System.out.println("吃饭");
  }
   public void sleep(){
       System.out.println("睡觉");
  }
   public void talk(String language){
       System.out.println("可以说话的"+language);
  }
}

创建一个类的多个对象的时,每个对象都有一套独立的属性

Person p1=new Person();
p1.name="我";
Person p2=new Person();
P2.name="你";
   //每次创建都是在 堆 中新建一个地址,    

 

 

 

posted @ 2021-03-15 00:29  梦想终究会启航  阅读(49)  评论(0)    收藏  举报