学习Java之路---Java基础(知识补充版)

1.java基础

1.1 注释

  • //单行注释

  • /* 多行注释*/

  • /**

    *文档注释

    *文档注释

    */

1.2 标识符

  • 所有的标识符都是以字符、$、下划线开头;

  • 标识符是大小写敏感的。

1.3数据类型

基本类型

Byte char short int long(3L) float(5.1F) double boolean

1 2 2 4 8 4 8

(强制类型转换时,不能对boolean转换且只能由低到高)


引用类型

String,接口,数组;


  • 二进制0b,八进制0,十六进制0x;

  • 数字之间可以用下划线分割 10_0000_000


面试拓展: 1.因为float类型的数由舍入误差,所以尽量少用float 类型做比较;

2.new两个相同String,比较时返回false;直接给String赋值,比较时返回true。

1.4变量与常量

变量

  • 局部变量:存在与函数方法体中,定义时需要初始化;

  • 实例变量:存在与类中且函数方法体外,函数方法体内使用时需要先创建一个实例对象;

  • 类变量:与实例对象位置相同,定义时需要加static且需要初始化(随类创建时产生)。


常量

定义时需要加final,且习惯使用大写字母定义;


1.5运算符

  • ++:a++先赋值后加加;

  • -- :--a先减减后赋值;

  • A&B:同0为0,同1为1,异为0

  • A|B:同0为0,同1为1,异为1

  • A^B:同为0,异为1

  • ~B:取反

  • 》》:右移/2

  • 《《:左移*2

  • 推荐使用()提升运算符


面试拓展

1.6包机制

一般利用公司域名倒置命名包 www.baidu.com >> com.baidu.www


1.7JavaDoc

1.为类或类变量加文件注释;

2.在【cmd】中输入:javadoc -encoding UTF-8 -charset UTF-8 java文件名 即可生成帮助文档。


【java帮助文档】 Java Platform SE 8


2.java流程控制

2.1用户交互Scanner

详细语法

Scanner s=new Scanner(System.in);
System.out.println("请输入字符:");
//next()不能得到有空格的字符串
//nextLine()可以获得空白
if(s.hasNext())
{
    String str=s.next();
    //如果输入整数时,可更改为nextInt()
    System.out.println("输入next字符为:"+str);
}
    String str2=s.nextLine();
    System.out.println("输入nextLine字符为:"+str2);
​
s.close();

2.2选择结构

switch选择结构

switch(属性名){
    case 条件1:执行语句;break;
    case 条件2:执行语句:break;
      ·
      ·
   default:执行语句;
}

2.3循环结构

while循环

判断条件为true则执行;

do while循环

至少执行一次;

for循环

【快捷键】100.for

增强for循环(适用于数组)

【语法格式】for(int x:数组名){}

【终止循环】break 跳出循环; continue 跳过某次循环;


常见转义字符

\t 空格 \n 换行


3.java方法

面试拓展:【值传递和引用传递】

1.值传递是指:仅将实参的值传给形参,在函数中改变形参的值,不影响实参。实参和形参在内存中的位置不同;

2.引用传递是指:实参传递给参数的地址,在函数中改变形参的值,将同时改变实参。实参和形参指向内存中同一位置;

3.java中通常使用值传递。

可变参数 (int... numbers)

一个函数中只能指定一个可变参数,且必须是最后一个参数。

递归

  • 递归头:什么时候不调用自身方法(边界条件);

  • 递归体:什么时候需要调用自身方法;

4.数组

4.1数组的声明和创建

int[] nums=new int[10];   //创建10个数组空间

静态初始化

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

动态初始化

int[] nums=new [10]; nums[0]=1 ......;

4.2多维数组

int[][] nums1=new int[2][3];  //定义了2行3列的二维数组
int[][] numus2={{1,2},{1,2},{1,2}}    //初始化

4.3Arrays类

java中利用Arrays类提供了对数组的输出,排序等基础方法;

4.4冒泡排序

//每次循环将最值放置在尾部
int[] nums={2,5,7,3,4,1,8};
//外层控制循环次数   N-1次;
for(int i=0;i<nums.length-1;i++)
{
    //内层实现数值交换;
    for(int j=0;j<nums.length-i-1;j++){
        if(nums[j]<nums[j+1]){
            int temp=nums[j];
            nums[j]=nums[j+1];
            nums[j+1]=temp;
        }
    }
}
System.out.println(Arrays.toString(nums));

4.5稀疏数组

int[][] array=new int[11][11];
        array[1][2]=1;
        array[2][3]=2;
        //记录有效数字的个数
        int sum=0;
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                if(array[i][j]!=0)
                {
                    sum++;
                }
            }
        }
        System.out.println("有效数字的个数为:"+sum);
        //创建稀疏数组(sum+1行3列的数组)
        int[][] array2=new int[sum+1][3];  
        array2[0][0]=11;
        array2[0][1]=11;
        array2[0][2]=sum;
        int count=0;
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                if(array[i][j]!=0)
                {
                    count++;
                    //记录有效数字的行号、列号和值
                    array2[count][0]=i;
                    array2[count][1]=j;
                    array2[count][2]=array[i][j];
                }
            }
        }
        //输出稀疏数组
        for (int i = 0; i < array2.length; i++) {
            for (int j = 0; j < array2[i].length; j++) {
                System.out.print(array2[i][j]+" ");
            }
            System.out.println();
        }
        System.out.println("========================");
        //由稀疏数组转变为普通数组
        int[][] array3=new int[array2[0][0]][array2[0][1]];
        for (int i = 1; i < array2.length; i++) {
                //根据稀疏数组记录的行列号直接赋值
                array3[array2[i][0]][array2[i][1]]=array2[i][2];
​
        }
        //输出普通数组
        for (int i = 0; i < array3.length; i++) {
            for(int j=0;j<array3[i].length;j++){
                System.out.print(array3[i][j]+" ");
            }
            System.out.println();
        }

5面向对象编程

以类的方式组织代码,以对象的组织封装数据

5.1类的调用

  • 静态方法调用(定义方法时加static) 》》》 类名.方法名();

  • 非静态方法调用 先创建对象,然后对象名.方法();

5.2构造器

构造器用来实例化初始值

  • 定义有参构造器时,必须显式无参构造器;

  • 【快捷键】alt+insert 自动生成构造器;

5.3三大特性

封装

封装数据,实现高内聚低耦合;


继承 extends

  • java中只能有单继承(一个子类只能有一个父类);

  • Object类为所有类的父类;

  • 【快捷键】ctrl+H 打开继承树;

  • 子类方法中调用父类的属性或方法,可使用Super;

  • 子类构造器调用父类无参构造器时,super()须在首行;

  • super和this不能同时调用构造器。

  • 只能重写非静态方法;


多态

//多态只有方法的多态
//父类的引用指向子类,此时对象f只能调用父类中存在的方法
Father  f=new Son();  
Son   s=new Son();
f.run();
s.run();
//实现了run方法的重写,此时两个都执行子类重写后的方法

5.4static关键字详解

用static修饰属性或方法时,属性和方法在类创建时产生

  • 可直接用类名.属性,调用类变量;

  • 静态方法中不能调用非静态方法;

  • static{
        //静态代码块:首先执行,且只执行一次
        //可用于赋值初始值
    }

5.5抽象类 abstract

抽象方法必须在抽象类中,但抽象类中可以有普通方法;


5.6接口 interface

  • 接口可以多继承;

  • 接口中定义的属性,默认为常量 public static final;

  • 接口中的方法,默认为public static;

  • 设置实现类的关键字:implements

5.7内部类

成员内部类

//在类中创建public类,则为内部类
//内部类可以访问所属外部类的私有方法和私有属性
//内部类的创建需要依靠外部类对象
Outer o=new Outer();
o.Inner in=o.new Inner();

静态内部类

定义staitc修饰的内部类;

局部内部类

在方法中定义内部类;

匿名内部类

没有名字初始化类;

6异常机制

6.1异常处理机制

try{
    //捕获异常
}catch(Exception e){
    //Throwable>Error=Exception  异常的类型
}finally{
    //无论是否异常,都会执行
    //添加finally语句可以释放占用的资源
}

【快捷键】ctrl+alt+T 自动包裹代码

6.2自定义异常

1.自定义异常类,继承Exception类;

2.在可能出现异常的方法中throws异常;

3.在mian方法中捕获异常(try-catch);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值