Java学习笔记(近期更新)

Posted 南风阿帅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java学习笔记(近期更新)相关的知识,希望对你有一定的参考价值。

1.案例“helloworld”

//定义了一个helloworld类
public class helloworld{
//    定义了一个main方法
    public static void main(String[] args) {
//        输出语句
        System.out.println("helloworld");
    }
}

2.关键字

修饰符:

abstract:抽象类修饰符
class:标准类修饰符
final:可以声明成员变量、方法、类以及本地变量,final变量是只读的.
private:修饰仅限于类的内部访问变量的修饰符.
protected:修饰可以用于子类的访问变量的修饰符.
public:修饰最大访问权限的访问变量的修饰符.
static:用于方便在没有创建对象的情况下来进行调用(方法/变量)的修饰符。
Java数据类型:

boolean:布尔型
byte:字节类型
char:字符型
double:双精度浮点型
float:单精度浮点型
int:整型
long:长整型
short:短整型
void:空类型,通常用于方法返回.
语句组成:

break:中断循环修饰符.
case:条件选择修饰符.
catch:异常处理修饰符.
continue:循环跳过修饰符.
default:条件选择默认条件修饰符.
do:循环修饰符
else:条件选择修饰符
extends:扩展子类修饰符
finally:异常处理修饰符.finally作为异常处理的一部分,不管是否异常最后都要处理这部分内容.
Java for:循环修饰符
if:条件选择修饰符
implements:加载接口类修饰符
import:引用类修饰符.
instanceof:支出判断对象是否是特定类修饰符.
interface:接口类定义修饰符.
new:新建类修饰符.
package:命名空间修饰符.
return:返回修饰符.
super:父类指针修饰符.
switch:条件选择修饰符.
sychronized:同步块修饰符.
this:本类指针修饰符.
throw:语句异常抛出修饰符.
throws:方法异常抛出修饰符.
try:异常处理修饰符.
while:循环处理修饰符.
特殊含义关键字:

assert:断言,用于调试,多被junit代替,IDE默认不开启。
const:预留关键字。
goto:预留关键字。
enum:枚举。
native:本地方法。
strictfp:精确浮点,可用于类、接口、方法。
transient:免除变量序列化。
volatile:被设计用来修饰被不同线程访问和修改的变量。
非java关键字:

true:布尔值真.
false:布尔值假.
null:空值修饰符.
serilizable:序列化修饰符.

3.常量

字符串常量、整数常量、小数常量、字符常量、布尔常量、空常量
//声明了一个helloworld类
public class helloworld{
//    定义了一个main方法
    public static void main(String[] args) {
//        输出语句
//        字符串常量
        System.out.println("helloworld");
//        整数常量
        System.out.println(1);
//        小数常量
        System.out.println(1.5);
//        字符常量
        System.out.println(\'%\');
//        布尔值
        System.out.println(1<2);
//        空常量(不能直接输出)
    }
}

4.数据类型

4.1基本数据类型

4.1.1数值型

整数

byte,short,int,long

浮点数

float,double

字符

char

4.1.2非数值型

布尔

boolean

5.变量

//声明了一个helloworld类
public class helloworld{
//    定义了一个main方法
    public static void main(String[] args) {
//        定义变量
        int a = 10;
        System.out.println(a);
        a = 20;
        System.out.println(a);
    }
}

变量名不能重复、变量需要复制后才能使用、定义long类型数据后面加L、定义float类型数据后面加F

成员变量和静态变量:

  • 成员变量可以不赋初值,默认是数据类型的默认值;
  • 成员变量只可以通过实例来访问;
  • 静态成员变量可以通过 类名直接访问;

6.类型转换

6.1自动类型转换

//声明了一个helloworld类
public class helloworld{
//    定义了一个main方法
    public static void main(String[] args) {
        double a = 10;
        System.out.println(a);
    }
}

6.2强制类型转换

//声明了一个helloworld类
public class helloworld{
    //    定义了一个main方法
    public static void main(String[] args) {
        int k = (int)88.88;
        System.out.println(k);
    }
}
//k的值为88

7.运算符

7.1算术运算符

//声明了一个helloworld类
public class helloworld{
    //    定义了一个main方法
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println(a+b);
        System.out.println(a-b);
        System.out.println(a*b);
        System.out.println(a/b);
        System.out.println(a%b);
    }
}
30;-10;200;0;10

7.2字符“+”操作

  • 字符参加“+”操作的时候,是使用的ASCII值进行操作;
  • 算术表达式中包含多个基本数据类型的时候,整个算数表达式结果的数据类型将会自动进行提升
//声明了一个helloworld类
public class helloworld{
    //    定义了一个main方法
    public static void main(String[] args) {
        int a = 10;
        char b = \'A\';//A的ASCII值是65
        char c = \'a\';//a的ASCII值是97
        System.out.println(a+b);
        System.out.println(a+c);
    }
}

7.3字符串“+”操作

//声明了一个helloworld类
public class helloworld{
    //	  实质上是拼接和算术运算操作,代码执行顺序为从前到后
    //    定义了一个main方法
    public static void main(String[] args) {
        System.out.println("a"+"b"+666);
        System.out.println(17+1+"的王帅");
    }
}

7.4赋值运算符

//声明了一个helloworld类
//注意:扩展的复制运算符底层隐含了强制转换数据类型的操作
public class helloworld{
    //    定义了一个main方法
    public static void main(String[] args) {
        int a=10;
        System.out.println("a是"+a);
        a += 20;
        System.out.println(a);

    }
}

7.5自增、自减运算符

//单独使用
//声明了一个helloworld类
public class helloworld{
    //    定义了一个main方法
    public static void main(String[] args) {
        int a=10;
        a++;
        System.out.println("a是"+a);
    }
}
//参与操作使用
//声明了一个helloworld类
public class helloworld{
    //    定义了一个main方法
    public static void main(String[] args) {
        int a=10;
        int b=a++;
        System.out.println("a是"+a);
        System.out.println(b);
    }
}

7.6关系运算符

==;!=;>;<;>=;<=

7.7逻辑运算

&&;||;!

7.8三元运算符

//声明了一个helloworld类
public class helloworld{
    //    定义了一个main方法
    public static void main(String[] args) {
        int a=10;
        int b=20;
        int c=a>b?a:b;
        System.out.println(a);
    }
}

7.8.1案例:两只老虎

//判断老虎的体重
public class helloworld{
    public static void main(String[] args) {
        int a=100;
        int b=200;
        boolean c = a==b ? true:false;
        System.out.println(c);
    }
}

1.8.2案例:三个和尚

//判断身高最高的和尚
public class helloworld{
    public static void main(String[] args) {
        int h1=100;
        int h2=200;
        int h3=300;
        int h = h1>h2?h1 : h2;
        int x = h>h3?h : h3;
        System.out.println(x);
    }
}

8.数据输入

//引入Scanner类
import java.util.Scanner;
public class helloworld{
    public static void main(String[] args) {
//        创建对象
        Scanner sc = new Scanner(System.in);
//        接收数据
        int x = sc.nextInt();
//        输出数据
        System.out.println(x);
    }
}

案例:三个和尚(升级)

//引入Scanner类
import java.util.Scanner;
public class helloworld{
    public static void main(String[] args) {
//        创建对象
        Scanner sc = new Scanner(System.in);
//        接收数据
        System.out.println("请输入第一个和尚的身高:");
        int a = sc.nextInt();
        System.out.println("请输入第二个和尚的身高:");
        int b = sc.nextInt();
        System.out.println("请输入第三个和尚的身高:");
        int c = sc.nextInt();
//        比较
        int h = a>b?a : b;
        int x = h>c?h : c;
//        输出数据
        System.out.println("三个和尚中最高身高是:"+x+"cm");
    }
}

9.顺序结构

9.1流程控制语句——分支结构(if)

9.1.1if语句

public class helloworld{
    public static void main(String[] args) {
        int x = 10;
        if( x < 20 ){
            System.out.println("这是 if 语句");
        }
    }
}

9.1.2if...else...语句

public class helloworld{
    public static void main(String[] args) {
        int x = 30;
        if( x < 20 ){
            System.out.print("这是 if 语句");
        }else{
            System.out.print("这是 else 语句");
        }
    }
}

9.1.3嵌套的if语句

public class helloworld{
    public static void main(String[] args) {
        int x = 30;
        int y = 10;

        if( x == 30 ){
            if( y == 10 ){
                System.out.print("X = 30 and Y = 10");
            }
        }
    }
}

案例:考试成绩等级判断

//引入Scanner类
import java.util.Scanner;
public class helloworld{
    public static void main(String[] args) {
//        创建对象
        System.out.println("请输入考试成绩:");
        Scanner sc = new Scanner(System.in);
//        接收数据
        int score = sc.nextInt();
//        判断
        if (score>=90){
            System.out.println("优");
        }else if(score>=80&&score<90){
            System.out.println("良");
        }else if(score<80){
            System.out.println("差");
        }
    }
}

9.2流程控制语句——分支结构(switch)

public class helloworld{
    public static void main(String[] args) {
        int i = 5;
        switch(i){
            case 0:
                System.out.println("0");
            case 1:
                System.out.println("1");
            case 2:
                System.out.println("2");
            default:
                System.out.println("default");
        }
    }
}

9.2.1案例:春夏秋冬

import java.util.Scanner;
public class helloworld{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int month = sc.nextInt();
        switch (month){
                //case穿透原理
            case 3:
            case 4:
            case 5:
                System.out.println("春季");
                break;
            case 6:
            case 7:
            case 8:
                System.out.println("夏季");
                break;
            case 9:
            case 10:
            case 11:
                System.out.println("秋季");
                break;
            case 12:
            case 1:
            case 2:
                System.out.println("冬季");
                break;
             default:
                 System.out.println("哈哈哈");
        }
    }
}

9.3流程控制语句——循环结构

9.3.1for结构

组成:初始化语句、条件判断语句、循环语句、条件控制语句

public class helloworld{
    public static void main(String[] args) {
        for (int i=1;i<=5;i++){
            System.out.println("Helloworld");
        }
    }
}

案例:求和

public class helloworld{
    public static void main(String[] args) {
        int sum = 0;
        for (int i=1;i<=5;i++){
            sum +=i;
        }
        System.out.println(sum);
    }
}

求偶数和

public class helloworld{
    public static void main(String[] args) {
        int sum = 0;
        for (int i=1;i<=5;i++){
            if (i % 2 ==0) {
                sum += i;
            }
        }
        System.out.println(sum);
    }
}

9.3.2while循环语句

public class helloworld{
    public static void main(String[] args) {
        int x = 1;
        while( x < 5 ) {
            System.out.print("value of x : " + x );
            x++;
            System.out.print("\\n");
        }
    }
}

案例:珠穆朗玛峰

public class helloworld{
    public static void main(String[] args) {
        double paper = 0.1;
        int i = 1;
        while( paper <= 884430 ) {
            paper *=2;
            i ++;
        }
        System.out.println(i);
    }
}

9.3.3do...while结构

public class helloworld{
    public static void main(String[] args) {
        int x = 10;
//        先执行语句,再判断条件
        do{
            System.out.print("value of x : " + x );
            x++;
            System.out.print("\\n");
        }while( x < 20 );
    }
}

9.3.4Random(产生随机数)

import java.util.Random;
public class helloworld{
    public static void main(String[] args) {
        Random r = new Random();
        int x = 10;
        for (int i = 1;i<=5;i++){
            int number = r.nextInt(10);
            System.out.println(number);
        }
    }
}

案例:猜数字大小游戏

import java.util.Random;
import java.util.Scanner;
public class helloworld{
    public static void main(String[] args) {
        Random r = new Random();
        int number = r.nextInt(100)+1;
        System.out.println("*****欢迎来到猜数字游戏*****");
        System.out.println("请输入你要猜的数字(1~100):");

        while (true){
            Scanner sc = new Scanner(System.in);
            int guessNumber = sc.nextInt();

            if (guessNumber>number) {
                System.out.println("你猜的数字" + guessNumber + "大了,请重新输入:");
            } else if (guessNumber<number){
                System.out.println("你猜的数字"+guessNumber+"小了,请重新输入");
            }else{
                System.out.println("恭喜你,猜对了!");
                break;
            }
        }
    }
}

10.数组

10.1数组定义格式

int [] list;
int list [];
//二维数组
public class helloworld{
    public static void main(String[] args) {
        int [][] arr = new int[3][4];
        arr[0] = new int[]{1,2,3,4,5};
        System.out.println(arr);
    }
}

10.2数组动态初始化

int size = 10;
int [] list = new int[size];

10.3数组元素访问

public class helloworld{
    public static void main(String[] args) {
//        声明数组变量
        int size = 10;
        int [] list = new int[size];
//        访问list数组及其元素
        System.out.println(list[0]);
        System.out.println(list[1]);
        System.out.println(list[2]);
    }
}

10.4数组静态初始化

static:静态

修饰变量——变量是静态变量;

修饰方法——方法是静态方法,访问的时候可以直接通过 类名.方法名称;

注意——在静态方法中,只能调用静态的变量或方法,如果想要调用非静态变量和方法,可以通过创建这个类的实例,然后通过实例来调用非静态的变量和方法。

public class helloworld{
    public static void main(String[] args) {
//        声明数组变量
        int size = 10;
        int [] list = {1,2,3,4,5};
//        访问list数组及其元素
        System.out.println(list[0]);
        System.out.println(list[1]);
        System.out.println(list[2]);
    }
}

10.5常见操作

10.5.1遍历

//遍历指定元素
public class helloworld{
    public static void main(String[] args) {
//        声明数组变量
        int size = 10;
        int [] list = {1,2,3,4,5};
//        访问list数组及其元素
        for (int i=0;i<=4;i++){
            System.out.println(list[i]);
        };
    }
}
//遍历所有元素
public class helloworld{
    public static void main(String[] args) {
//        声明数组变量
        int [] list = {1,2,3,4,5,6};
//        访问list数组及其元素
        for (int i=0;i<=list.length;i++){
            System.out.println(list[i]);
        };
    }
}

10.6eclipse给main方法传参

public class helloworld{
    public static void main(String[] args) {
        for (int i = 0;i<args.length;i++){
            System.out.println("name:"+args[i]);
        }
    }
}

11.方法

Java方法是语句的集合,它们在一起执行一个功能。

  • 方法是解决一类问题的步骤的有序组合
  • 方法包含于类或对象中
  • 方法在程序中被创建,在其他地方被引用
  • 注意:方法必须在创建后才能调用

11.1方法的定义和调用

public class helloworld{
    public static void main(String[] args){
//        调用方法
        isEvenNumber();
    }

//    定义一个方法
    public static void isEvenNumber(){
//        定义变量
        int number = 10;
//        判断是否是偶数
        if (number%2==0){
            System.out.println(true);
        }else {
            System.out.println(false);
        }
    };
}

11.1.1练习

public class helloworld{
    public static void main(String[] args){
//        调用方法
        getMax();
    }

//    定义一个方法
    public static void getMax(){
//        定义变量
        int a = 10;
        int b = 20;
//        判断是否是偶数
        if (a>b){
            System.out.println(a);
        }else {
            System.out.println(b);
        }
    };
}

11.2带参数方法定义和调用

public class helloworld{
    public static void main(String[] args){
//        调用方法
//        isEvenNumber(1);
        int number = 10;
        isEvenNumber(number);
    }


//    定义一个方法
    public static void isEvenNumber(int number){
        if (number%2==0){
            System.out.println(true);
        }else{
            System.out.println(false);
        }
    };
}
  • 形参:方法定义中的参数;
  • 实参:方法调用中的参数。

11.2.1练习

注意实参的顺序对应的形参的顺序

public class helloworld{
    public static void main(String[] args){
//        调用方法
        isEvenNumber(10,20);
    }
//    定义一个方法
    public static void isEvenNumber(int a,int b){
        if (a>b){
            System.out.println(true);
        }else{
            System.out.println(false);
        }
    };
}

11.3带返回值的方法定义和调用

  • 方法定义的时候,return后面的返回值与方法定义的数据类型要匹配,否则就会报错;
  • 方法的return值通常会使用变量进行接收,否则该返回值将无意义。
public class helloworld{
    public static void main(String[] args){
//        调用方法
        boolean x = isEvenNumber(10);
        System.out.println(x);
    }
//    定义一个方法
    public static boolean isEvenNumber(int a){
        if (a%2==0){
            return true;
        }else{
            return false;
        }
    };
}

11.4方法注意事项

  • 方法不能循环嵌套定义;
  • void表示无返回值,return可以省略,也可以单独书写,后面不添加数据;

11.5方法重载

在同一类中,相同名字但参数不同的方法

  • 与返回值无关;
  • 在调用的时候,Java虚拟机会通过参数的不同来区分同名的方法。
public class helloworld{
    public static void main(String[] args){
//        调用方法
        int result = sum(10,20);
        System.out.println(result);

        double result2 = sum(20.0,30.0);
        System.out.println(result2);

        int result3 = sum(10,20,30);
        System.out.println(result3);
    }
//    定义一个方法
    public static int sum(int a,int b){
        return a+b;
    };
    public static double sum(double a,double b){
        return a+b;
    };
    public static int sum(int a,int b,int c){
        return a + b + c;
    };
}
//使用方法重载思想,设计比较两个证书是否相同的方法,兼容全整数类型(byte、short、int、long)
public class helloworld{
    public static void main(String[] args){
//        调用方法
        System.out.println(compare(10,20));
        System.out.println(compare((byte) 10,(byte) 20));
        System.out.println(compare((short) 10,(short) 20));
        System.out.println(compare(10L,20L));
    }
//    定义一个方法
    public static boolean compare(int a,int b){
        return a==b;
    };
    public static boolean compare(long a,long b){
        return a==b;
    };
    public static boolean compare(byte a,byte b){
        return a==b;
    };
    public static boolean compare(short a,short b){
        return a==b;
    };
}

11.6方法的参数传递

11.6.1案例:数组遍历

//使用方法重载思想,设计比较两个证书是否相同的方法,兼容全整数类型(byte、short、int、long)
public class helloworld{
    public static void main(String[] args){
        int[] arr = {11,22,33,44,55};
        read(arr);
    }
//    public static void read(int[]arr){
//        for (int x = 0;x<arr.length;x++){
//            System.out.println(arr[x]);
//        }
//    };
public static void read(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.print(arr[x]+", ");
        }

    }
    System.out.println("]");
};
}

11.7成员方法和静态方法的区别

  • 成员方法只能通过类的实例来调用;
  • 静态方法可以直接通过类名来访问;

12.基础知识练习

12.1案例:减肥计划

//输入星期数,显示当天的减肥活动
import java.util.Scanner;
public class helloworld{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个星期数:");
        int week = sc.nextInt();
        
        if (week<1||week>7){
            System.out.println("你输入的星期数有误,请重新输入:");
        }else if (week==1){
            System.out.println("跑步");
        }else if (week==2){
            System.out.println("游泳");
        }else if (week==3){
            System.out.println("慢走");
        }else if (week==4){
            System.out.println("动感单车");
        }else if (week==5){
            System.out.println("拳击");
        }else if (week==6){
            System.out.println("爬山");
        }else {
            System.out.println("好好吃一顿");
        }
    }
}
//输入星期数,显示当天的减肥活动
import java.util.Scanner;
public class helloworld{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个星期数:");
        int week = sc.nextInt();

        switch (week){
            case 1:
                System.out.println("跑步");
                break;
            case 2:
                System.out.println("游泳");
                break;
            case 3:
                System.out.println("慢走");
                break;
            case 4:
                System.out.println("动感单车");
                break;
            case 5:
                System.out.println("拳击");
                break;
            case 6:
                System.out.println("爬山");
                break;
            case 7:
                System.out.println("好好吃一顿");
                break;
            default: 
                System.out.println("你输入的星期数有误,请重新输入:");
                break;
        }
    }
}

12.2案例:逢七过

public class helloworld{
    public static void main(String[] args){
        for (int x=0;x<=100;x++){
            if (x%10==7||x/10%10==7||x%7==0){
                System.out.print(x+",");
            }
        }
    }
}

12.3案例:数组元素求和

public class helloworld{
    public static void main(String[] args){
        int[] arr={11,22,33,44,55};
        int sum = 0;
        for (int x = 0;x<arr.length;x++){
            sum +=arr[x];
        }
        System.out.println("最终结果是:"+sum);
    }
}

12.4案例:查找数组元素及索引

import java.util.Scanner;

public class helloworld{
    public static void main(String[] args){
        int[] arr={11,22,33,44,55};
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要查找的数据");
        int number = sc.nextInt();
        
////        定义一个索引值,初始值为-1
//        int index = -1;
////        遍历数组,获取数组中的每一个元素
//        for (int x=0;x<arr.length;x++){
//            if (arr[x]==number){
//                index = x;
//                System.out.println(index);
//            }
//        }
        
//        调用方法
        int index = search(arr,number);
        System.out.println(index);
    }

//    定义一个方法
    public static int search(int[]arr,int number){
        int index = -1;
//        遍历数组,获取数组中的每一个元素
        for (int x=0;x<arr.length;x++){
            if (arr[x]==number){
                index = x;
                break;
            }
        }
        return index;
    }
}

13.java面向对象

三大特征:封装、继承、多态、(抽象)。

13.1 Java类和对象

13.1.1类的定义

类是Java程序的基本组成单位,由属性和行为(方法、功能)组成。;

如果一个类中的方法没有使用static修饰,那么在调用的时候只能通过类的实例(对象)进行调用;

类的作用就是用来封装数据的;

类中还可以定义功能(方法);

package student;
/**
*自定义数据类型
*Student理解成一个学生类的模板
**/
 public class student {
//    属性--成员变量
    String name;
    String cardID;
    char gender;

//    行为、功能、方法
//    有static修饰,静态方法
    public static void call(){
        System.out.println("打电话");
    }
//    无static修饰,静态方法
    public static void sendMessage(){
        System.out.println("发短信");
    }
}

13.1.2对象的定义

类模板的实例。

package student;
import java.util.Scanner;
/**
*自定义数据类型
*Student理解成一个学生类的模板(抽象出来的)
 * 张三这个学生就是一个具体的对象
**/
 public class student {
//    属性--成员变量(注意static修饰)--有默认值(数据类型的默认值)
    String name;
    String cardID;
    char gender;

//    行为、功能、方法
    public  void call(){
//        静态方法(static)里面只能调用静态的方法或变量
        System.out.println(name +"在打电话");
    }
    public  void sendMessage(){
        String a =10;//局部变量(没有附初始值是不能使用的)
        System.out.println("发短信");
    }
}
package student;

public class studentDemo {
    public static void main(String[] args) {
/**
 * student是类名;
 * p是对象名
 * 创建方法:类名 对象名=new 类名();//可以把这个对象叫做类的一个具体实例对象
 */
        student testData = new student();
        System.out.println(testData.name);//输出null
//        对象的属性
        testData.name = "张三";
        System.out.println(testData.name);//输出张三
        testData.gender = \'男\';
        testData.cardID = "000000";
//        对象的方法
        testData.call();//输出“张三在打电话”
    }
}

13.2.3匿名对象

//        匿名对象调用(只需要使用一次类的时候会用到匿名对象)
        new student().show();//输出 null--0.0

13.2.4包装类


13.2.5封装

  1. 优点:
  • 良好的封装能够减少耦合。
  • 类内部的结构可以自由修改。
  • 可以对成员变量进行更精确的控制。
  • 隐藏信息,实现细节。
  1. 原则:
  • 把不需要对外提供的内容都隐藏起来。
  • 把属性隐藏,提供公共方法对其访问。
private String name;//由于private的修饰,name属性只能在该类内部中访问,其他程序不能访问到该属性
  1. 用户放置(不是读取)值
//    类中定义的方法
//    用户用来放置数据到“私有”属性变量的方法(同过该方法,用户能够够间接的访问到name属性)
    public void insertName(String pName){
        name = pName;
    }

//    对象
//    通过设定好的方法将数据设置到被封装好的属性中
        testData.insertName("王帅");
  1. IDea的Generate
//    自动生成的get/set方法

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCardID() {
        return cardID;
    }

    public void setCardID(String cardID) {
        this.cardID = cardID;
    }

    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

13.2.5构造方法

可以通过构造方法来给类的成员变量(属性)进行赋值。

/*   无参数的构造方法,如果类中无构造方法,则默认就有一个无参的构造方法,如果类中有带参的构造方法,则默
 *    的构造方法就没有了
 */
    private student(){}

	student(){}

	public student(){}

//    带参数的欧早方法
public student(String name,String cardID){
        this.name = name;
        this.cardID = cardID;
    }

13.2继承

  • 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
  • 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
  • Java中不允许通过extends多继承,但是可以使用传递的方式进行多继承。
  • 私有的成员变量不允许继承。
  • java中所有类的鼻祖——object。
public class Dog extends Animal {
    private String name;
    public int leg = 4;

}

13.2.1继承中成员变量的关系

//如果所引用的子类中没有需要的属性或方法,则会再次到父类中去寻找

13.2.2super和this关键字

public AnimalTest() {
        super();//调用父类的无参构造方法(object)
    }

//static不能使用this和super

13.2.3继承中构造方法

  • 在子类的构造器中必须要先调用父类构造器;
  • 子类中会默认调用父类中的无参构造器。
ExtendsConstruct.java
    
    package test;

/**
 * 研究继承中构造器的调用关系(执行顺序关系)
 */
public class ExtendsConstruct {
    public static void main(String[] args) {
        ZhangWuji zhangwuji = new ZhangWuji();
        zhangwuji.show();

//        打印的是:
//        susu
//        jiji!
//        张无忌
//        苏苏
    }
}

YingSusu.java
    
    package test;

public class YingSusu {
    String name = "苏苏";
    public YingSusu(){
        super();//调用object的无参构造器
        System.out.println("susu");
    }
}

ZhangWuji.java
    
    package test;

public class ZhangWuji extends YingSusu {
    String name = "张无忌";
    public  ZhangWuji(){
        super();//调用的父类的无参构造    //子类会默认调用父类的无参构造器
        System.out.println("jiji!");
    }

    public void show(){
        System.out.println(name);
        System.out.println(super.name);
    }
}

13.2.4继承中的方法重写

  • 如果调用的类中没有这种方法的话,就会去它的父类中去找。
  • 可以用父类的方法,也可以通过重写去优化父类的方法;
  • 父类中的静态方法在子类中不能被重写,但是在子类中可以写一个和父类方法名称一样的一个静态方法;
  • 父类中的私有方法不能被重写;
  • 子类重写父类中的方法,权限不能更低,即父类中的方法权限是public,子类中不能是private;
  • 静态方法想要重写,只能写成静态的(静态的方法不能被重写,但是父类和子类可以有相同的静态方法,但是两者之间和继承毫无关系)
//    继承中方法的重写,和父类有一样的名称的方法,这种情况在同一类中叫做“方法重载”,在继承中叫做“方法重写”
    public void eat(){
        System.out.println("张无忌在吃饭");
    }

//    静态方法
    public static void fight(){
        System.out.println("苏苏在战斗");
    }
//    继承中方法的重写
    public void eat(){
        super.eat();
        System.out.println("张无忌在刷碗");
    }
//	  输出 苏苏在吃饭;张无忌在刷碗

//    重写的静态方法
    public static void figth(){

    }

13.2.5案例:求矩形面积及判断点是否在矩形之内

package Rectangle;

/**
 * 定义的一个长方形的类
 */
public class Rectt {
    private float width;
    private float heigth;

//    两个构造方法
//    属性初始化
    public Rectt(float width,float heigth){
        super();
        this.width = width;
        this.heigth = heigth;
    }
//    属性初始化值为10
    public Rectt(){
        super();
        this.width = 10;
        this.heigth = 10;
    }

//    定义两个get的方法

    public float getWidth() {
        return width;
    }

    public float getHeigth() {
        return heigth;
    }

    //    两个方法
//    求面积
    public float area(){
        float area = this.width * this.heigth;
        return area;
    }
//    求周长
    public float perimeter(){
        float perimeter = 2 * (this.width + this.heigth);
        return perimeter;
    }
}

package Rectangle;

public class PlainRect extends Rectt {
    private float startX;
    private float startY;
//    带参数的构造方法

    public PlainRect(float width, float heigth, float startX, float startY) {
        super(width, heigth);//调用父类的构造器,给宽和高赋值
        this.startX = startX;
        this.startY = startY;
    }
//    不带参数的构造方法
    public PlainRect(float width, float heigth) {
        super(0f, 0f);
        this.startX = 0;
        this.startY = 0;
    }

//    判断给点的点是否在矩形内
   public boolean isInside(double m,double n){
        if (
                m >= startX && m <= (startX + super.getWidth())
                        &&
                n >= (startY - super.getHeigth()) && n <= startY
        ){
            return true;
        }else {
            return false;
        }
   }
}

package Rectangle;

public class PlainRectTest {
    public static void main(String[] args) {
        PlainRect plainRect = new PlainRect(20,10,10,10);
//        求周长和面积
        float perimeter = plainRect.perimeter();
        System.out.println("周长是:"+perimeter);
        float area = plainRect.area();
        System.out.println("面积是:"+area);

//        判断点
        boolean inside = plainRect.isInside(25.5,13);
        System.out.println("是否在矩形之内:"+inside);
    }
}

以上是关于Java学习笔记(近期更新)的主要内容,如果未能解决你的问题,请参考以下文章

近期学习数据结构笔记=====>队列

学习笔记:python3,代码片段(2017)

JSP 学习笔记

JSP学习笔记:JSP语法和指令

近期学习笔记

Linux学习笔记(17)