黑马程序员技术交流社区

标题: 【石家庄校区】分享基础知识点 [打印本页]

作者: 中国好邻居    时间: 2017-11-29 21:25
标题: 【石家庄校区】分享基础知识点
本帖最后由 小石姐姐 于 2017-12-7 14:59 编辑

1   JRE:JVM+类库   JVM虚拟机
2    JDK:JRE+JAVA的开发工具
3   开发工具:编译工具(javac.exe)  打包工具(jar.exe)等
4   java 程序运行流程
  .Java文件源代码文件……通过编译器编译……生成  .class字节码文件…….通过解释器解释执行
   5    System.out.println("HelloWorld")       输出语句双引号内是字符串,
  6    控制台写过的命令可用上下箭头重复执行
7*一般不是{}结尾的加  分号;
8关键字全部为小写
9   整数默认'int'类型   浮点数默认'double'
10

11 给 包,类,方法,变量等起名字
           命名原则:见名知意
a包  最好是域名倒过来,要求所有的字母小写
b类或者接口           如果是一个单词首字母大写         如果是多个单词每个单词首字母大写(驼峰标识)
c方法或者变量
         如果是一个单词全部小写
         如果是多个单词,从第二个单词首字母大写
d常量
         如果是一个单词,所有字母大写
         如果是多个单词,所有的单词大写,用下划线区分每个单词
12注意:
                整数默认是int类型,定义long类型的数据时,要在数据后面加L。
                浮点数默认是double类型,定义float类型的数据时,要在数据后面加F。
13变量定义的注意事项
•        变量未赋值,不能直接使用
–        引出变量的第二种使用格式
•        变量只在它所属的范围内有效。
–        变量在哪对大括号内,变量就属于哪对大括号
•        一行上可以定义多个变量,但是不建议

14隐式转换        
•        byte,short,char -- int -- long -- float -- double
15强制转换的格式
•        byte  b = (byte)(a + b);
•        强制转换:目标类型 变量名 = (目标类型) (被转换的数据);
•                不建议强制转换,因为会有精度的损失。
16   而计算机最小的存储单元叫“字节(byte)”,通常用大写字母B表示
17   赋值只在大括号内有效
18  字符串的数据类型是 String      数组的数据类型    元素类型+[]     int[]
      Public static  int[] getIntArr(){
           int[] arr={1,2,1,2,1,2};
             return arr;
}

19无论是内存还是硬盘,计算机存储设备的最小信息单元“位(bit)”,我们又称之为“比特位”,通常用小写的字母b表示。
而计算机最小的存储单元叫“字节(byte)”,通常用大写字母B表示,字节是由连续的8个位组成。



•        20   font: [fɒnt], 字体    basic: [ˈbeɪsɪk], 基本的         text: [tekst], 文本      edit: [ˈedɪt], 编辑
•               format: [ˈfɔ:mæt], 格式化                 flag: [flæg], 标志
        
                String next(): [nekst], 获取键盘录入的字符串, 当获取到有效字符串后结束
                String nextLine(): [nekst][laɪn], 获取键盘录入的字符串, 以换行符结束
                 int nextInt(): [nekst][ɪnt], 获取键盘录入的整型数值

21     字符串进行运算,实际为用字符对应的数值运算,
(  ‘a’       97)        (‘A’        65)        (‘0’         48)
  而字符串进行运算是  字符串的拼接,  尤其输出数组时用
字符串中  \为转义符 ,"\....."中斜杆会把和后面的组合起来,      所以字符串中,要用两个\表示一个,   即\\来表示\
int a=10;   
int   b=20;
syso(“hello”+a+b) ;      ……………输出hello1020    从左到右 字符串+数值=字符串        
syso(a+b+ “hello”);     ………………输出30hello
22      a++  表示先运算,后自增1
           ++a 则相反,表示县自增1,再参与运算

23    关系运算符包含以下内容:
==,!=,>,>=,<,<=
关系运算符的结果都是boolean型,也就是要么是true,要么是false。
24       'A' ==65  'a'==97   ' 0 '== 48

25       :&&和&的区别?
        a:最终结果一样。
        b:&&具有短路效果。左边是false,右边不执行。
        &是无论左边是false还是true,右边都会执行
     同理  |和||;

26       %  取余时  X%Y正负只和X有关
27    键盘录入:
          A:导包   import  java.util.Scanner;
        B:创建对象    Scanner sc=new Scanner(System.in);
          C:接收数据       数据类型   变量名=sc.nextInt();              (sc即对象名)
                                        int x = sc.nextInt();
  创建随机数:
A:       import java.util.Random;
           Random r=new Random();
int x=r.nextInt(10);   ………….[0,10)  不包括10

创建数组
数据类型[] 数组名 = new 数据类型[数组长度];
int[] arr = new int[3];

28 连续输出多个变量时用    加号    接引     双引号空格   即可
System.out.println(Java  +"   "+SQL+"   "+Web);  

30     tring next() ;             获取键盘录入的字符串, 当获取到有效字符串后结束
         String nextLine();        获取键盘录入的字符串, 以换行符结束
          int nextInt() ;            获取键盘录入的整型数值
String c = (b == 0)?"偶数":"奇数";
29三元运算符:格式
        (关系表达式)?表达式1:表达式2;
        如果条件为true,运算后的结果是表达式1;
        如果条件为false,运算后的结果是表达式2;
比较两个数的大小

int a = 10;
                int b = 20;

                int c = (a > b) ? a : b;……………………………..c=20

比较两个数是否相同

int a = 10;
                int b = 20;

                boolean flag = (a == b) ? true : false;

获取三个数最大值
// 定义三个int类型的变量
                int a = 10;
                int b = 30;
                int c = 20;
                // 先比较两个整数的大值
                int temp = ((a > b) ? a : b);
                int max = ((temp > c) ? temp : c);
                System.out.println("max:" + max);
30 System.out.println换行  
      System.out.print  不换行

31  字符串 "qwe   wqwe   df "

32 导包快捷键  ctrl+shift+O
   
33     *  for  (初始化语句;     判断条件语句;   控制条件语句)    {循环语句 ;   }          判断条件决定,for是否执行
        *  while(判断条件语句) {         循环体语句;   }
*    初始化语句;   while(判断条件语句) {         循环体语句;         控制条件语句;}
1        实现多次猜cun数据.
34  While(ture){循环语句;
while (true){
                System.out.println("请输入你猜的数字");
                int i =sc.nextInt();
               
                if (i>number){
                        System.out.println("大了");
                }else if(i<number){
                        System.out.println("小了");
                        
                }else{
                        System.out.println("猜中了");
                        break;
                }                        
        }
先列错误的情况,最后else正确的  break结束; 键入数据要在while内,但在if之外


35  sum=sum+1    累加
for(int x=1; x<=5; x++) {
sum += x;
}

36   计数器    int count=0;要定义在主方法中
    在if    后边,满足if   条件后,才执行一次
              for (int a=100;a<=999;a++){
                int g=a*a*a;
                int s=a/10%10;
                int b=a/100%10;                        
                if(g*g*g+s*s*s+b*b*b==a) {
                        System.out.println(a);
                count++;
                }        


37    do …while   循环格式
      do{     循环体语句;}

38      for循环实现1-5之间数据求和
8   public static void main(String[] args) {
                //定义求和变量,初始化值是0
                int sum = 0;
               
                //获取1-5之间的数据,用for循环实现
                for(int x=1; x<=5; x++) {
                        //把每一次获取到的数据,累加起来就可以了
                        //sum = sum + x;
                        /*
                         * 第一次:sum = 0 + 1 = 1
                         * 第二次:sum = 1 + 2 = 3
                         * 第三次:sum = 3 + 3 = 6
                         * 第四次:sum = 6 + 4 = 10
                         * 第五次:sum = 10 + 5 = 15
                         */
                        sum += x;
                }
               
//输出求和结果
                System.out.println("sum:"+sum);
        }
}

39 if语句获取两数较大值

int max;
                if(a>b){
                        max = a;
                }else {
                        max = b;
                }
                //可能做其他的操作                //max += 100;
                System.out.println("较大的值是:"+max);

40 if语句实现判断学生等级
0-100        优秀
* 80-90        好
* 70-80        良
* 60-70        及格
* 60以下        不及格
1 键入成绩               2   if语句分情况   (注意错误数据)
41 switch语句的格式
A .   表达式的取值:byte,short,int,char
B.    break表示中断,结束的意思,会结束 switch语句
C.       default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。
switch语句实现根据数字输出对应星期
switch(表达式) {                           (switch(weekday)
*                 case 值1:
*                         语句体1;
*                         break;
*                 case 值2:
*                         语句体2;
*                         break;
*                 default:     break;
•        for循环语句格式:
•        for(初始化语句;判断条件语句;控制条件语句) {
•                 循环体语句;
    }
•        输出10次HelloWorld
•        for(int x=1; x<=10; x++) {
•        
•                                System.out.println("HelloWorld");

•        for循环实现获取指定范围数据
•          for(int x=1; x<=5; x++) {
•                    System.out.println(x);
•                        }

•        for循环实现1-5之间数据求和
A:定义求和变量,初始化值是0
B:获取1-5之间的数据,用for循环实现
C:把每一次获取到的数据,累加起来就可以了
D:输出求和变量即可      int sum   定义在for之外,  sum求和则是等for循环结束后在计算,
int sum = 0;

for(int x=1; x<=5; x++) {

sum += x;
}
System.out.println("sum:"+sum);

•        for循环打印水仙花数
所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身
        for(int x=100; x<1000; x++)       循环获取所有三位数100 ~999
          //获取个位,十位,百位
                        int ge = x%10;
                        int shi = x/10%10;
                        int bai = x/10/10%10;

•          while循环语句格式
while(判断条件语句) {
                 循环体语句;
              控制条件语句;
}  
int x=1;
                while(x<=10) {
                        System.out.println("HellloWorld");
                        x++;
                }

•        do…while循环语句
初始化语句;
   do {
         循环体语句;
         控制条件语句;
} while((判断条件语句);
public static void main(String[] args) {
                输出10次 HelloWorld
               
                for(int x=1; x<=10; x++) {
                        System.out.println("HelloWorld");
                }
               
               
                //do...while改写
                int x=1;
                do {
                   System.out.println("HelloWorld");
                        x++;
                }while(x<=10);
        }
使用区别:控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继续使用,如果你想继续使用,就用while,否则推荐使用for。

•        Break的使用
•          Break  跳出当前(单层)循环
•        for(int x=1; x<=10; x++) {
•                        if(x == 3) {
•                                break;
•                        }
•                        System.out.println("HelloWorld");
•                }
•        此时只能打印两个HelloWorld

•        continue  退出本次循环   替换break则回打印9次



2 数据类型[]  数组名;    int[] arr; 定义了一个int类型的数组.数组名是arr
  数据类型  数组名[];~~~~~~~~~~~~~不推荐

3 数组长度就是数组中元素个数
•        4 动态初始化
  数据类型[]数组名=new 数据类型[数组长度]
•        静态初始化
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
简化格式:
数据类型[] 数组名 = {元素1,元素2,...};
举例:
int[] arr = new int[]{1,2,3};
简化后:
int[] arr = {1,2,3};

•        数组中索引
   索引是元素在数组中的序号,从0开始
int[] arr=new int[3]
最大索引2           (0,1,2)
数组名arr存的是地址值
定义在方法中的变量都是局部变量.mian中的都是

•        两个常见小问题:
A:java.lang.ArrayIndexOutOfBoundsException
数组越界异常
产生的原因:就是你访问了不存在的索引元素。
B:java.lang.NullPointerException
空指针异常
产生的原因:数组已经不指向堆内存的数据了,你还使用数组名去访问元素。









int []arr={11,33,77,22};
        int min=arr[0];
        for(int i=0;i<arr.length;i++){
               
                if(min>arr){
                min=arr;
                }
}
for循环中进行比较,得出数值,最后输出
•        System.out.println(“”);换行



int[][] arr=new int[3][];
不给一维数组是正确的,但必须二维数组
•        一维数组的遍历

for (int i=0;i<arr.length;i++){
System.out.print(arr);
}


•        二维数组的遍历

        for (int i=0;i<arr.length;i++){
                for (int j=0;j<arr.length;j++){
        System.out.print(arr[j]+"    ");
}}
•        计数器,求和等等,要在循环之外定义,如果在循环内,那么每次循环又会被重新定义而出错
public class Test {
public static void main(String[] args) {
        int []arr=new int[1000];
        
        int count=0;
        int sum=0;
        for(int i=0;i<=999;i++){
                 arr =i;               
             int ge=arr%10;
             int shi=arr/10%10;
             int bai=arr/100%10;
                 int x=ge*ge*ge+bai*bai*bai+shi*shi*shi;
                          
                 if(x==arr &arr>=100){
                   System.out.println(arr);
                   count++; sum+=arr;
                 }                  
         }



•        随机数给所有数组元素赋值


将数字1-10保存到一个长度为10的一维数组中
定义一个新数组,长度为3,取出原来数组中随机三个元素(不考虑是否重复)
给新数组的元素赋值
求新数组所有元素的和


public static void main(String[] args) {
        int []arr=new int[10];
        int []arr2=new int[3];
        for(int i=0;i<10;i++){
               arr =i+1;
        }
             Random r=new Random();
                                    
             for (int m=0;m<3;m++){        
                    
int number =r.nextInt(10);
                   arr2 [m]=arr[number];
                  
System.out.println("新数组元素为"+arr2[m]);               
             }
        
}



产生一个0~9之间的随机数;  两步
Random r=new Random();
  int x=r.nextInt(10);

二维数组的遍历

// 方式1: 先for循环遍历获取一维数组, 然后for循环遍历一维数组
int[][] arr = {{1,2,3}, {1,2}};
for (int i = 0; i < arr.length; i++) {
    int[] arr1 = arr;
    for (int j = 0; j < arr1.length; j++) {
        int n = arr1[j];
    }
}

// 方式2: 先for循环得到二维数组索引i, 然后for循环得到一维数组索引j, 使用二维数组访问元素方式获取元素
int[][] arr = {{1,2,3}, {1,2}};
for (int i = 0; i < arr.length; i++) {
    for (int j = 0; j < arr.length; j++) {
        int n = arr[j];
    }
}

关于return的作用

int count=0;
        for(int i=0;i<arr.length;i++){
               
if(arr==3){
               
count++;
             return i;            
                }
         }
注意和return i; 的区别,执行return就是结束方法,count++就不会执行
count++;


public static void compare(int a,int b)
void   表示没有返回值
只能单独调用   compare(x,y);      return;   用来结束

方法重载overload: 在同一个类中,出现方法名相同的情况 *
* 特点:   方法名相同,参数列表不同.与  返回值类型  无关,和方法体无关
*     参数列表不同是指:
*              参数个数不同;
*              参数对应的数据类型不同;(包括顺序,注意对应两个字 )
*
   public static boolean compare(int a,int b){}
输入double
Int可以自动转化成double类型

方法中已经完成了  输出   所以main函数中就    不需要在次输出

方法名第二个单词开始首字母大写
        public static int getMax(int a, int b, int c) {

定义方法时   返回数组
public static int[] result(int a,int b){
                int sum=a+b;
                int dec=a-b;
                int cheng=a*b;
                int chu=a/b;
           
        int []arr={sum,dec,cheng,chu};
         return arr;
方法 定义格式:
*         修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) {
*                 方法体;
*                 return 返回值;             public static
*         }
赋值调用,推荐方式

Void
没有明确返回值的函数调用:
其实就是void类型方法的调用
只能单独调用

打印1到n之间的数据
利用数组遍历
两个明确:
* 返回值类型:void
* 参数列表:int n

把所有的水仙花数打印在控制台
        public static void printFlower() {
                for(int x=100; x<1000; x++) {
                        int ge = x%10;
                        int shi = x/10%10;
                        int bai = x/10/10%10;
                        
                        if((ge*ge*ge+shi*shi*shi+bai*bai*bai) == x){
                                System.out.println(x);
                        }
                }
        }
        
        public static void main(String[] args) {
                printFlower();
        }

遍历数组
public static void main(String[] args) {
               
                int[] arr = { 11, 22, 33, 44, 55 };

                // 遍历               
                //[元素1, 元素2, 元素3, ...]
                printArray(arr);
        }
        
        public static void printArray(int[] arr) {
                System.out.print("[");
                for(int x=0; x<arr.length; x++){
                        if(x==arr.length-1){
                                System.out.println(arr[x]+"]");
                        }else {
                                System.out.print(arr[x]+", ");
                        }
                }
        }

        
        
不死神兔问题
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,
*                 假如兔子都不死,问第二十个月的兔子对数为多少?

1  1    2  3    5  …..
public static void main(String[] args) {
                //定义数组
                int[] arr = new int[20];
               
                //初始化第一个月和第二个月的兔子对数c
                arr[0] = 1;
                arr[1] = 1;
               
                for(int x=2; x<arr.length; x++) {
                        arr[x] = arr[x-2] + arr[x-1];
                }
               
                System.out.println("第二十个月的时候的兔子对数是:"+arr[19]);
        }

数组反转问题
public class Test7 {
        public static void main(String[] args) {
                // 定义一个长度为5的数组
                int[] arr = new int[5];

                // 通过键盘录入数据给数组中的元素赋值
                Scanner sc = new Scanner(System.in);
                for (int x = 0; x < arr.length; x++) {
                        System.out.println("请给出第" + (x + 1) + "个元素");
                        arr[x] = sc.nextInt();
                }
               
                System.out.println("反转前的数组元素:");
                printArray(arr);

                // 定义方法将arr数组中的内容反转
                reverse(arr);
               
                System.out.println("反转后的数组元素:");
                //定义方法遍历数组
                printArray(arr);
        }
        
        //遍历数组
        public static void printArray(int[] arr) {
                System.out.print("[");
                for(int x=0;x<arr.length; x++){
                        if(x == arr.length-1) {
                                System.out.println(arr[x]+"]");
                        }else {
                                System.out.print(arr[x]+", ");
                        }
                }
        }
        

        /*
         * 两个明确: 返回值类型:void 参数列表:int[] arr
         */
        public static void reverse(int[] arr) {
                for(int startIndex=0,endIndex=arr.length-1;startIndex<=endIndex;startIndex++,endIndex--) {
                        int temp = arr[startIndex];
                        arr[startIndex] = arr[endIndex];
                        arr[endIndex] = temp;
                }
        }









欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2