Java基础知识复习


运算符:
  - 算术运算符  +  -  *  /
  - 赋值运算符  += -=  *= /=  %=  取余
  - 比较运算符(关系运算符)  >=  <=  >  < 
  - 逻辑运算符  &  
  &&   1. 两边都是true,结果是true 
  2. 一边是false,结果是false.
  短路特点:符号左边是false,右边不再运
  ||  
  1. 两边都是false,结果是false<br /> 
  2. 一边是true,结果是true <br />
  短路特点: 符号左边是true,右边不再运算
  - 条件运算符(三元运算符)a>b?true?false
  定义格式
  修饰符 返回值类型 方法名 (参数列表){
    代码...
    return ;

方法定义注意事项:

- 方法必须定义在一类中方法外

- 方法不能定义在另一个方法的里面 

switch(表达式) { 
    case 常量值1: 
            语句体1;
            break; 
    case 常量值2: 
            语句体2; 
            break; 
        ... 
    default: 
            语句体n+1; 
            break;
    }
    
    
    public static void main(String[] args) { 
    //定义变量,判断是星期几 
    int weekday = 6; 
    //switch语句实现选择 
    switch(weekday) { 
        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; 
    }
    
for循环语句格式

- 格式:

```Java
for(初始化表达式①; 布尔表达式②; 步进表达式④){
    循环体③
}
```

- while循环语句格式: 

```java
初始化表达式①
while(布尔表达式②){
    循环体③
    步进表达式④
}
```

  while循环执行流程

- 执行流程

  - 执行顺序:①②③④>②③④>②③④…②不满足为止。

- do...while循环格式 

```java
初始化表达式①
do{
    循环体③
    步进表达式④
}while(布尔表达式②);
```
 do...while循环执行流程

- 执行流程

  - 执行顺序:①③④>②③④>②③④…②不满足为止。    
  - ①负责完成循环变量初始化。
  - ②负责判断是否满足循环条件,不满足则跳出循环。
  - ③具体执行的语句
  - ④循环后,循环变量的变化情况  

 5.1.3 for循环执行流程

# for和while的小区别

- for 和 while 的小区别:
  - 控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继
  - 续使用,如果你想继续使用,就用while,否则推荐使用for。原因是for循环结束,该变量就从内存中消
  - 失,能够提高内存的使用效率。
  - 在已知循环次数的时候使用推荐使用for,循环次数未知的时推荐使用while
调用方法的三种形式
    public static void main(String[] args) {
//        直接调用
        as();
//        赋值调用
        int   c=a1(3,3);

        System.out.println("c="+c);

//        输出调用
        System.out.println(a1(6,2));
    }

    private static void as() {
        System.out.println("优秀");
    }

    public   static   int  a1( int a, int b){
        return  a+b;
    }
    
    
    package Stringtixi;

public class Zui {
    public static void main(String[] args) {
//        最大数
        a2();
//        倒叙
        as3();
    }

    private static void as3() {

        int[] arr={23,56,66,100};

        for (int i = 0; i < arr.length; i++) {

            System.out.println(arr[i]);
        }

        System.out.println("--------------");
        for (int min = 0, max=arr.length-1;  min<=max;min++,max--) {

            int  c=arr[min];
            arr[min]=arr[max];
            arr[max]=c;
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.println("倒叙为"+arr[i]);
        }
    }

    private static void a2() {
        int[] arr={23,56,66,100};
        int c=arr[0];
        for (int i = 0; i < arr.length; i++) {
if(arr[i]>c){
    c=arr[i];
}


        }
        System.out.println("最大数为"+c);
    }
}

    
    --------------------
    面向对象
    
    **类**:是一组相关**属性**和**行为**的集合
    
    
    类和对象的关系

- 类是对一类事物的描述,是抽象的。

- 对象是一类事物的实例,是具体的。

- 类是对象的模板,对象是类的实体。 


public class Ju {
//    成员变量
    String  color;

    public static void main(String[] args) {
//        局部变量
        int c=666;
        Ju ju = new Ju();

        System.out.println(c);
        System.out.println(ju.color);

    }

}
成员变量和局部变量的区别

- 在类中的位置不同 
  - 成员变量:类中,方法外
  - 局部变量:方法中或者方法声明上(形式参数)
- 作用范围不一样 
  - 成员变量:类中
  - 局部变量:方法中
- 初始化值的不同 
  - 成员变量:有默认值
  - 局部变量:没有默认值。必须先定义,赋值,最后使用
- 在内存中的位置不同  
  - 成员变量:堆内存
  - 局部变量:栈内存   (常量池)
- 生命周期不同 
  - 成员变量:随着对象的创建而存在,随着对象的消失而消失
  - 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失 
  
  
  #### 构造方法的定义格式★★★

```java
修饰符 构造方法名(参数列表){
    // 方法体
}     
```

构造方法的写法上,方法名与它所在的类名相同。它没有返回值,所以不需要返回值类型,甚至不需要void。使用
构造方法后,代码如下: 

```java
public class Student {
    private String name;
    private int age;
    // 无参数构造方法
    public Student() {}
    // 有参数构造方法
    public Student(String name,int age) {
        this.name = name;
        this.age = age;
    }

```

注意事项**

1. 如果你不提供构造方法,系统会给出无参数构造方法。
2. 如果你提供了构造方法,系统将不再提供无参数构造方法。
3. 构造方法是可以重载的,既可以定义参数,也可以不定义参数。 
  
  //键盘录入,求最大数
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入第一个数");
        int a = sc.nextInt();
        System.out.println("请输入第2个数");
        int b = sc.nextInt();
        System.out.println("请输入第3个数");
        int c = sc.nextInt();

        int d=(a>b ? a:b);
        int max=(d>c?d:c);
        System.out.println("最大数为"+max);
    }
    猜数字
    
    private static void as1() {
        Random r = new Random();
        int i = r.nextInt(10);

        for (int k = 0; k <3; k++) {
            System.out.println("请输入第"+(k+1)+"个数");
            int f = sc.nextInt();
            if(f>i){
                System.out.println("输大了");
            }else   if (f<i){
                System.out.println("输小了");
            }else {
                System.out.println("恭喜你猜中了");

                break;
            }
        }


        }
        
        
        --------
        package Stringtixi;

public class Stringr {

    public static void main(String[] args) {

        String   s="s游,记";
        //把字符串转换成字符数组
//        char[] chars = s.toCharArray();
//        for (int i = 0; i < chars.length; i++) {
//            System.out.println(chars[i]);
//        }

//把字符串转换成字节数组
//        byte[] bytes = s.getBytes();
//        for(int x = 0; x < bytes.length; x++) {
//            System.out.println(bytes[x]);
           100
115
98
106
115
//        }

        /*
        *
        * 把s  替换西
        * */

        String replace = s.replace("s", "西");
        System.out.println(replace);
//        分割
        String[] split = s.split(",");
        for (String s1 : split) {
            System.out.println(s1);
        }
    }
}

    

 静态代码块★★★

- 静态代码块:定义在成员位置,使用static修饰的代码块{ }。
  - 位置:类中方法外。
  - 执行:随着类的加载而执行且执行一次,优先于main方法和构造方法的执行     
    
    static 修饰的内容:

- 是随着类的加载而加载的,且只加载一次。
- 存储于一块固定的内存区域(静态区),所以,可以直接被类名调用。
- 它优先于对象存在,所以,可以被所有对象共享
//    计算在 -10.8 到 5.9 之间,绝对值大于 6 或者小于 2.1 的整数有多少个。
    public static void main(String[] args) {
        // 定义最小值
        double min =-10.8;
        // 定义最大值
        double max = 5.9;
        // 定义变量计数
        int count = 0;
        // 范围内循环
        for (double i = Math.ceil(min); i <= max; i++) {
            // 获取绝对值并判断
            if (Math.abs(i) > 6 || Math.abs(i) < 2.1) {
                // 计数
                count++;
            }
        }
        System.out.println("个数为: " + count + " 个");
    }
}


    private static void as5() {

        int[] arr={23,76,66,100};
//转换成字符数组
        String s = Arrays.toString(arr);
        Arrays.sort(arr)  ;

//正序
        String s1 = Arrays.toString(arr);
        System.out.println("正序"+s1);
        System.out.println("---------------");
        for (int i = arr.length-1; i>=0;i--) {
            System.out.println("反序"+arr[i]);
        }
    }
    
    
    - 接口中,无法定义成员变量,但是可以定义常量,其值不可以改变,默认使用public static final修饰。 
- 接口中,没有构造方法,不能创建对象。 
- 接口中,没有静态代码块
被final修饰的常量名称,一般都有书写规范,所有字母都大写。   
 final String USERNAME ;


修饰方法

    修饰符 final 返回值类型 方法名(参数列表){     
    //方法体 
}
权限修饰符介绍
- public:公共的。 
- protected:受保护的 ,同一个类以及同一个包 ,不通包的子类。
- default:默认的 。  同一个类以及同一个包
- private:私有的。在同一个类中

什么是内部类

将一个类A定义在另一个类B里面,里面的那个类A就称为**内部类**,B则称为**外部类**。
**访问特点**

- 内部类可以直接访问外部类的成员,包括私有成员。 
- 外部类要访问内部类的成员,必须要建立内部类的对象

1.什么是JVM?什么是JDK? 什么是JRE?
答案:jdk:java开发工具包。
      jre:java运行环境
  jvm:java虚拟机
jdk = jre + 开发工具
jre = jvm + 核心类库

1.标示符的概述,组成规则及注意事项? ***
概述:给类,变量,数组等名字时使用的字符序列。
组成规则:由字母,数字,下划线,$组成。
注意事项:
1)数字不能做开头。
2)不能使用java关键字
3)严格区分大小写,尽量做到见名知意。
2.java关键字的定义,特点并书写几个常用的关键字
被java赋予特殊含义的英语单词,一般由小写英文字母组成。
例如:public static void class int
3.Java三种注释类型
单行注释:// 注释内容
多行注释:/* 注释内容 */
文档注释: /** 注释内容 */

1.java数据类型自动转换的规则  ***
1)boolean类型不能转换为其它类型
2)byte,short,char在进行计算时,会先转换成int类型。
short s1 = 3,s2 = 5;
     2.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?  ***
s1 = s1 + 1有你部门能不能    这些错。因为s1 + 1结果是int类型,赋值给short类型的s1会发生错误。
s1 += 1没有错。因为+=隐含了一个强制类型转换。
3. 8种基本数据类型及其字节数  ***
byte  short  int   long  float  double  char  boolean
1     2      4    8    4     8      2     1/8

1. i++和++i的异同之处 
共同点:
都是使变量自身加1。
如果单独使用,两者没有任何区别。
i++和++i的使用仅仅针对变量。 5++和++5会报错,因为5不是变量
不同点:
参与计算时,i++是先参与计算,再自身加1.
++i是先自身加1,再参与计算。
如:int a = 5;  
int b = a++;  此时,a是6,b是5.
int a = 5;
int b = ++a;    此时,a是6,b是6.
2.&和&&的区别和联系,|和||的区别和联系  ***
&和&&都可以用作逻辑运算符。
&没有短路特性,&&有短路特性。
|没有短路特性,||有短路特性。
短路特性:
如果&&左边为false,那么右边的表达式内容不会影响到整个表达式的结果,)
1)所以&&左边为false时,右边的表达式不会执行。
如果||左边为true,那么右边的表达式内容不会影响到整个表达式的结果,
2)所以||左边为true时,右边的表达式不会执行。
3.用最有效率的方法算出2乘以8等于多少
    2 << 3
4.基本数据类型的类型转换规则
    1)小的数据放在大的数据类型中时,会自动把小的数据转换成大的数据类型,这叫做自动类型转换。如:double d = 3;  
    2)大的数据放在小的数据类型中时,会发生错误。可以强制的把大的数据转换成小的数据类型。格式为:(要转换的数据类型)要转换的数据
    如:int a = (int)3.14;

1.分支语句有哪些
    if语句和switch语句。
    if语句有3种格式,if格式,if..else格式,if..else if格式,switch有switch..case格式。
    分支语句可以嵌套。
2.switch是的注意事项
    1)case后只能是常量,不能是变量。
    2)break可以省略,但不建议。防止case穿透。
    3)default可以省略,但不建议。除非判断的值是固定的。
    4)default和case之间没有先后关系,一般放在最后面。
3.if多分支语句和switch多分支语句的异同之处
        相同:都是分支语句。
        不同:一般情况if用来判断范围,switch用来判断固定值。

1.简述for循环语句的格式及执行流程    ***
    格式:
    for(循环变量赋初值;循环执行条件;循环变量的变化规律){
            循环体
    }
    执行流程:
    for(1;2;3){
        4
    }
    [1,2],[4,3,2],[4,3,2]...[4,3,2]
    解释:
            1:循环变量赋初值,2:循环执行条件,
        3:循环变量的变化规律,4:循环体
    每组都是以2结尾,2位true,执行下一组大括号,2位false,循环结束。
2.while和do-while循环的区别  ***
    while循环是先执行循环条件,条件为true,执行循环体,而do..while先执行一次循环体,再判断循环条件。所以,while可能一次都不执行,但do.while至少执行一次。
3.break和continue的作用
    break用来结束循环,也可以在case中防止case穿透。
  continue用来结束本次循环。

1.三种流程控制语句
    顺序结构,分支结构,循环结构
2.在JAVA中如何跳出当前的多重嵌套循环?
    在java中,想要跳出多重循环,在外层循环前加上一个标记,使用break的时候
    使用break 标记名可以直接跳出标记的那个循环。
    sn: for(;;){
            for(int i = 0;i < 5;i++){
                if(i == 2){
                    break sn;
                }
            }
    }
3.方法的注意事项 ***
    1)方法不调用,不执行
    2)方法之间是平级关系,可以嵌套调用,但不能嵌套定义
    3)方法定义的时候参数之间用逗号隔开
    4)方法调用时实参一定是一个具体的值。
    5)如果方法有返回值,一定要有return。

1.数组的特征
    数组是具有相同数据类型的元素的有序集合。
    数组元素的使用: 数组名[下标]
    下标是从0开始的
    数组的长度是固定的,length表示数组的长度。
2.数组的初始化方式
    静态初始化:数据类型[] 数组名 = {元素值,元素值...元素值};
    动态初始化:数据类型[] 数组名 = new 数据类型[数组长度];
3.数组操作常见的两个异常及场景  ***
    数组下标越界
    空指针异常
    例如:
    int[] arr = new int[5];
    arr[5];    //没有第6个元素,数组下标越界
    arr = null;    
    arr[0];        //空指针异常

1.什么是类? ***
    类是具有相同特征的对象的抽象。
2.对象和类的区别是什么
    类是具有形同特征的对象的抽象。
    对象是类的具体体现。
    如:人 -  张三
3.程序设计从开始到现在,大致经历了哪三个阶段? *****
    过程式程序设计、结构化程序设计直到今天的面向对象程序设计

1.说一下你对面向对象的理解
    万物皆对象,面向对象是把具有相同特征的对象的属性定义成成员变量,
行为定义成成员方法。
    面向对象的三大特征是封装,继承,多态。
    面向对象的特性提高了大型程序的复用性和维护性
2.类和对象的关系
    类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间
3.面向过程和面向对象的区别
    1)面向过程以实现功能的函数开发为主,而面向对象要首先抽象出类、属性及其方法,然后通过实例化类、执行方法来完成功能
    2)都具有封装性,但是面向过程是封装的是功能,而面向对象封装的是数据和功能
    3)面向对象具有继承性和多态性,而面向过程没有继承性和多态性,所以面向对象优势是明显
1.简述封装的设计原则,和好处 ***
    1)把成员变量用private修饰成私有的。
    2)给每个远程变量提供set和get方法。
    好处:通过封装,可以对类的属性进行隐藏。提高了代码的安全性,程序的可维护性增强。
2.private是干嘛的?怎么使用?
    private是一个权限修饰符,私有的,可以修饰类的成员。
    在成员前加上private,这个成员就只能在该类中访问。
3.this关键字的作用
    this指访问本类成员。可以用来解决成员变量和局部变量同名的情况。
1.static关键字的作用
    static是一个静态修饰符,可以修饰类的成员。
    被static修饰的静态成员,存放在内存中的静态区,随着类的加载而加载。
    用static修饰的成员,可以通过类名直接访问。格式为:类名.成员名。
    被static修饰的变量,是属于类的,不管对象有多少个,静态变量只有
    1份,只会被初始化一次。
2.main方法的原理是什么
    main方法是java程序的入口,程序永远从main的第一条有效语句开始执行。
        格式为:public static void main(String[] args){}
3.构造方法是什么,有什么用 ***
    构造方法就是与类的名字相同的方法,它没有返回值类型。
    作用:创建对象的时候对对象进行初始化。

1.什么是继承,为什么要使用继承
    继承是面向对象的三大特征之一,子类会继承父类所有的非私有成员,
构造方法除外。
    继承的实际意义在于可以提高代码的复用性。
2.继承条件下构造方法的执行过程
    1)子类在创建对象的时候,会调用构造方法,子类的构造方法在执行前,
系统会默认先调用父类的无参构造。
    2)如果子类显示的去调用父类的其它构造,就不会再默认调用无参构造。
3.继承需要注意什么,什么时候使用继承
    1)子类无法继承父类的私有成员。
    2)子类无法继承父类的构造方法。
    有两个类,当A是B类的一种时,使用继承。如:猫是动物,此时
猫类可以继承动物类。

1.方法重载和方法重写的区别(overload和override的区别) ***
    方法重载:在同一个类中,方法名相同,参数列表不同的方法间构成重载关系。
    方法重写:子类继承父类时,当子类中出现和父类相同的方法时,子类会
    重写父类的方法。

1.多态是什么?干什么用的 
    多态:同一个事物在不同时刻体现出的不同状态叫做多态。
    多态可以用父类用引用指向子类的对象,因为存在方法重写,所以
同一个父类引用调用同一个方法时可以体现出不同的效果。
    多态可以提高程序的复用性,可扩充性和维护性。
2.多态的技能点 ***
    1)前提:
    要有继承。
    要有方法重写。
    要有父类的引用指向子类的对象。
    2)向上转型
            将一个父类的引用指向一个子类对象,称为向上转型。
    3)向下转型
        将一个父类的引用强制转换成子类的引用,称为向下转型
3.多态的成员访问特点? ***
    成员变量:编译看左边,运行看左边
成员方法:编译看左边,运行看右边
静态方法:编译看左边,运行看左边

1.什么是抽象类,抽象类有什么特点
    抽象类就是在类名前加了修饰符abstract。
一个类中有抽象方法,这个类必须为抽象类。
    抽象类不能实例化对象。
2.一个抽象类,如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
  可以。定义为抽象类为了不让它实例化对象。
                                                        


1.访问修饰符的作用域都是什么样的?***
public作用于整个java项目
        protected可以作用于不同包的子类
        default(默认的) 作用于同一个包
        private作用于同一个类

static内部类:属于整个外部类,而不是属于外部类的每个对象。不能访问外部类的非静态成员(变量或者方法),.可以访问外部类的静态成员

面向对象的特征有哪些方面?
抽象、抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两 
方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。 
封装、通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义 
的接口。
继承、继承是从已有类得到继承信息创建新类的过程。被继承的类被称为父类;继承的类被称为子类
多态、多态性是指允许不同子类的对象对同一行为作出不同的响应。


接口和抽象类的区别
1、抽象类只能被单继承,但是接口可以多实现;
2、抽象类中有构造方法,接口中没有构造方法。
3、抽象类中即可以有普通成员变量也可以有常量;接口中变量全是常量,默认修饰符 public static final;
4、抽象类中既可以有抽象方法,也可以有普通方法,但是有有抽象方法的类必须定义为抽象类;接口中的方法只能定义为抽象方法,默认修饰符 public abstract。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明天会更好fjy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值