黑马程序员_毕向东_Java基础视频教程第02天 03天 04天

时间:2021-11-21 12:22:44

1)标识符的书写

包名:多单词组合在一起时,所有都小写,xxxyyyzzz

类名:多单词组合在一起时,每个单词首字母要大写,XxxZzzYyy

变量名和函数名:多单词组合在一起时,第一个单词小写,第二个单词起每个单词首字母大写,xxxZzzYyy

常量名:所有单词都大写,相邻两个单词用_分开,XXX_YYY_ZZZ


2)常量的分类

整数;

小数;

字符;

字符串;

boolean;

null;

3)整数的表现形式

二进制

八进制

十进制

十六进制(用0x开头表示,0-9,A-F,满16进1)

4)负数的二进制表现形式:正数的二进制取反加1.负数的二进制最高位是1.


5)java是强类型语言,对每一种数据都定义了明确的数据类型,在内存中分配了不同大小的空间。

数据类型分为基本数据类型和引用数据类型。基本数据类型有:(整数类型) byte  short  int  long     (浮点类型)float double     (字符类型)char    (布尔类型)boolean

                                                                               引用数据类型有:(类)class     (接口)  interface    ( 数组) [ ] 

 整数类型 默认是int   浮点类型默认是double 

6)各个整数型数据容量

byte -128~127 short  负的三万多到正的三万多 

类型提升:容量低的向容量高的转,byte+int=int (byte类型提升为int) 

强制转换:byte+int=(byte)int   (意思是将int强制转换成byte)


7)变量格式

数据类型 变量名 = 初始化值   int x = 2 

特殊写法:

long l = 345333l  (long类型附值后面需加一个字母l加以区别)

float f =23.3f (需要加一个字母f加以区别)

8)算术运算符   %   ++ (前)int a =1 ,int b , b=++a, 结果是a=2,b=2. (++a表示a先自增后再附值给b)   2%8=2,规律:如果左边小于右边,取模为左边,左边等于右边,取模为0,  -1%3=-1  1%-3=1,取模过程中如果有负数,取模的结果只看左边。 

9)转义字符 

\t 表示制表符。


10)逻辑运算符

&   只要有一个为false,就为false。

| 只要有一个为ture,就为ture。

^  与 | 有一点不一样的地方,即ture^ture为false。

&& 与&的区别:&&如果第一个运算条件为false,后面不再做运算,&不管第一个条件是ture是false,都需要对条件进行运算完毕。


11)位运算符

<<左移      就是乘以2的移动位数幂

>>右移      就是除以2的移动位数幂

>>>与>>的区别:>>右移后最高位补什么由原始数值的最高位是什么就补什么,而>>>最高位补的都是0.

&    |    ^     ~(取反)   ^异或同一个数两次,还是原来是那个数。4^8^8=4

12)三元运算符  

(条件表达式)?表达式1:表达式2

int x=2,int y=3;

z=(x<y)?x:y

三元运算符一定会有结果。


13)

判断语句

if表达式


格式1

int x=4;

if(x<9)

{

System out println ();

}

if里面条件表达式如果只有一个,大括号可以不写。

格式2

int x=2;

if(x<7)

{

int s=x

}

else

{

int g=x

}

格式3

int x=1;

if (x=4)

{

int t=2;

}

else if(x=5)

{

System.out.println("haha")

}

else

{

}


选择语句

switch


switch(题目)

case 答案1: 

执行语句;

break;

case 答案2:

执行语句;

break ;

……

default:

执行语句;

break;

if和switch有点像,需要注意的是,如果答案比较多,用switch效率会相对较低。


循环语句

while

格式1

while(条件表达式)

执行语句;

格式2

do

{

执行语句;

}

while

循环条件

while 和do while的区别,while是先判断循环条件再执行循环体(执行语句);do while 先执行一次循环体,再判断循环条件。

格式3

for(初始化表达式;循环体表达式;循环后的表达式)

执行语句;

while和for的区别:for语句执行完变量会在内存消失。while则不会消失。


小知识点:

无限循环的最简单表达形式:

for(;;){}

while(ture){}



14)累加思想

通过一个变量来记录一个循环后的结果(递增或者递减)。

比如:计算1~100的和

int y = 0;

for (x = 1;x<=100;x++)

{

y+=x;

}

System.out.println(y);

15)计数器思想  一个变量,一个

比如:找出1~100中7的倍数的数

int y = 0;

for (x = 1;x<=100;x++)

{

if (x % 7 == 0 )

y++;

}

System.out.println(y);


16)嵌套循环

for( ; ; )

{

for ( ; ; )

{

}

}


规律:初下中上。


17)

其他流程控制语句

break; 作用的语句有两个,一是循环语句for,一个是选择语句switch 

continue; 只能作用于循环语句,中断本次循环,继续下次循环。

注意点:break和continue单独存在时,下面如果有语句都不会被执行到。



18)函数

函数格式:

修饰符   返回值类型  函数名(参数类型 形式参数1,参数类型 形式参数2,……)

执行语句;

return 返回值;


19)如何定义一个函数

一、函数是一个功能,那么就要明确函数的功能是什么,即结果是什么?(返回值)

二、是否需要未知参数参与运算。(参数列数)


20)函数的特性:重载

重载:在同一个类中,允许存在一个及以上同名的函数,只要他们的参数类型或者个数不一样即可。

也就是说重载不关返回值类型的事,只看参数列表。


21)数组

数组的特性:数组里面的元素都有编号。

格式1

元素类型 [ ] 数组名称 = new 元素类型 [元素个数或者叫数组长度 ]   int [ ] x = new int [ 3 ] ; 举例中的 x 不是int类型 ,而是数组类型。数组类型是数据类型中的第二大派(基本数据类型、引用数据类型)引用数据类型中的的第三个(类、接口、数组类型)  之所以是属于引用数据类型是因为,x 是在栈内存中,而int [ ] 是在堆内存中,x引用了堆内存中的数组int [ ] 的地址。

格式2

元素类型 [ ] 数组名称 = new 元素类型 [ ] {  元素 };  int [ ] x = new int [  ] { 3,5,6,76,7}; 

格式3

int [ ] x =  { 3,5,6,76,7}; 

22)内存结构

栈内存  用于存放局部变量,当数据使用完,所占空间会自动释放。   

堆内存   存放  数组和对象,即通过new建立的实例都存放在堆内存中。都有地址、有初始化值,不被使用的实体会在不确定的时间内被垃圾回收器回收。

方法区

本地方法区

寄存器

23)数组的操作

一、获取数组中的元素

一般使用遍历(for循环)。

小知识点:获取一个数组的长度或者说数组中的个数。用 数组名.length


class ArrTest

{

public static void arr (int [ ] arr)

{

System.out.print("[");

for ( int x=0,x<arr.length,x++)

{

if ( x!=arr.length-1)

System.out.print ( arr.[x] + ", ");

else

System.out.println ( arr.[x] + " ] " )

}

}

public static void main ( String [] args )

{

int [ ] x = new int [ ] { 2,3,4,6,55,7,0 ];

arr (x);

}

}


二、获取数组中的最值 

class GetMaxMinTest

{

public static int getMax ( int [ ] arr )

{

int max = 0;

for ( x = 1 , x<arr.length,x++ )

{

if ( arr.[ max ] < arr.[ x ] )

max = x;

return arr.[ max ];

}

}
}


三、对数组进行排序

选择排序

public static void selectSort ( int [ ] arr )

{

for ( x = 0 ,x<arr.length-1,x++ )

{

for ( y = x+1,y<arr.length,y++ )

{

if (arr[ x ] > arr[ y ])

{

arr [ x ] = arr [ x ] ^ arr [ y ];

arr [ y ] = arr [ x ] ^ arr [ y ];

arr [ x ] = arr [ x ] ^ arr [ y ];

}

}

}

}

冒泡排序

public static void bubbleSort ( int [ ] arr )

{

for (int x = 0,x<arr.length-1,x++ )

{

for ( int y = 0,y<arr.length-1-x,y++ )

{

if ( arr [ y ] > arr { y+1 ]

{

arr [ y ] = arr [ y ] ^ arr [ y+1 ];

arr [ y+1 ] = arr [ y ] ^ arr [ y+1 ];

arr [ y ] = arr [ y ] ^ arr [ y+1 ];

}

}

}

}

java中有排序的功能,直接在主函数引用即可  Arrays.sort( arr )


四、查找

一般查找:

public static int getIndex ( int  [ ] arr,int key )

for ( x=0, x<arr.length,x++)

{

if (arr [ x ] = key )

return  x;

}

return -1;

}

折半查找:必须是数组在有序的情况下才能使用。

方法一:

public static int  halfSearch (int [ ] arr,int key )

{

int min = 0,max = arr.length-1 ,mid;

while ( arr [ mid ] != key )

{

mid = ( mid + max ) /2;

if ( key > arr.[ mid ] )

min = mid +1;

else

max = mid -1;

if ( min > max )

return -1;

}

return mid;

}

方法二:


public static int getIndex ( int [ ] arr,int key )

{

int min = 0,max =arr.length-1,mid ;

while ( min <=max )

{

mid = ( min +max )/2;

if ( arr[ mid < key )

min = mid +1;

else if ( arr [ mid ] > key )

max = mid -1;

else 

return mid;

}

return -1;

}


24)二级数组

格式一

int [ ] [ ] x = new int [ 3] [4 ] ; 3代表这个数组有3个一维数组,而每一个一维数组有4个元素。即3代表的是二维数组的长度,4代表的是一维数组的长度。

格式二

int [ ] [ ] x = new int [3] [ ] ;代表有3个二维数组,但每一个一维数组指向为null。

格式三

int [ ] [ ] x = { {2,3,4} , { 3,45,2} , {35,64,6};代表二维数组的长度为3,一维数组都有元素。