JAVA基础基本代码练习1



基本代码练习

DAY 01

package HELLOWORD案例;

 

public class HelloWorld {

   public static void main(String [] args){

   System.out.println("HElloworld");

   

   }

}

 

Day 02

1、关键字

package day_02;

 

public class KeyWordDemo {

/*

 * 关键字:  被JAVA 语言赋予特定含义的单词

 * 特点 : 组成关键字单词的字母全部小写

 * 注意:  

 *     A:goto 与 const 是保留字

 *     B: 类似NOTEpad++这样的高级记事本针对关键字有特殊的颜色标记

 */

} 

 

 

2、标识符

package day_02;

 

/*

 * 标识符:就是给类,接口,方法,变量等起名字

 * 组成规则:

 *     A、英文字母大小写

 *     B、数字字符

 *     C、&和_

 * 注意事项:

 *     A:不能以数字开头

 *     B:不能是JAVA中的关键字

 *     C:JAVA语言严格区分大小写

 * 常见的命名规则:

 *     举例:我要定义一个学生类

 *        class Student{}

 *        class S{}

 *      包:其实就是文件夹,用于把相同的类名进行区分

 *         全部小写

 *         单级: zhanghe

 *         多级: cn.itcast

 *      类或者接口:

 *         一个单词:单词的首字母必须大写

 *         多个单词:每个单词的首字母必须大写

 *      方法或者变量:

 *         一个单词:单词的首字母小写

 *         多个单词:从第二个单词开始,每个单词的首字母大写

 *      常量:

 *        一个单词:全部大写

 *        多个单词:每个单词都要大写,用_隔开

 */

public class MakeNameDemo {

         public static void main(String [] args){

          //正确做法

          int X = 100;

          //不能以数字开头

          //int 1y =100;

          int y1=100;

          //不能是JAVA中的关键字

          //int public = 100;

          int Public = 100;

         }

}

  1. 注释

       注释的作用:

            A:解释说明程序,提高程序的阅读性

            B:可以帮助我们调试程序。

                  后面我们会讲解更高级的调试(Debug

           多行注释 /* */

           单行注释 //

           文档注释:被javadoc 工具解析生成一个说明书

  2. 常量

        package day_02;

    /*

     * 常量:

     *    在程序执行的过程中,其值不发生改变

     * 分类:

     *    A:字面值常量

     *    B:自定义常量

     *    

     * 字面值常量:

     *   A:字符串常量   用双引号括起来的内容  “HELLO”

     *   B:整数常量    所有整数

     *         举例:100、200

     *   C:小数常量     所有小数

     *         举例:10.23   110.11

     *   D:字符常量      用单引号括起来的内容

     *         举例 : 'a' 'B' '0'

     *   E:布尔常量

     *          只有 TRUE  FALSE

     *   F:空常量

     *         举例:NULL

     */

     

    public class ConstantDemo {

             public static void main(String [] args){

             //字符串常量的输出

              System.out.println("hello");

             //整数常量的输出

              System.out.println(100);

              //小数常量的输出

              System.out.println(100.01);

              //字符常量

              System.out.println('a');

              //这个是有问题的

              //System.out.println('ab');

              //布尔常量

              System.out.println(true);

             }

    }

    5、进制

    package day_02;

    /*

      不同进制的数据表现:

          二进制:由0,1组成。以0b开头 //MyEclipse中不用加0b  直接0100

          八进制 0——7组成    以 0 开头

       十进制0——9组成   默认整数是十进制

       十六进制 0——f   组成。以0X开头

     */

     

    public class JinZhiDemo {

             public static void main(String [] args){

            

              System.out.println(0x100);

            

              System.out.println(0100);

              

              System.out.println(00100);

              

             }

    }

     

     

     

     

    6、原码反码补码

     

  1. 数据类型

       /*

     * 数据类型: java是一种强类型的语言,针对每一种数据都定义了明确的数据类型

     * 数据类型的分类:

     *      A:基本数据类型

     *         a、整数                                 占用字节数

     *             byte          1

     *             short         2

     *             int           4

     *             long          8

     *         b、浮点数

     *             float         4

     *             double        8

     *         c、字符

     *              char         2

     *         d、布尔

     *              boolean      1

     *      注意:

     *          整数默认是  INT

     *          浮点数默认是:double

     *          长整型后缀用L或者l 标记

     *          单精度浮点数用 F或者f 标记

     *      B:引用数据类型(类,接口,数值)

     * 使用变量的时候需要注意的问题:

     *      A:作用域

     *         变量定义在哪个大括号内就在哪个大括号内有效

     *         并且,在同一个大括号内不能同时定义同名的变量

     *      B:初始化

     *         没有初始化值的变量可以被定义但是不能使用

     *         你只要在使用前给值就行

     *         定义变量的格式:

     *            a: 数据类型  变量名   = 初始化值;

     *            b: 数据类型 变量名;

     *               变量名 = 初始值;

     *       C:在一行上可以定义多个变量  中间用;隔开     但是不建议

     *       

     *  数据类型之间的转换 :

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

     *     前三个之间不能转换   boolean 不转换

     *  强制数据类型转换:

     *     从大的到小得数据类型

     *     格式:

     *       目标数据类型  变量名 = (目标数据类型)(被转换的数据)

     *     注意:

     *       隐含了精度损失的问题

     *   面试题:

     *      byte b1=3,b2=4,b;

     *      b=b1+b2;

     *      b=3+4;

     *      哪句编译失败?为什么?

     *      b=b1+b2;有问题  

     *      因为变量相加,会首先看类型问题,最终把结果赋值的也会考虑类型问题

     *      常量相加,首先做加法,然后看结果是否在赋值的数据类型的范围内,如果不是就报错。

     */

    public class DataTypeDemo {

          public static void main(String[] args) {

    //定义变量的格式

           //数据类型    变量名 = 初始值;

           byte x=3;

           int b = 4;

           System.out.println(x+b);

           int c = x+b;

           System.out.println(c);

           byte b1=3,b2=4,d;

           //d=b1+b2;这个是类型提升,所以有问题

           d=3+4;

           byte aa = (byte)130;

           System.out.println(aa);

    }

    }

     

     

    /*

    byte b = 130;有没有问题?如果我想让赋值正确,可以怎么做?结果是多少呢?

    练习:byte b = (byte)300;

    */

    class DataTypeDemo7 {

    public static void main(String[] args) {

    //因为byte的范围是:-128到127。

    //而130不在此范围内,所以报错。

    //byte b = 130;

    //我们可以使用强制类型转换

    byte b = (byte) 130;

    //结果是多少呢?

    System.out.println(b);

    }

    }

    /*

    分析过程:

    我们要想知道结果是什么,就应该知道是如何进行计算的。

    而我们又知道计算机中数据的运算都是补码进行的。

    而要得到补码,首先要计算出数据的二进制。

    A:获取130这个数据的二进制。

    00000000 00000000 00000000 10000010

    这是130的原码,也是反码,还是补码。

    B:做截取操作,截成byte类型的了。

    10000010

    这个结果是补码。

    C:已知补码求原码。

    符号位 数值位

    补码: 1 0000010

    反码: 1 0000001

    原码: 1 1111110

    */

     

    8、Ascall 码

              'a' 97

    'A' 65

    '0' 48

为了便于查询,以下列出ASCII码表:第128255号为扩展字符(不常用)

 

ASCII

键盘

ASCII

键盘

ASCII

键盘

ASCII

键盘

27

ESC

32

SPACE

33

!

34

"

35

#

36

$

37

%

38

&

39

'

40

(

41

)

42

*

43

+

44

'

45

-

46

.

47

/

48

0

49

1

50

2

51

3

52

4

53

5

54

6

55

7

56

8

57

9

58

:

59

;

60

<

61

=

62

>

63

?

64

@

65

A

66

B

67

C

68

D

69

E

70

F

71

G

72

H

73

I

74

J

75

K

76

L

77

M

78

N

79

O

80

P

81

Q

82

R

83

S

84

T

85

U

86

V

87

W

88

X

89

Y

90

Z

91

[

92

\

93

]

94

^

95

_

96

`

97

a

98

b

99

c

100

d

101

e

102

f

103

g

104

h

105

i

106

j

107

k

108

l

109

m

110

n

111

o

112

p

113

q

114

r

115

s

116

t

117

u

118

v

119

w

120

x

121

y

122

z

123

{

124

|

125

}

126

~

Day 03

 

  1运算符:

就是对常量和变量进行操作的符号。

分类:算术运算符,赋值运算符,比较运算符,逻辑运算符,位运算符,三目运算符

 

算术运算符:

+,-,*,/,%,++,--

++,--运算符的使用:

单独使用:

放在操作数的前面和后面效果一样。(这种用法是我们比较常见的)

参与运算使用:

放在操作数的前面,先自增或者自减,然后再参与运算。

放在操作数的后面,先参与运算,再自增或者自减。

作用:就是对变量进行自增1或者自减1。

+的用法:

A:加法

B:正号

C:字符串连接符

2、赋值运算符:

基本的赋值运算符:=

=右边的数据赋值给左边。

扩展的赋值运算符:+=,-=,*=,/=,%=

+= 把左边和右边做加法,然后赋值给左边

面试题:

short s=1;s = s+1;

short s=1;s+=1;

上面两个代码有没有问题,如果有,那里有问题。

为什么第二个木有问题呢?

扩展的赋值运算符其实隐含了一个强制类型转换

s += 1;

不是等价于 s = s + 1;

而是等价于 s = (s的数据类型)(s + 1);

3、比较运算符:

==,!=,>,>=,<,<=

特点:

无论你的操作是简单还是复杂,结果是boolean类型。

注意事项:

"=="不能写成"="。

4、逻辑运算符:

&,|,^,!

&&,||

特点:

逻辑运算符一般用于连接boolean类型的表达式或者值。

表达式:就是用运算符把常量或者变量连接起来的符合java语法的式子。

算术表达式:a + b

比较表达式:a == b

结论:

&逻辑与:有false则false。

|逻辑或:有true则true。

^逻辑异或:相同为false,不同为true。

举例:情侣关系。男男,男女,女男,女女

!逻辑非:非false则true,非true则false。

特点:偶数个不改变本身。

&&和&的区别? 同理||和|的区别?

A:最终结果一样。

B:&&具有短路效果。左边是false,右边不执行。

开发中常用的逻辑运算符:

&&,||,!

5、位运算符:

&,|,^,~

<<,>>,>>>

注意:

要做位运算,首先要把数据转换为二进制。

class OperatorDemo {

public static void main(String[] args) {

//&,|,^,~

int a = 3;

int b = 4;

System.out.println(3 & 4);

System.out.println(3 | 4);

System.out.println(3 ^ 4);

System.out.println(~3);

}

}

/*

分析:因为是位运算,所以我们必须先把数据换算成二进制。

3的二进制:11

00000000 00000000 00000000 00000011

4的二进制:100

00000000 00000000 00000000 00000100

&位与运算:有0则0。

00000000 00000000 00000000 00000011

   &00000000 00000000 00000000 00000100

-----------------------------------

00000000 00000000 00000000 00000000

结果是:0

|位或运算:有1则1

00000000 00000000 00000000 00000011

   |00000000 00000000 00000000 00000100

-----------------------------------

00000000 00000000 00000000 00000111

结果是:7

^位异或运算:相同则0,不同则1

00000000 00000000 00000000 00000011

   &00000000 00000000 00000000 00000100

-----------------------------------

00000000 00000000 00000000 00000111

结果是:7

~按位取反运算符:0变1,1变0

   ^的特点:一个数据对另一个数据位异或两次,该数本身不变

00000000 00000000 00000000 00000011

  ~11111111 11111111 11111111 11111100 (补码)

   

   补码:11111111 11111111 11111111 11111100

   反码:11111111 11111111 11111111 11111101

 

<<:左移 左边最高位丢弃,右边补齐0

>>:右移 最高位是0,左边补齐0;最高为是1,左边补齐1

>>>:无符号右移 无论最高位是0还是1,左边补齐0

面试题:

请用最有效率的方式写出计算2乘以8的结果?

2 * 8

2 << 3

面试题:

请自己实现两个整数变量的交换

注意:以后讲课的过程中,我没有明确指定数据的类型,默认int类型。

*/

class OperatorTest {

public static void main(String[] args) {

int a = 10;

int b = 20;

System.out.println("a:"+a+",b:"+b);

//方式1:使用第三方变量(开发中用的)

/*

int c = a;

a = b;

b = c;

System.out.println("a:"+a+",b:"+b);

System.out.println("------------");

*/

//方式2:用位异或实现(面试用)

//左边:a,b,a

//右边:a ^ b

/*

a = a ^ b;

b = a ^ b; //a ^ b ^ b = a

a = a ^ b; //a ^ b ^ a = b

System.out.println("a:"+a+",b:"+b);

*/

//方式3:用变量相加的做法

/*

a = a + b; //a=30

b = a - b; //b=10

a = a - b; //a=20

System.out.println("a:"+a+",b:"+b);

*/

//方式4:一句话搞定

b = (a+b) - (a=b); //b=30-20=10,a=20

System.out.println("a:"+a+",b:"+b);

}

}

5、三目运算符:

格式:比较表达式?表达式1:表达式2;

比较表达式:结果是一个boolean类型。

执行流程:

根据比较表达式的计算返回一个true或者false。

如果是true,就把表达式1作为结果。

如果是false,就把表达式2作为结果。

  1. 键盘录入  Scanner  类

  2. 流程控制语句:可以控制程序的执行流程。

    分类:

    顺序结构

    选择结构

    循环结构

    顺序结构:

    从上往下,依次执行。

    选择结构:

    if语句

    switch语句

    if语句:

    格式1

    格式2

    格式3

    if语句的格式1:

    if(比较表达式) {

    语句体;

    }

    执行流程:

    先计算比较表达式的值,看其返回值是true还是false。

    如果是true,就执行语句体;

    如果是false,就不执行语句体;

    if语句格式2:

    if(比较表达式) {

    语句体1;

    }else {

    语句体2;

    }

    执行流程:

    首先计算比较表达式的值,看其返回值是true还是false。

    如果是true,就执行语句体1;

    如果是false,就执行语句体2;

    注意:else后面是没有比较表达式的,只有if后面有。

    if语句的格式3:

    if(比较表达式1) {

    语句体1;

    }else if(比较表达式2) {

    语句体2;

    }else if(比较表达式3) {

    语句体3;

    }

    ...

    else {

    语句体n+1;

    }

    执行流程:

    首先计算比较表达式1看其返回值是true还是false,

    如果是true,就执行语句体1,if语句结束。

    如果是false,接着计算比较表达式2看其返回值是true还是false,

    如果是true,就执行语句体2,if语句结束。

    如果是false,接着计算比较表达式3看其返回值是true还是false,

    ...

    如果都是false,就执行语句体n+1。

    */

    7、switch语句格式:

    switch(表达式) {

    case 值1:

    语句体1;

    break;

    case 值2:

    语句体2;

    break;

    ...

    default:

    语句体n+1;

    break;

    }

    格式的解释:

    switch:表示这是switch选择结构

    表达式:这个地方的取值是有限定的

    byte,short,int,char

    JDK5以后可以是枚举

    JDK7以后可以是字符串

    case:后面跟的是要和表达式进行比较的值

    语句体:要执行的代码

    break:表示中断,结束的意思,可以控制switch语句的结束。

    default:当所有的值都和表达式不匹配的时候,就执行default控制的语句。其实它就相当于if语句的else。

    面试题:

    byte可以作为switch的表达式吗?

    long可以作为switch的表达式吗?

    String可以作为switch的表达式吗?

    switch语句的注意事项:

    A:case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的

    B:default可以省略吗?

    可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。

    特殊情况:

    case就可以把值固定。

    A,B,C,D

    C:break可以省略吗?

    可以省略,但是结果可能不是我们想要的。

    会出现一个现象:case穿透。

    最终我们建议不要省略

    D:default一定要在最后吗?

    不是,可以在任意位置。但是建议在最后。

    E:switch语句的结束条件

    a:遇到break就结束了

    b:执行到末尾就结束了

    8、循环语句:for循环,while循环,do...while循环。

    for循环格式:

    for(初始化语句;判断条件语句;控制条件语句) {

    循环体语句;

    }

    执行流程:

    A:执行初始化语句

    B:执行判断条件语句,看其返回值是true还是false

    如果是true,就继续执行

    如果是false,就结束循环

    C:执行循环体语句;

    D:执行控制条件语句

    E:回到B继续。

    注意事项:

    A:判断条件语句无论简单还是复杂结果是boolean类型。

    B:循环体语句如果是一条语句,大括号可以省略;如果是多条语句,大括号不能省略。建议永远不要省略。

    C:一般来说:有左大括号就没有分号,有分号就没有左大括号

    需求:请在控制台输出10次"HelloWorld"

    9、do...while循环的基本格式:

    do {

    循环体语句;

    }while(判断条件语句);

    扩展格式;

    初始化语句;

    do {

    循环体语句;

    控制条件语句;

    }while(判断条件语句);

    循环语句的区别:

    do...while循环至少执行一次循环体。

    for,while循环必须先判断条件是否成立,然后决定是否执行循环体语句。

    那么,我们一般使用哪种循环呢?

    优先考虑for,其次考虑while,最后考虑do...while

    10、控制跳转语句:

    break:中断

    continue:继续

    return:返回

    break:中断的意思

    使用场景:

    A:switch语句中

    B:循环语句中。

    (循环语句中加入了if判断的情况)

    注意:离开上面的两个场景,无意义。

    如何使用呢?

    A:跳出单层循环

    B:跳出多层循环

    要想实现这个效果,就必须知道一个东西。带标签的语句。

    格式:

    标签名: 语句

    continue:继续

    使用场景:

    循环中。离开此场景无意义。

    测试,找到和break的区别:

    break:跳出单层循环

    continue:跳出一次循环,进入下一次的执行

    练习题:

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

    if(x%3==0) {

    //在此处填写代码

    }

    System.out.println(“Java基础班”);

    }

    我想在控制台输出2次:“Java基础班“

    break;

    我想在控制台输出7次:“Java基础班“

    continue;

    我想在控制台输出13次:“Java基础班“

    System.out.println(“Java基础班”);

    break:跳出单层循环

    continue:跳出一次循环,进入下一次的执行

    return:返回。其实它的作用不是结束循环的,而是结束方法的

    Day 05

  1. 方法

       定义: 完成特定功能的代码块

       注意: 在很多语言里面有函数的定义,而在JAVA中函数被称为方法

       方法格式:

            修饰符   返回值类型 方法名 (参数类型 参数1,参数类型 参数2...){
             方法体语句;

             Return 返回值;

    }

    详细解释:

        修饰符 :目前就 public static  后面具体讲

        返回值类型   就是功能结果的数据类型

        方法名:符合命名规则即可

         参数:

              实际参数: 就是实际参与运算的参数

              形式参数: 就是方法定义上的,用于接受实际参数的

       参数类型: 就是参数的数据类型

       参数名: 就是变量名

       方法体语句:就是完成功能的代码

       Return : 结束方法

       返回值:就是功能的结果,由return 带给调用者

      要想写一个好的方法必须明确两个东西:

          A: 返回值类型

          B: 参数列表

       方法的执行特点:

            不调用,不执行

       如何调用?

           A:单独使用 一般来说没有意义

           B:输出调用,但是不够好

           C:赋值调用   (推荐)

    public class FunctionDemo {

          public static void main(String[] args) {

           int x = 10;

           int y = 20;

           //单独调用

           sum(x,y);

           //输出调用

           System.out.println(sum(x,y));

           //赋值调用

           int resule = sum(x,y);

           System.out.println(resule);

    }

           public static int sum(int a ,int b){

            return a+b;

           }

    }

  2. 方法的重载

    在同一个类中,方法名相同,参数列表不同。与返回值类型无关

    参数列表不同:

          参数个数不同

          参数类型不同

    public class FunctionDemo {

          public static void main(String[] args) {

           int x = 10;

           int y = 20;

           int z = 30;

           int re = sum(x, y);

           System.out.println(sum(y, z));

           int resule = sum(x,y,z);

           System.out.println(resule);

    }

           public static int sum(int a ,int b){

            return a+b;

           }

           public static int sum(int a,int b,int c){

            return a+b+c;

            

           }

    }

  3. 数组

      定义:存储多个同一种数据类型的元素的容器

      定义格式:

            A; int [] a

            B; int  a []

      对数组进行初始化

         A:何为初始化?就是为数组在内存中开辟一定的内存空间,并且为每一个数组元素赋值

    B:有几种方式呢?

        A:动态初始化  只指定长度,由系统赋值

           格式

                 Int [] a = new int[2];

                 Int [] b = new int [3];

                  B=a;

    System.out.println(b);//输出与a 一样的地址值

           System.out.println(a);//输出一个地址名

             

        B:静态初始化  给出初始值,由系统决定长度

            格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,} 简化格式:

    数据类型[] 数组名 = {元素1,元素2,};

     

      数组操作的两个常见问题;

             ArrayIndexOutofBoundsException:数组索引越界异常

                 原因:你访问的的索引不存在

             NullPointException 空指针异常

                 原因: 数组已经不在指向堆内存,而你还在用数组名去访问元素

                

  4. 空间分配

       Java为了提高运行效率,对空间进行了分配主要分为

    栈:主要存放局部变量

    堆:主要存放NEW出来的东西

        每个变量都有默认值

        Byte short int long 0

        Char u/000

        Boolean   false

        引用类型   null

    方法区:面向对象部分分析

    本地方法区:与系统相关

    寄存器: CUP使用

     

     

  5. 二维数组

       二维数组:就是元素为一维数组的一个数组。

    格式1:

    数据类型[][] 数组名 = new 数据类型[m][n];

    m:表示这个二维数组有多少个一维数组。

    n:表示每一个一维数组的元素有多少个。

    注意:

    A:以下格式也可以表示二维数组

    a:数据类型 数组名[][] = new 数据类型[m][n];

    b:数据类型[] 数组名[] = new 数据类型[m][n];

    B:注意下面定义的区别

    int x;

    int y;

    int x,y;

    int[] x;

    int[] y[];

    int[] x,y[];

     

    格式2:

    数据类型[][] 数组名 = new 数据类型[m][];

    m:表示这个二维数组有多少个一维数组。

    列数没有给出,可以动态的给。这一次是一个变化的列数。

     

    格式3:

    基本格式:

    数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2...},{元素1,元素2...},{元素1,元素2...}};

    简化版格式:

    数据类型[][] 数组名 = {{元素1,元素2...},{元素1,元素2...},{元素1,元素2...}};

    举例:

    int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};

    int[][] arr = {{1,2,3},{4,5},{6}};

     

    Java中的参数传递问题:

    基本类型:形式参数的改变对实际参数没有影响。

    引用类型:形式参数的改变直接影响实际参数。

     

    DAY06、面向对象

    1:面向对象思想

    面向对象是基于面向过程的编程思想。

    面向过程:强调的是每一个功能的步骤

    面向对象:强调的是对象,然后由对象去调用功能

    2:面向对象的思想特点

    A:是一种更符合我们思想习惯的思想

    B:可以将复杂的事情简单化

    C:将我们从执行者变成了指挥者

    举例:

    买电脑:

    面向过程:我的了解电脑--了解我自己的需求--找对应的参数信息--去中关村买电脑--讨价还价--买回电脑

    面向对象:我知道我要买电脑 -- 班长去给我买 -- 班长就买回来了

    洗衣服:

    面向过程:把衣服脱下--找一个盆--放点洗衣粉--加点水--把衣服扔进去--搓一搓--清洗衣服--拧干--晾起来

    面向对象:把衣服脱下--打开全自动洗衣机--扔进去--一键即可--晾起来

    吃饭:

    面向过程:去超市买菜--摘菜--洗菜--切菜--炒菜--盛起来--吃

    面向对象:上饭店吃饭,你--服务员(点菜)--厨师(做菜)--服务员(端菜)--吃

    家常事物,买洗衣机和去饭店太不划算了,所以,找个对象。

    但是,你不跟我好好学习,你将来4000,你对象8000。

    3:把大象装进冰箱

    面向过程:

    动作有哪些呢?

    A:打开冰箱门

    B:装进大象

    C:关闭冰箱门

    代码体现;

    class Demo {

    public static void main(String[] args) {

    /*

    System.out.println("打开冰箱门");

    //打开冰箱门的东西,我现在仅仅是为了演示,就写了一个输出语句

    //其实,它可能需要做很多操作。

    //这个时候代码就比较多一些了

    //假设我要多次打开冰箱门,

    //代码一多,每次都写一遍,麻烦不

    //我们就应该用方法改进

    System.out.println("装进大象");

    System.out.println("关闭冰箱门");

    */

    //写了方法以后,调用就改变了

    open();

    in();

    close();

    }

    public static void open() {

    System.out.println("打开冰箱门");

    }

    public static void in() {

    System.out.println("装进大象");

    }

    public static void close() {

    System.out.println("关闭冰箱门");

    }

    }

    面向对象:

    我们怎么才能更符合面向对象思想呢?

    A:有哪些类呢?

    B:每个类有哪些东西呢?

    C:类与类直接的关系是什么呢?

    把大象装进冰箱的分析? (如何分析有哪些类呢?UML。名词提取法。)

    A:有哪些类呢?

    大象

    冰箱

    Demo

    B:每个类有哪些东西呢?

    大象:

    进去

    冰箱:

    开门

    关门

    Demo:

    main方法

    C:类与类直接的关系是什么呢?

    Demo中使用大象和冰箱类的功能。

    代码体现:

    class 大象 {

    public static void in() {

    System.out.println("装进大象");

    }

    }

    class 冰箱 {

    public static void open() {

    System.out.println("打开冰箱门");

    }

    public static void close() {

    System.out.println("关闭冰箱门");

    }

    }

    class Demo {

    public static void main(String[] args) {

    冰箱调用开门

    大象调用进去

    冰箱调用关门

    }

    }

    4:开发,设计,特征

    面向对象开发

    就是不断的创建对象,使用对象,指挥对象做事情。

    面向对象设计

    其实就是在管理和维护对象之间的关系。

     

    面向对象特征

    封装(encapsulation)

    继承(inheritance)

    多态(polymorphism)

     

    Day 07

  1. 成员变量与局部变量的区别?

  1. 在类中的位置

       成员变量:在类中方法外

       局部变量:在方法定义中或者在方法声明上

  2. 在内存中的位置不同

       成员变量:在堆中

       局部变量:在栈中

  3. 生命周期不一样

       成员变量:随着对象的创建而存在,随着对象的消失消失

       局部变量:随着方法的调用而存在,方法调用完毕消失

  4. 初始化值不同

       成员变量:有默认初始化值

       局部变量:没有初始值,必须定义,赋值,然后才能使用

    注意事项:

    局部变量的名字可以和成员变量的名字一样,但是在方法中使用的时候采取就近原则

  1. 形式参数是类名的问题

    基本类型:形式参数的改变不影响实际参数

    引用类型:形式参数的改变直接影响实际参数

  2. 匿名对象

       定义:没有名字的对象

       应用场景:

  1. 、调用方法仅仅一次调用的时候

                    方法调用完毕以后就是垃圾,可以被垃圾回收器回收

  2. 、匿名对象作为实际参数传递的时候

    事例;

    class Student{

    public void show(){

    System.out.println("我爱学习");

    }

    }

    class StudentDemo{

    public void methord(Student ss){

    s.show();

    }

    }

    class NoNameDemo(){

    public static void main(String [] args){

    //带名字的调用

    Student s = new Student();

    s.show();

    //匿名对象

    new Student();

    new Student().show();

    //匿名对象作为实际参数传递

    StudentDemo sd = new StudentDemo();

    Student ss = new Student();

    sd.methord(ss);

    sd.methord(new Student);

    new StudentDemo.methord(new Student);

    }

    }

  1. 封装与Private关键字

    Private :

        权限修饰符

        可以修饰成员变量和成员方法

        被修饰的成员只能在本类中访问

    封装:是指隐藏对象的属性与细节,仅仅对外提供公共的访问方式

    组合:

  1. 把成员变量用Private修饰

  2. 提高对应的getXxx()与setXxx()方法

  1. this关键字

    当前类的对象引用。简单的记,它就代表当前类的一个对象

    注意:谁调用这个方法,再该方法的内部的this就代表谁

     

  2. 构造方法

    给对象的数据进行初始化

    格式:

    A:方法名与类名相同

    B:没有返回值类型

    C:没有具体的返回值

    注意事项:

    A:如果我们没有给出构造方法,系统将自动提供一个无参构造

    B:如果我们给出了构造方法,系统将不再提供默认的无参构造。

      注意:这个时候要想使用无参构造,就必须自己给出。建议永远自己给出无参构造

    给成员变量赋值的方法有两种

           A:setXxx()

           B:构造方法

  3. 类的组成

         成员变量

         构造方法

         成员方法

             根据返回值

                      VOid 类型

                    Void类型

             形式参数

                    空参数

                    非空参数

  4.   

    Day 08

    package Day08;

    /*

     * 我想要对数组进行操作

     * 在同一个文件夹下,类定义在两个文件夹中和定义在一个文件中其实一样

     */

    public class ArrayDemo {

      public static void main(String[] args) {

    //定义数组

      int [] arr = {28,55,37,46,19};

      //需求 遍历数组

      for(int x = 0 ;xlength;x++){

      if(x==arr.length-1){

      System.out.println(arr[x]);

      }else{

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

      }

      }

      //静态方法调用 (练习)

      

      //非静态方法调用 (练习)

      

      

    }

      /**

       * 如果我有多个数组都要进行遍历,那么代码的重复度就很高了。

       *

       * 如何改进呢?用方法改进

       * 调用 静态方法

       * printArray(arr);

       *

       * 非静态方法

       * ArrayDemo arr = new ArrayDemo();

       * arr.printArray(arr);

       * 测试类的作用:创建其他类的对象,调用其他类的功能

       *

       * 接下来的案例是跟数组相关,所以,应该把这些操作定义到数组操作类中

       */

      //该方法是静态的

      public static void PrintArray(int[] arr){

      for(int x = 0 ;xlength;x++){

      if(x==arr.length-1){

      System.out.println(arr[x]);

      }else{

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

      }

      }

      }

      //该方法不是静态的

    //  public void PrintArray(int [] arr){

    //   for(int x = 0 ;x

    //   if(x==arr.length-1){

    //   System.out.println(arr[x]);

    //   }else{

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

    //   }

    //   }

    //  }

      

    }

     

    package Day08;

     

    public class ArrayTool {

       private ArrayTool(){

       

       }

       

       public static void printArray(int [] arr){

       for(int x = 0;xlength;x++){

       if(x==arr.length-1){

       System.out.println(arr[x]);

       }else{

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

       }

       }

       }

    }

     

    说明书的制作:

    /*

        我想要对数组进行操作

    如何制作一个说明书呢?

         A:写一个工具类

     B:对这个类加入文档注释

       /星星

       /

         C:用工具解析文档注释

        JAVADOC工具

     D:格式

        javadoc -d 目录 -author -version

    ArrayTool.java

       目录:就可以写一个文件夹的路径

       制作文档出现的错误:

       找不到可以文档化的公共或者受保护的类:告诉我们的权限不够

    */

    class ArrayDemo

      public static void main(String[] args) {

    //定义数组

    int[] arr = {28,55,37,46,19};

    //遍历

    ArrayTool.printArray(arr);

     

    //获取最值

    int max = ArrayTool.getMax(arr);

    System.out.println("max:"+max);

    //获取55的索引值

    int index = ArrayTool.getIndex(arr,55);

    System.out.println("index:"+index);

    }

    实例:

     

    /**

    *这是针对数组进行操作的工具类

    @author 张贺

    @varsion V.10

    */

    public class ArrayDemo {

    //把构造方法私有 外界就不能在创建对象了

    /**

    *这是私有构造

    */

    private ArrayDemo(){}

    /**

    *这是遍历数组的方法,遍历后的格式是:[元素1,元素2,元素3...]

    *@param arr 这是遍历的数组

    */

    public static void printArray(int[] arr) {

    System.out.print("[");

    for(int x=0; x

    if(x == arr.length-1) {

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

    }else {

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

    }

    }

    }

    /**

    * 这是获取数组中最大值的方法

    * @param  arr 这是要获取最大值的数组

    * @return 返回数组中的最大值

    */

    public static int getMax(int[] arr) {

    int max = arr[0];

    for(int x=1; x

    if(arr[x] > max) {

    max = arr[x];

    }

    }

    return max;

    }

    /**

    * 获取指定元素在数组中第一次出现的索引,如果元素不存在,就返回-1

    * @param arr 被查找的数组

    * @param value 要查找的元素

    * @return 返回元素在数组中的索引,如果不存在,返回-1

    */

    public static int getIndex(int[] arr,int value) {

    int index = -1;

    for(int x=0; x

    if(arr[x] == value) {

    index = x;

    break;

    }

    }

    return index;

    }

    }

       

    Day09

    /*

    final可以修饰类,方法,变量

    特点:

    final可以修饰类,该类不能被继承。

    final可以修饰方法,该方法不能被重写。(覆盖,复写)

    final可以修饰变量,该变量不能被重新赋值。因为这个变量其实常量。

    常量:

    A:字面值常量

    "hello",10,true

    B:自定义常量

    final int x = 10;

    */

     

    //final class Fu //无法从最终Fu进行继承

     

    class Fu {

    public int num = 10;

    public final int num2 = 20;

     

    /*

    public final void show() {

    }

    */

    }

     

    class Zi extends Fu {

    // Zi中的show()无法覆盖Fu中的show()

    public void show() {

    num = 100;

    System.out.println(num);

    //无法为最终变量num2分配值

    //num2 = 200;

    System.out.println(num2);

    }

    }

     

    class FinalDemo {

    public static void main(String[] args) {

    Zi z = new Zi();

    z.show();

    }

    }

     

    示例二:

     

     

     

    public class Student {

      int age =10;

    }

     

    public class Day09 {

      /**

       *  面试题:

       *     final修饰局部变量的问题

       *     基本类型:基本类型的值不能改变

       *     引用类型:引用类型的地址值不发生改变,但是该对象的堆内存的值是可以

       *     改变的。

       *    

       */

    public static void main(String[] args) {

    // 局部变量是基本数据类型

    int  x = 10;

    x=100;

    System.out.println(x);

    final int y = 10;

    //无法为最终变量y分配值

    //y=100;//这个位置会报错

    System.out.println("----------------");

    //局部变量是引用数据类型

    Student stu = new Student();

    System.out.println(stu.age);

            stu.age = 100;

            System.out.println(stu.age);

            System.out.println("----------------");

            final Student s = new Student();

            System.out.println(s.age);

            s.age=100;

            System.out.println(s.age);

            //重新分配内存空间

            //无法为最终变量分陪值

           // s = new Student();   // 报错

     

    }

     

    }

     

    事例三、

     

     

    public class Student {

    /**

     * final 修饰变量的初始化时机

     *     A 被final 修饰的变量只能赋值一次

     *     B 在构造方法完毕前(非静态的常量)

     */

      int num;

      final int num2 = 20;

      {

      //num2 = 10;

      }

      public Student(){

      num = 100;

      //无法为最终变量num2分配值

      //num2 = 200;

      }

    }

     

    public class Day09 {

      

    public static void main(String[] args) {

    Student student  = new Student();

    System.out.println(student.num);

    System.out.println(student.num2);

    }

     

    }

     

    事例四、

    /*

    继承的代码体现

    由于继承中方法有一个现象:方法重写。

    所以,父类的功能,就会被子类给覆盖调。

    有些时候,我们不想让子类去覆盖掉父类的功能,只能让他使用。

    这个时候,针对这种情况,Java就提供了一个关键字:final

    final:最终的意思。常见的是它可以修饰类,方法,变量。

    */

    class Fu {

    public final void show() {

    System.out.println("这里是绝密资源,任何人都不能修改");

    }

    }

     

    class Zi extends Fu {

    // Zi中的show()无法覆盖Fu中的show()

    public void show() {

    System.out.println("这是一堆垃圾");

    }

    }

     

    class ZiDemo {

    public static void main(String[] args) {

    Zi z = new Zi();

    z.show();

    }

    }

     

     

    多态的概述和讲解

    package Basc;

    /*

     * 同一个对象(事物),在不同时刻体现出来的不同的性状

     * 举例:

     *      猫是猫,猫是动物

     *      水(液体,固体,气体)

     *      多态的前提:

     *         A:要有继承关系

     *         B:要有方法重写

     *              其实没有也可以,如果没有这个就没有意义

     *               动物 d = new 猫();

     *               d.show();

     *               动物 d = new 狗();

     *               d.show();

     *          c:要有父类引用指向子类对象

     *          父 F = new 子();

     *  多态中成员访问的特点:

     *        A:成员变量的访问特点

     *          编译看左边,运行看左边

     *        B:构造方法

     *          创建子类对象的时候,访问父类的构造方法,对父类的

     *          数据进行初始化

     *        C:成员方法

     *          编译看左边,运行看右边

     *          成员方法存在重写,所以它运行看右边

     *        D:静态方法

     *          编译看左边,运行看左边(静态和类相关,算不上重写,所以访问还是看左边的)

     */

    class Fu{

    public int num = 100;

    public void show(){

    System.out.println("show Fu");

    }

    public static void function(){

    System.out.println("function fu");

    }

    }

     

    class Zi extends Fu{

    public int num = 1000;

    public int num2 = 200;

    public void show (){

    System.out.println(" show zi");

    }

    public void method(){

    System.out.println("method zi");

    }

    public static void function(){

    System.out.println("function Zi");

    }

    }

     

    public class DuoTaiDemo {

        //要有父类引用指向子类对象

    public static void main(String[] args) {

    Fu f = new Zi();

        System.out.println(f.num);

      //  System.out.println(f.num2);  找不到符号

        f.show();

        //找不到方法

        //f.method();

        f.function();

    }

    }

     

     

     

     

    package Basc;

     

    /**

     * 多态的好处:

     *   A:提高了代码的维护性(继承保护)

     *   B:提高了代码的扩展性(由多态保证)

     */

    class Animal{

    public void eat(){

    System.out.println("eat");

    }

    public void sleep(){

    System.out.println("sleep");

    }

    }

     

    class Dog extends Animal{

    @Override

    public void eat() {

    System.out.println("狗吃肉");

    }

    @Override

    public void sleep() {

    // TODO Auto-generated method stub

    super.sleep();

    System.out.println("狗站着睡觉");

    }

    }

    class Cat extends Animal{

    @Override

    public void eat() {

    System.out.println("猫吃鱼");

    }

    @Override

    public void sleep() {

    System.out.println("猫趴着睡觉");

    }

    }

    class Pig extends Animal{

    @Override

    public void eat() {

    System.out.println("猪吃白菜");

    }

    @Override

    public void sleep() {

    System.out.println("猪侧着睡觉");

    }

    }

     

    class AnimalTool {

    private AnimalTool(){}

    public static void useAnimal(Animal a){

    a.eat();

    a.sleep();

    }

    }

     

    public class DuoTaiDemo2 {

        //要有父类引用指向子类对象

    public static void main(String[] args) {

    //我喜欢猫就养了一只猫

    Cat c = new Cat();

    c.eat();

    c.sleep();

    //我很喜欢猫 又养了一只

    Cat c2 = new Cat();

    c2.eat();

    c2.sleep();

    //我特别喜欢猫 又养了一只

    Cat c3 = new Cat();

    c3.eat();

    c3.sleep();

    System.out.println("----------------");

    //问题来了 如果我养了很多的猫 每次创建对象是可以接收的,但是

    //每次调用方法 很相似,仅仅是对象名不一样

    //我们准备用方法改进/调用方式改进版本

    AnimalTool.useAnimal(c);

    AnimalTool.useAnimal(c2);

    AnimalTool.useAnimal(c3);

    //我喜欢狗

    Dog d = new Dog();

    Dog d1 = new Dog();

    Dog d2 = new Dog();

    AnimalTool.useAnimal(d);

    AnimalTool.useAnimal(d1);

    AnimalTool.useAnimal(d2);

    }

    }

     

    /**

    *多态的弊端:不能使用子类特有的功能

    */

    package Basc;

     

    /**

     * 多态的弊端:不能使用子类特有的功能

     *   如果我想使用子类特有的功能可以吗?可以,

     *   (1)创建子类的对象调用即可,但是太耗费内存

     *   (2)把父类的引用强制转换为子类的引用(向下转型)

     *   对象转型问题:

     *      向上转型:Fu f = new Zi();

     *      向下转型:Zi z = (Zi)f;

     *      

     */

    class Fu{

    public void show(){

    System.out.println("SHOW fU");

    }

    }

    class Zi extends Fu{

    @Override

    public void show() {

    System.out.println("show Zi");

    }

    public void method(){

    System.out.println("method zi");

    }

    }

     

    public class DuoTaiDemo4 {

    public static void main(String[] args) {

    //测试

    Fu f = new Zi();

    f.show();

    //f.method();

    //你能够把子的对象赋值给父亲,那么我能不能把父的引用赋值给子的引用呢?

    //如果可以,但是如下

    Zi z = (Zi)f;

    z.show();

    z.method();

    }

    }

     

    package Basc;

    /*

     * ClassCastException:类型转换异常一般在多态的向下转型中容易出现

     */

    class Animal{

    public void eat(){}

    }

    class Dog extends Animal{

    public void eat() {

    }

    public void lookDoor(){}

    }

    class Cat extends Animal{

    @Override

    public void eat() {

    // TODO Auto-generated method stub

    super.eat();

    }

    public void playGame(){

    }

    }

     

    public class DuoTaiDemo4 {

    public static void main(String[] args) {

    //内存中是狗

    Animal a = new Dog();

    Dog d = (Dog)a;

    //内存中是猫

    a = new Cat();

    Cat c = (Cat)a;

    //内存中是猫

    Dog dd = (Dog)a;//ClassCastException

    }

    }

    /*

    多态练习:猫狗案例

    */

    class Animal {

    public void eat(){

    System.out.println("吃饭");

    }

    }

     

    class Dog extends Animal {

    public void eat() {

    System.out.println("狗吃肉");

    }

    public void lookDoor() {

    System.out.println("狗看门");

    }

    }

     

    class Cat extends Animal {

    public void eat() {

    System.out.println("猫吃鱼");

    }

    public void playGame() {

    System.out.println("猫捉迷藏");

    }

    }

     

    class DuoTaiTest {

    public static void main(String[] args) {

    //定义为狗

    Animal a = new Dog();

    a.eat();

    System.out.println("--------------");

    //还原成狗

    Dog d = (Dog)a;

    d.eat();

    d.lookDoor();

    System.out.println("--------------");

    //变成猫

    a = new Cat();

    a.eat();

    System.out.println("--------------");

    //还原成猫

    Cat c = (Cat)a;

    c.eat();

    c.playGame();

    System.out.println("--------------");

    //演示错误的内容

    //Dog dd = new Animal();

    //Dog ddd = new Cat();

    //ClassCastException

    //Dog dd = (Dog)a;

    }

    }

     

    package Basc;

    /**

     * 不同地方饮食文化不同的案例

     * @author hp

     *

     */

    class Person{

    public void eat (){

    System.out.println("吃饭");

    }

    }

     

    class SouthPerson extends Person{

    public void eat(){

    System.out.println("炒菜,吃米饭");

    }

    public void jingShang(){

    System.out.println("经商");

    }

    }

     

    class NorthPerson extends Person{

    public void eat(){

    System.out.println("炖菜,吃馒头");

    }

    public void yanJiu(){

    System.out.println("研究");

    }

    }

     

     

    public class DuoTaiTest2 {

     

    public static void main(String[] args) {

    //测试

    //南方人

    Person p = new SouthPerson();

    p.eat();

    System.out.println("——————————————————");

    SouthPerson sp = (SouthPerson)p;

    sp.eat();

    sp.jingShang();

    System.out.println("_________-");

    //北方人

    p = new NorthPerson();

    p.eat();

    System.out.println("——————————————————————");

    NorthPerson np = (NorthPerson)p;

    np.eat();

    np.yanJiu();

    }

    }

     

    多态的成员访问特点:

    方法:编译看左边,运行看右边。

    变量:编译看左边,运行看左边。

    继承的时候:

    子类中有和父类中一样的方法,叫重写。

    子类中没有父亲中出现过的方法,方法就被继承过来了

    多态的问题理解:

    class 孔子爹 {

    public int age = 40;

    public void teach() {

    System.out.println("讲解JavaSE");

    }

    }

    class 孔子 extends 孔子爹 {

    public int age = 20;

    public void teach() {

    System.out.println("讲解论语");

    }

    public void playGame() {

    System.out.println("英雄联盟");

    }

    }

    //Java培训特别火,很多人来请孔子爹去讲课,这一天孔子爹被请走了

    //但是还有人来请,就剩孔子在家,价格还挺高。孔子一想,我是不是可以考虑去呢?

    //然后就穿上爹的衣服,带上爹的眼睛,粘上爹的胡子。就开始装爹

    //向上转型

    孔子爹 k爹 = new 孔子();

    //到人家那里去了

    System.out.println(k爹.age); //40

    k爹.teach(); //讲解论语

    //k爹.playGame(); //这是儿子才能做的,一做就露馅了,所以,不行。

    //讲完了,下班回家了

    //脱下爹的装备,换上自己的装备

    //向下转型

    孔子 k = (孔子) k爹;

    System.out.println(k.age); //20

    k.teach(); //讲解论语

    k.playGame(); //英雄联盟

    多态中的继承访问

     

    多态中的对象变化内存图解

     

    03——抽象类的概述

    package Basc;

    /**

     * 抽象类的概述:

     *    动物不应该定义为具体的东西,而且动物中的吃,睡等也不应该是具体的。我们把一个不是具体的功能称为抽象的功能,而且一个类中如果有抽象的功能

     *    该类必须是抽象类

     * 抽象类的特点:

     *    A:抽象类和抽象方法必须使用abstract关键字修饰

     *    B:抽象类中不一定有抽象方法,但是有抽象方法的类必须定义为抽象类

     *    C:抽象类不能实例化

     *       因为它不是具体的。

     *       抽象类有构造方法,但是不能实例化,用来子类访问父类数据的初始化

     *    D:抽象的子类

     *       a:如果不想重写抽象的方法,该子类是一个抽象类

     *       b:重写所有的抽象方法,这个时候子类是一个具体的类

     * 抽像类的实例化其实还是靠具体的子类实现的。是多态的方式

     *    Animal a = new Cat();

     *    // 抽象类的声明格式 abstract class Animal

     */

    abstract class Animal2{

    //抽象方法

    //public void abstract void eat(){}//空方法体,这个会报错。抽象方法不能有主体

    public abstract void eat();

    public Animal2(){}

    }

    //子类是抽象类

    abstract class Dog2 extends Animal2{}

    //子类是具体类 重写抽象方法

    class Cat2 extends Animal2{

     

    @Override

    public void eat() {

    // TODO Auto-generated method stub

    System.out.println("猫吃鱼");

    }

    }

     

    public class AbstractDemo {

       //创建对象

    //Animal2 是抽象的;无法实例化

    //Animal2 a = new Animal2();

    //通过多态方式实例化

    Animal2 a = new Cat2() ;

    }

     

    package Basc;

    /**

     * 抽象类的成员变量特点

     *   成员变量:既可以是变量,也可以是常量

     *   构造方法:有。

     *   用于子类访问父类数据的初始化

     *   成员方法:既可以是抽象的,也可以是非抽象的

     * 抽象类的成员方法特性:

     *    A:抽象方法 强制要求子类做得事情

     *    B:非抽象方法 子类继承的事情,提高代码的复用性。

     * @author hp

     *

     */

    abstract class Animal3{

    public int num = 10;

    public final int num2 = 20;

    public Animal3(){}

    public Animal3(String name,int age){}

    public abstract void show();

    public void method(){

    System.out.println("method");

    }

    }

    class Dog3 extends Animal3{

    @Override

    public void show() {

    // TODO Auto-generated method stub

    System.out.println("show Dog");

    }

    }

     

    public class AbstractDemo2 {

    public static void main(String[] args) {

    //创建对象

    Animal3 a = new Dog3();

    a.num = 100;

    System.out.println(a.num);

    a.show();

    a.method();

    }

    }

     

     

     

    package Basc;

    /*

     * 一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?

    A:可以。

    B:不让创建对象。

    abstract 不能和哪些关键字共存

      private 冲突

      final 冲突

      static 无意义

     */

    abstract class Fu{

    public abstract void show();

    //非法的修饰组合

    //private abstract void show2();

    //final abstract void show3();

    //public static void show4();

    public static void show5(){

    System.out.println("method");

    }

    }

    public class AbstractDemo3 {

     

    }

     

    package Basc;

     

    /**

     * 猫狗案例

     *   具体事物:猫,狗

     *   共性:姓名,年龄,吃饭

     *  分析:从具体到抽象

     *   猫:

     *     成员变量:姓名,年龄

     *     构造方法:无参,带参

     *     成员方法:吃饭(猫吃鱼)

     *   狗:

     *     成员变量:姓名,年龄

     *     构造方法:无参,带参

     *     成员方法:吃饭(狗吃肉)

     *  因为有共性的内容,所以就提取了一个父类。动物

     *  但是又由于吃饭的内容不一样,所以吃饭的方法是抽象的

     *  而方法是抽象类,类必须定义为抽象类

     *  实现:从抽象到具体

    动物类:

    成员变量:姓名,年龄

    构造方法:无参,带参

    成员方法:吃饭();

    狗类:

    继承自动物类

    重写吃饭();

    猫类:

    继承自动物类

    重写吃饭();

     * @author hp

     *

     */

     

    abstract class animal5{

    private String name;

    private int age;

    public animal5(){}

    public String getName() {

    return name;

    }

    public void setName(String name) {

    this.name = name;

    }

    public int getAge() {

    return age;

    }

    public void setAge(int age) {

    this.age = age;

    }

    public animal5(String name,int age){

    this.name=name;

    this.age=age;

    }

    public abstract void eat();

    }

    class Dog5 extends animal5{

    public Dog5(){}

    public Dog5(String name,int age){

    super(name,age);

    }

    @Override

    public void eat() {

    // TODO Auto-generated method stub

    System.out.println("狗吃肉");

    }

    }

    class Cat5 extends animal5{

        public Cat5(){}

        public Cat5(String name,int age){

         super(name, age);

        }

    @Override

    public void eat() {

    // TODO Auto-generated method stub

    System.out.println("");

    }

    }

     

    public class AbstractTest {

    public static void main(String[] args) {

    //测试狗类

    //具体类的用法

    //方式一  

    Dog5 dog = new Dog5("1",20);

    int age = dog.getAge();

    String name = dog.getName();

    System.out.println(age+":"+name);

       //方式二

    animal5 an = new Dog5();

    an.setAge(30);

    an.setName("2");

    System.out.println(an.getAge()+":"+an.getName());

    //猫类同上

    }

    }

     

     

     

    04_接口的概述以及讲解

    package Basc;

    /*

     * 接口的特点:

     *    A:接口用interface表示

     *      interface 接口名 {}

     *    B:类实现接口用implements表示

     *      class 类名 implements 接口名{}

     *    C:接口不能实例化

     *      只能通过多态的方式进行实例化

     *    D:接口的子类

     *      a:可以是抽象类。但是意义不大

     *      b:可以是具体类。要重写接口中的所有抽象方法。(推荐方案)

     *  由此可见:

     *    A:具体类多态(几乎没有)

     *    B:抽象类多态(常用)

     *    C:接口多态(最常用)

     */

    //定义动物培训接口

    interface AnimalTrain{

    public abstract void jump();

    }

    //抽象类实现接口

    abstract class Dog6 implements AnimalTrain{

    }

    //具体类实现接口

    class Cat6 implements AnimalTrain{

     

    @Override

    public void jump() {

    System.out.println("猫可以跳高了");

    }

    }

     

    public class InterfaceDemo {

    public static void main(String[] args) {

    AnimalTrain aT = new Cat6();

    aT.jump();

    }

    }

     

     

    package Basc;

    /**

     * 接口成员特点:

     *    成员变量:

     *        只能是常量,并且是静态的。

     *        建议:自己手动给出

     *    构造方法:接口没有构造方法

     *    成员方法:只能是抽象方法。

     *             默认修饰符:public abstract

     *             建议:自己手动给出。

     * 所有的类都默认继承自一个类:Object

     * 类Object是类层次结构的根类。每个类都使用Object作为超类

     * @author hp

     *

     */

    interface Inter{

    public int num = 10;

    public final int num2 = 20;

    public static final int num3 = 30;

    //错误:需要<标识符>

    //public Inter(){}

    //接口方法不能带有主体

    //public void show(){}

    //abstract void show(){} //默认public

    public void show();//默认abstract

    }

    //接口名 + Impl 这种格式是接口的实现类格式

    class InterImpl extends Object implements Inter{

     

    public InterImpl(){

    super();

    }

    @Override

    public void show() {

    // TODO Auto-generated method stub

    }

    }

     

     

     

    public class InterfaceDemo2 {

       public static void main(String[] args) {

    //创建对象

       Inter i = new InterImpl();

       System.out.println(i.num);

       System.out.println(i.num2);

       System.out.println(Inter.num);

    System.out.println(Inter.num2);

    }

    }

     

    package Basc;

    /**

     * 类与类:

     *   继承关系:只能单继承,也可以多层继承

     *   类与接口:

     *     实现关系,可以单实现,也可以多实现

     *     并且还可以在继承一个类的同时实现多个接口

     *   接口与接口:

     *      继承关系,可以单继承,也可以多继承

     * @author hp

     *

     */

    interface Father{

    public abstract void show();

    }

    interface Mother{

    public abstract void show2();

    }

     

    interface Sister extends Father,Mother{

    }

    class Son implements Father,Mother{

     

    @Override

    public void show2() {

    // TODO Auto-generated method stub

    System.out.println("show2 son");

    }

     

    @Override

    public void show() {

    // TODO Auto-generated method stub

    System.out.println("show son");

    }

    }

    public class InterfaceDemo3 {

    public static void main(String[] args) {

    Father f = new Son();

    f.show();

    Mother m = new Son();

    m.show2();

    }

    }

     

    抽象类和接口的区别:

    A:成员区别

    抽象类:

    成员变量:可以变量,也可以常量

    构造方法:有

    成员方法:可以抽象,也可以非抽象

    接口:

    成员变量:只可以常量

    成员方法:只可以抽象

    B:关系区别

    类与类

    继承,单继承

    类与接口

    实现,单实现,多实现

    接口与接口

    继承,单继承,多继承

    C:设计理念区别

    抽象类 被继承体现的是:is a”的关系。抽象类中定义的是该继承体系的共性功能。

    接口 被实现体现的是:like a”的关系。接口中定义的是该继承体系的扩展功能。

    Day  10 形式参数与返回值的研究

    package Basc;

    /**

     * 形式参数:

     *   基本类型

     *   引用类型

     *     类名:需要的是该类的对象

     *     抽象类:需要的是该抽象类的子类的对象

    接口:需要的是该接口的实现类对象

     * @author hp

     *

     */

     

    abstract class Person2{

    public abstract void study();

    }

    class PersonDemo{

    public void method(Person2 p){

    p.study();

    }

    }

    //定义个具体的学生类

    class Student2 extends Person2{

     

    @Override

    public void study() {

    // TODO Auto-generated method stub

    System.out.println("Good Good Study,Day Day Up");

    }

    }

    public class PersonTest {

      public static void main(String[] args) {

    PersonDemo pd = new PersonDemo();

    Person2 p = new Student2();

    pd.method(p);

    }

    }

     

     

     

     

    代码2

    package Basc;

     

    abstract class Person2{

    public abstract void study();

    }

    class PersonDemo{

    public Person2 getPerson2(){

    return new Student2();

    }

    }

    //定义个具体的学生类

    class Student2 extends Person2{

     

    @Override

    public void study() {

    // TODO Auto-generated method stub

    System.out.println("Good Good Study,Day Day Up");

    }

    }

    public class PersonTest {

      public static void main(String[] args) {

    PersonDemo pd = new PersonDemo();

    pd.getPerson2().study();

    }

    }

     

     

    package Basc;

    class Student3{

    public void study(){

    System.out.println("Good Good Study,Day Day Up");

    }

    }

     

    class StudentDemo{

    public void method(Student3 s){

    s.study();

    }

    }

     

     

    public class StudentTest {

      public static void main(String[] args) {

    //我们需要测试Student类的study()方法

      Student3 s = new Student3();

      s.study();

      System.out.println("——————————————————");

      //需求2 我要测试StudentDemo类中的method()方法

      StudentDemo sd = new StudentDemo();

      Student3 ss = new Student3();

      sd.method(ss);

      System.out.println("---------------");

      //匿名用法

      new StudentDemo().method(new Student3());

    }

    }

     

     

    package Basc;

    /*

     * 链式编程:

     *  每次调用完毕方法以后,返回的是一个对象

     */

    class Student4{

    public void study(){

    System.out.println("Good Good Study,Day Day Up");

    }

    }

    class StudentDemo2{

    public Student4 getStudent(){

    return new Student4();

    }

    }

     

    public class StudentTest3 {

    public static void main(String[] args) {

    //如何调用

    StudentDemo2 sd = new StudentDemo2();

    sd.getStudent().study();

    }

    }

     

    带包的编译和运行:

    A:手动式

    a:编写一个带包的java文件。

    b:通过javac命令编译该java文件。

    c:手动创建包名。

    d:把b步骤的class文件放到c步骤的最底层包

    e:回到和包根目录在同一目录的地方,然后运行

    带包运行。

    B:自动式

    a:编写一个带包的java文件。

    b:javac编译的时候带上-d即可

    javac -d . HelloWorld.java

    c:回到和包根目录在同一目录的地方,然后运行

    带包运行。

    修饰符:

    权限修饰符:private,默认的,protected,public

    状态修饰符:static,final

    抽象修饰符:abstract

    类:

    权限修饰符:默认修饰符,public

    状态修饰符:final

    抽象修饰符:abstract

    用的最多的就是:public

    成员变量:

    权限修饰符:private,默认的,protected,public

    状态修饰符:static,final

    用的最多的就是:private

    构造方法:

    权限修饰符:private,默认的,protected,public

    用的最多的就是:public

    成员方法:

    权限修饰符:private,默认的,protected,public

    状态修饰符:static,final

    抽象修饰符:abstract

    用的最多的就是:public

    除此以外的组合规则:

    成员变量:public static final

    成员方法:public static

              public abstract

      public final

    5_内部类概述及讲解

    package Basc;

    /**

     * 内部类的概述:

     *   把类定义在其他类的内部。这个类就被称为内部类。

     * 内部类的访问特点:

     *   A:内部类可以直接访问外部类的成员,包括私有

     *   B:外部类要访问内部类的成员,必须创建对象

     *   

     *   

     * 内部类的位置

     *    成员位置:在成员位置定义的类,被称为成员内部类

     *    如何直接访问成员内部类的成员

     *      外部类名.内部类名 对象名 = 外部类对象.内部类对象;

     *    局部位置:在局部位置定义的类,被称为局部内部类

     *   

     * @author hp

     *

     */

    class Outer{

    private int num = 10;

    //成员位置

    class Inner {

    public void show(){

    System.out.println(num);

    }

    }

    public void method (){

    //找不到符号

    //show();

    Inner i = new Inner();

    i.show();

    //局部位置

     class Inner{

     

     }

    }

    }

     

    public class InnerClassDemo {

       public static void main(String [] args){

       Outer outer  = new Outer();

       outer.method();

       

       Outer.Inner oI = new Outer().new Inner();

       oI.show();

       }

    }

     

    package Basc;

    /**

     * 成员内部类的修饰符:

     *    private 为了保证数据的安全性

     *    static 为了方便访问数据

     *           注意:静态内部类访问的外部类数据必须用静态修饰

     * 成员内部类被静态修饰后的访问方式:

     *     外部类名.内部类名 对象名 = new 外部类名.内部类名();

     * 案例:我有一个人(人有身体,身体有内脏)

     * @author hp

     *

     */

    class Outer{

    private int num = 10;

    private static int num2 = 100;

    //成员位置 内部类用静态修饰是因为内部类可以看出是外部类的成员

    public static class Inner {

    public void show(){

    //必须用静态修饰

    // System.out.println(num);

    System.out.println(num2);

    }

    public static void show2(){

    System.out.println(num2);

    }

    }

    public void method (){

    //找不到符号

    //show();

    Inner i = new Inner();

    i.show();

    //局部位置

     class Inner{

     

     }

    }

    }

     

    public class InnerClassDemo {

       public static void main(String [] args){

       Outer outer  = new Outer();

       outer.method();

       

       Outer.Inner oI = new Outer. Inner();

       oI.show();

       //show2()的另一种调用方式

       Outer.Inner.show2();

       }

    }

     

     

     

    package Basc;

    /**

     * 局部内部类:

     *    A:可以直接访问外部类的成员

     *    B:在局部位置,可以创建内部类对象,通过对象调用内部类的方法,来使用

     *    局部内部类的功能

     *    面试题:

     *       局部内部类访问局部变量的注意事项?

     *        A:局部内部类访问局部变量必须使用final修饰

     *        B:为什么呢?

     *            局部变量是随着方法的调用而调用的,随着调用完毕消失

     *            而堆内存的内容不会立即消失,所以哦们添加final修饰

     *            加入final修饰以后,这个变量就变成了常量。既然是常量你消失了

     *            但是内存中存储的数据是20.所以数据还是在使用的

     * @author hp

     *

     */

    class Outer{

    private int num = 10;

    public void method(){

    int num2= 20;

    final int num3 =30;

    class Inner{

    public void show(){

    //此处必须访问finall修饰过的

    //System.out.println(num2);

    }

    }

    }

    }

     

    public class InnerClassDemo {

       public static void main(String [] args){

       Outer o = new Outer();

       o.method();

       }

    }

     

     

    package Basc;

    /**

     * 匿名内部类

     *    就是内部类的简化写法

     *  前提:存在一个类或者接口

     *      这里的类可以是具体类也可以是抽象类

     *  格式:

     *    new 类名或者接口名(){

     *    重写方法;

     *    }

     *   本质是什么呢?

     *   是一个继承了该类或者实现了该接口的子类匿名对象

     * @author hp

     *

     */

    interface  Inter{

    public abstract void show();

    public abstract void show2();

    }

     

    class Outer{

    public void method(){

    //两个方法的时候

    new Inter() {

    public void show() {

    // TODO Auto-generated method stub

    System.out.println("show");

    }

     

    @Override

    public void show2() {

    // TODO Auto-generated method stub

    }

    }.show();

    Inter  i = new Inter() {

    @Override

    public void show2() {

    // TODO Auto-generated method stub

    System.out.println("dd");

    }

    @Override

    public void show() {

    // TODO Auto-generated method stub

    System.out.println("ee");

    }

    };

    }

    }

     

    public class InnerClassDemo {

       public static void main(String [] args){

       Outer o = new Outer();

       o.method();

       }

    }

     

     

     

    package Basc;

    /*

     * 面试题:

     *    要求请填空分别输出30 20 10

     * 注意:

     *    1:内部类和外部类没有继承关系

     *    2:通过外部类名限定this对象

     *    Outer.this

     */

    class Outer{

    public int num = 10;

    class Inner{

    public int num = 20;

    public void show(){

    int num = 30;

    System.out.println(num);

    System.out.println(this.num);

    System.out.println(Outer.this.num);

    }

    }

    }

     

    public class InnerClassDemo {

       public static void main(String [] args){

      Outer.Inner oi = new Outer().new Inner();

      oi.show();

       }

    }

     

     

     

    package Basc;

    /*

     * 匿名内部类在开发中的应用

     */

    interface Person{

    public abstract void study();

    }

    class PersonDemo{

    //接口名作为形式参数

    //其实这里需要的不是接口,而是该接口的实现类对象

    public void method(Person p){

    p.study();

    }

    }

     

    class Student implements Person{

     

    @Override

    public void study() {

    // TODO Auto-generated method stub

    System.out.println("好好学习 天天向上");

    }

    }

     

    public class InnerClassDemo {

       public static void main(String [] args){

     //测试

       PersonDemo pd = new PersonDemo();

       Person p = new Student();

       pd.method(p);

       System.out.println("————————————————————");

       

       //匿名内部类在开发中的使用

       //匿名内部类的本质是继承类或者实现接口的子类匿名对象

       pd.method(new Person() {

    @Override

    public void study() {

    // TODO Auto-generated method stub

    System.out.println("好好学习");

    }

    });

       

       }

    }

     

    快捷键

    Main + alt +/

    Syso +alt +/

    Ctrl + shift + o 导入包

    格式化  ctrl+shift+f

    单行注释 ctrl+/

    多行注释 ctrl+shift+/

    代码上下移动  选中代码alt+上/下箭头

    查看源代码

      选中类名(F3或者Ctrl+鼠标点击)

    package Basc;

    class Student9{

    }

     

    public class OuterDemo {

    /**

     * Object:Object是类层次结构的根类。每个类都使用Object作为超类。

     * 每个类都直接或间接的继承自Object类

     * Onject类的方法:

     *    public int hashCode():返回该对象的哈希码值。

     *    注意:哈希值是根据哈希算法计算出来的一个值,这个值和地址值有关,但是不是实际的地址值

     *    public final Class getClass():返回此Object的运行时类

     *        Class 类的方法;

     *           public String getName():以String的形式返回此Class对象所表示的实体

     * @param args

     */

    public static void main(String[] args) {

    Student s = new Student();

    System.out.println(s.hashCode());

    System.out.println(s.getClass());

    Class C = s.getClass();

    System.out.println(C.getClass().getName());

    }

    }

     

     

    @override是注解 ,这个注解的意思是我这个方法是重写父类的。如果和父类名出现

     

     

    了偏差就会报错

     

    * public boolean equals (Object obj):指示其它某个对象是否与此对象“相等”

     * 这个方法,默认情况下比较的是地址值。比较地址值一般来说意义不大,所以我们要重写该方法

     *    一般都是用来比较对象的成员变量值是不是相等。

     *    重写代码优化:提高效率,提高程序的健壮性

     *    最终版:其实还是自动生成。

     * ==:

     *   基本类型:比较的就是值是不是相等

     *   引用类型:比较的就是地址值是不是相同

     * equals:

     *   引用类型:默认情况下,比较的是地址值

     *   不过,我们可以根据情况自己重写该方法。一般重写都是自动生成,比较对象的成员变量

     *   值是不是相同。

     *   

     * 基本格式:

     * public boolean hasNextXxx():判断是否是某种类型的元素

     * public Xxx nextXxx():获取该元素

     *

     * 举例:用int类型的方法举例

     * public boolean hasNextInt()

     * public int nextInt()

     *

     * 注意:

     * InputMismatchException:输入的和你想要的不匹配

     * 常用的两个方法:

     * public int nextInt():获取一个int类型的值

     * public String nextLine():获取一个String类型的值

     *

     * 出现问题了:

     * 先获取一个数值,在获取一个字符串,会出现问题。

     * 主要原因:就是那个换行符号的问题。

     * 如何解决呢?

     * A:先获取一个数值后,在创建一个新的键盘录入对象获取字符串。

     * B:把所有的数据都先按照字符串获取,然后要什么,你就对应的转换为什么。

    package Basc;

     

    public class Deng {

    public static void main(String[] args) {

    //public String(String original):把字符串常量值转成字符串

        String s =new String("ddd");

       // public String(char[] value):把字符数组转成字符串

        char [] a = {'a','b'};

        String ss = new String(a);

        //public String(byte[] bytes,int index,int length):

        //把字节数组的一部分转成字符串

        String s3 = new String(a,0,1);

        //public String(byte[] bytes):把字节数组转成字符串

        byte [] b = {'s','d','d'};

        String s4 = new String(b);

        //public int length():返回此字符串的长度。

    }

    }

    字符串的特点:一旦被赋值就不能更改。

    String s = new String(“hello”)和String s = “hello”;的区别?

      有。前者会创建2个对象,后者创建1个对象

    ==:比较引用类型比较的是地址值是否相同

     equals:比较引用类型默认也是比较地址值是否相同,而String类重写了equals()方法,比较的是内容是否相同。

    * String类的判断功能:

     * boolean equals(Object obj):比较字符串的内容是否相同,区分大小写

     * boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写

     * boolean contains(String str):判断大字符串中是否包含小字符串

     * boolean startsWith(String str):判断字符串是否以某个指定的字符串开头

     * boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾

     * boolean isEmpty():判断字符串是否为空。

    package Basc;

    /**

     * 看程序写结果

     * 字符串如果是变量相加,先开空间,在拼接。

     * 字符串如果是常量相加,是先加,然后在常量池找,如果有就直接返回,否则创建

     * @author hp

     *

     */

     

    public class Deng {

    public static void main(String[] args) {

    String s1 = "hello";

    String s2 ="world";

    String s3 = "helloword";

    System.out.println(s3==s1+s2);

    System.out.println(s3.equals((s1+s2)));

    System.out.println(s3=="hello"+"world");//true

    System.out.println(s3.equals("hello"+"world"));//true

    }

    }

     

     注意:

     * 字符串内容为空和字符串对象为空。

     * String s = "";

     * String s = null;

    /**

      * String类的获取功能

     * int length():获取字符串的长度。

     * char charAt(int index):获取指定索引位置的字符

     * int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引。

     * 为什么这里是int类型,而不是char类型?

     * 原因是:'a'和97其实都可以代表'a'

     * int indexOf(String str):返回指定字符串在此字符串中第一次出现处的索引。

     * int indexOf(int ch,int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引。

     * int indexOf(String str,int fromIndex):返回指定字符串在此字符串中从指定位置后第一次出现处的索引。

     * String substring(int start):从指定位置开始截取字符串,默认到末尾。

     * String substring(int start,int end):从指定位置开始到指定位置结束截取字符串。

     */

     

    public class Deng {

    public static void main(String[] args) {

    String s = "zhanghe";

    String ss = "an";

    System.out.println(s.indexOf(ss));

    }

    }

    String的转换功能:

     * byte[] getBytes():把字符串转换为字节数组。

     * char[] toCharArray():把字符串转换为字符数组。

     * static String valueOf(char[] chs):把字符数组转成字符串。

     * static String valueOf(int i):把int类型的数据转成字符串。

     * 注意:String类的valueOf方法可以把任意类型的数据转成字符串。

     * String toLowerCase():把字符串转成小写。

     * String toUpperCase():把字符串转成大写。

     * String concat(String str):把字符串拼接。

    package Basc;

    /**

     * String类的其他功能;

     *  替换功能

     *   String replace (char old,char new)

     *   String replace(String old,String new)

     *  去除字符串两空格

     *   String trim()

     *  按字典顺序比较两个字符串

     *  int compareTo(String str)

     *  int compareToIgnoreCase(String str)

     * @author hp

     *

     */

    public class StringDemo {

       public static void main(String [] args){

       //替换功能

       String s1 = "helloworld";

       String s2 = s1.replace('l', 'K');

       String s3 = s1.replace("owo", "ak47");

       System.out.println("s1:"+s1);

       System.out.println("s2:"+s2);

       System.out.println("s3:"+s3);

       System.out.println("————————————————");

       //祛除字符串两个空格

       String s4 = "  hello world";

       String s5 = s4.trim();

       System.out.println("s4:"+s4+"---");

       System.out.println("s5:"+s5+"---");

       //按照字典顺序比较两个字符串

       String s6 = "hello";

       String s7 = "hello";

       String s8 = "abc";

       String s9 = "xyz";

       System.out.println(s6.compareTo(s7));

       System.out.println(s6.compareTo(s8));

       System.out.println(s6.compareTo(s9));

       }

    }

     

    package Basc;

    /**

     * 统计大串中出现小串的次数

     *"woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun"

     * @author hp

     *

     */

    public class StringTest {

    public static void main(String[] args) {

    //定义大串

    String maxString = "woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun";

    //定义小串

    String minString = "java";

    int count = getCount(maxString,minString);

    System.out.println("java在大串中出现了:"+count+"次");

    }

     

    private static int getCount(String maxString, String minString) {

    // TODO Auto-generated method stub

     //定义个统计变量

    int count = 0;

    //先在大串中查找一次小串第一次出现的位置

    int index = maxString.indexOf(minString);

    //索引不是-1 说明存在,统计变量++

    while(index!=-1){

    count++;

    //把刚才的索引+小串的长度作为开始位置截取上一次的大串,返回一个新的字符串,并把改字符串的值重新

    //赋值给大串

    int startIndex = index+minString.length();

    maxString = maxString.substring(startIndex);

    //继续检查

    index=maxString.indexOf(minString);

    }

    return count;

    }

    }

     

     Arrays:针对数组进行操作的工具类。比如说排序和查找。

     * 1:public static String toString(int[] a) 把数组转成字符串

     * 2:public static void sort(int[] a) 对数组进行排序

     * 3:public static int binarySearch(int[] a,int key) 二分查找

     * public static boolean isUpperCase(char ch):判断给定的字符是否是大写字符

     * public static boolean isLowerCase(char ch):判断给定的字符是否是小写字符

     * public static boolean isDigit(char ch):判断给定的字符是否是数字字符

     * public static char toUpperCase(char ch):把给定的字符转换为大写字符

     * public static char toLowerCase(char ch):把给定的字符转换为小写字符

     为了对基本数据类型进行更多的操作,更方便的操作,Java就针对每一种基本数据类型提供了对应的类类型。包装类类型。

     * byte Byte

     * short Short

     * int Integer

     * long Long

     * float Float

     * double Double

     * char Character

     * boolean Boolean

     *

     * 用于基本数据类型与字符串之间的转换。

     */

     int类型和String类型的相互转换

     *

     * int -- String

     * String.valueOf(number)

     *

     * String -- int

     * Integer.parseInt(s)

    package Basc;

    /**

     * 常用的基本进制转换

     * public static String toBinaryString(int i)

     * public static String toOctalString(int i)

     * public static String toHexString(int i)

     * 十进制到其他进制的转换

     * public static String toString(int i,int radix)

     * 由这个我们也看到了进制的范围是2——36

     * 其他进制到十进制

     * public static int parseInt(String s,int radix)

     * @author hp

     *

     */

    public class StringTest {

    public static void main(String[] args) {

    //十进制到二进制,八进制,十六进制

    System.out.println(Integer.toBinaryString(100));

    System.out.println(Integer.toOctalString(100));

    System.out.println(Integer.toHexString(100));

    System.out.println("————————————————");

    //十进制到其他进制

    System.out.println(Integer.toString(100,10));

    System.out.println(Integer.toString(100,2));

    System.out.println("————————————————");

    //其他进制到十进制

    System.out.println(Integer.parseInt("100",10));

    System.out.println(Integer.parseInt("100",2));

    System.out.println(Integer.parseInt("100",8));

    }

    }


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部