宋新晨

博客园 首页 新随笔 联系 订阅 管理
  8 随笔 :: 0 文章 :: 0 评论 :: 1222 阅读

Java基础

JVM:java虚拟机

java可移植性

卸载JDK

1.删除Java的安装目录

2.删除Java_HOME

3.删除path下关于Java的目录

4.java-version

安装JDK

下载,安装

记住安装的路径

配置环境变量

->配置环境变量

->配置path变量

检查是否安装成功

->打开cmd

->java -version

->打印出信息就成功了

下载一个notepad++

HelloWorld

新建一个文件夹来存放代码

新建一个Java文件

1.后缀为.java

2.Hello.java

代码

public class Hello{                           \\class   类
	public static void main(String[] args){   \\main  方法
		System.out.print("Hello,World!");    
	}
}

用Dos命令,在该文件夹下编译运行java文件,会生成一个class文件

命令为javac 文件名.java (中间有个空格)

运行class文件 java 文件名

image-20220108205426808

注意:

1.注意大小写

2.注意中英文

3.文件名和类名要一致,并且首字母大写

4.符号用英文

Java程序运行机制

编译型:一次全部翻译,发生改动,需要全部重新翻译(操作系统,如C/C++,速度要求不高的网页Java,把Java文件变成class文件过程)

解释性:一句一句翻译,发生改动,只需改变一部分

image-20220108214444947

Java既有编译型的特征,也有解释型的特征

psvm : main方法的快捷键

sout :输出函数的快捷键

在IDE中要修改编程结构

注释、标识符、关键字

注释:

单行注释: //

多行注释: /* */

文档注释: /** */

/**
*@Description  Hellowrold
*@Author  sxc
*/

可以建一个空项目,在其中写代码,要新建一个module(模块),选择Java,建造一个Java文件,再new一个class文件

project structure中修改当前Java的版本,

标识符

类名,变量名,方法名

关键字

image-20220111161845654

Java中标识符可以用$开头,特殊符号不能出现在变量名中

数据类型

强类型语言对变量要求严格,所有变量必须要先定义再使用

基本数据类型

int long byte(一字节) short(2字节)

boolean float double char

long类型要在数字后加L

float类型要在数字后加F

这些都定义在类integer中

整数扩展:进制 二进制 0b 十进制 八进制 0 十六进制 0x

int i=10int i1=010;
int i2=0x10;

浮点数扩展: 银行业务

//float 有限  离散  含入误差  大约   接近但不等于 
//double
//最好完全不使用浮点数比较
//银行业务用 BigDecimal 数学工具类
float f=0.1f;
double d=1.0/10;
System.out.println(f==d);//false  f: 0.1  d:0.1

float d=2313131231341423344f;
float d2=d+1;

System.out.println(d==d2);//true

字符扩展

char c1='a';
char c2='中';

System.out.println(c1);       //a
System.out.println((int)c1);  //97
System.out.println(c2);       //中
System.out.println((int)c2);  //20013
//所有的字符本质都是数字
//编码  Unicode

char c3='\u0061';             //转义字符
System.out.println(c3);       //a

字符串

String sa=new String(original "hello world");
String sb=new String(original "hello world");
System.out.println(sa=sb);   //flase

String sc= "hello world";
String sd= "hello world";
System.out.println(sc=sd);   //true
//对象   从内存分析

  1. 单引号引的数据 是char类型的 单引号只能引一个字符(表示单个字符)
  2. 双引号引的数据 是String类型的 而双引号可以引0个及其以上(引用字符串)

布尔扩展

boolean flag=true;

引用数据类型:

类:String是类

接口

数组

# 类型转换

int i=128;
byte b=(byte)i;//强制转换,但是溢出了
System.out.println(b);//-128
//内存溢出
//由低到高  自动转换

注意点:

1.不能把布尔值进行转换

2.不能把对象类型转换为不相干的类型

3.在把高容量转换到低容量的时候,强制转换

4.转换时可能存在内存溢出,或精度问题//大致于C语言接近

jdk7后的新特性,数字之间可以用下划线分割

int money =10_0000_0000;
int year=20;
int total=money*year;//溢出
long total2=money*year;//计算时为int型,数值溢出,然后再转换为long型
long total3=money*((long)year);//提前转换,避免溢出

变量

每个变量都要声明其类型

作用域

在类里面可以写主方法和其它方法

1.局部变量在方法里面

2.实例变量在类里面,方法外面,所以实例变量作用域大

public class Demo{
	String name;//
    int age;    //实例变量,不初始化,会变成默认值
    //布尔值默认为false
    //除了基本类型,其余的都是null
    public static void main(String[] args)
    {
        Demo demo=new Demo();
        System.out.println(demo.age);//0
        
        //类变量
      
}

}
3.类变量//static
static double salary=double

常量

final 常量名=常量值;

static final double PI=3.14;//类常量,任何地方都可以直接调用

变量命名规则

image-20220112212819130

运算符

image-20220112212942943

instanceof后面学

包机制就是在在文件夹下new一个package

可以把class文件拷贝到包里,类似一个文件夹

//Ctrl+D    :复制当前行到下一行

自增自减运算符

int b=a++;//先b=a;  再a=a+1;
int b=++a;//a=a+1;  b=a;
<<     //   *2
>>     //   /2

逻辑运算符

&&  ||  !

位运算符

&  |  ~   ^

面试:

左移2x8 -> 2x2x2x2-> 2<<3

位运算效率极高

字符串连接符

包机制

new package

(类似于命名空间,不同的包存储相同的名字)

一般用公司域名倒置作为包名;www.baidu.com com.baidu.www

image-20220116191050969

新建文件夹com.baidu.www

会生成3个嵌套文件夹com baidu www

image-20220116191318894

ide自动加的

包类似于头文件

用包来导入

import

image-20220116191744083

JavaDoc

image-20220116192140730

文档注释

加在类上就是类的注释

image-20220116202504803

这里比较不同的文档

image-20220116211249639

前加上cmd空格

跳转到命令行

image-20220116211705367

javadoc是一个新的命令,doc.java是文件名, 中间的部分是避免中文字符无法识别产生乱码

  • -encoding UTF-8:表示设置编码。
  • -charset UTF-8:也表示设置编码。

从文件夹和文件名上可以看出,我命名上不太考究,文件应名为Doc

image-20220116212159753

这就是生成的文档

从IDEA生成文档

img

img

Java流程控制

用户交互Scanner

image-20220116214359736

package com.sxc.scanner;

import java.util.Scanner;

public class demo01 {
    public static void main(String[] args) {
        //创建一个扫描器对象,用于接收键盘数据
        Scanner scanner=new Scanner(System.in);

        System.out.println("使用next方式接收");

        //判断用户有没有输入字符串
        if(scanner.hasNext()){
            String str=scanner.next();
            System.out.println("输出的内容为"+str);
        }
        if(scanner.hasNextLine()){
            String str=scanner.nextLine();
            System.out.println("输出的内容为"+str);
        }
        //凡是属于I/O流的类,不关掉会一直占用资源
        scanner.close();//关掉scanner
    }
}

image-20220117184029336

顺序结构

image-20220117195729617

选择结构

image-20220117201603027

image-20220117202240766

image-20220117211748990

case里的语句可以是字符串,字符的本质还是数字

反编译------java-class(字节码文件)-------反编译(IDEA)

image-20220117212716567

项目编译后输出的路径,打开后,把输出的文件通过文件夹复制到源代码的文件夹下

image-20220117212859191

在编译器中查看编译后的源码

循环结构

image-20220117213150686

image-20220117213916409

break&continue

练习

报错

Error running ...: No jdk for module

  1. 找到File>Project Structure…>Modules。

  2. 可以看到右边“Source“目录下面为空。点击”+“号,选择自己的项目或者模块

    在这里插入图片描述

    把自己的项目或者模块添加进来

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8VA42mgp-1599476193749)(F:\Note\images\image-20200907185020946.png)]

  3. 在Dependencies中添加JDK

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1268jSa4-1599476193752)(F:\Note\images\image-20200907185332531.png)]

    点击Apply,OK即可

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Brw6ntUB-1599476193754)(F:\Note\images\image-20200907185454625.png)]

报错为:module jdk is not define

java方法(函数)

何谓方法

image-20220210230951104

system是类,out是对象,println()是方法

方法命名规则:首字母小写,然后驼峰规则

image-20220210232417182

static方法一般称作静态方法,静态方法不依赖于任何对象就可以进行访问。

方法的定义及调用

image-20220211003622819

调用方法

image-20220211003656010

值传递和引用传递

值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。. 引用传递(pass by reference)是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。

方法重载(必须实参表不同)

image-20220211004114576

命令行传参

image-20220211004937685

传给主函数(方法)

image-20220211005110614

运行一个class文件需要知道它的包路径,编译时直接编译就好了

可变参数

image-20220211005705857

image-20220211005953903

递归

适合少量层次的计算

image-20220211165101029

一点理解

image-20220211005758439

调用方法,需要先声明一个对象

数组

数组概述

image-20220211012016620

下标从0开始

数组声明创建

image-20220211012838111

image-20220211013735062

未初始化的元素默认值为0

int []num=new int[10];//声明创建一起做

数组的四个特点

image-20220211013626935

内存分析

image-20220211014021561

三种初始化

image-20220211014813732

对象(数组)都存放在堆中

下标

image-20220211015252953

数组的使用

for-each循环

这是特殊的写法

数组名.for

image-20220211015820984

多维数组

image-20220211114619774

数组做方法参数

数组做返回值

image-20220211020146828

多维数组

image-20220211020311940

image-20220211020502614

image-20220211020542439

Arrays类

image-20220211020633769

util工具包

image-20220211021038747

用这个类来操作数组

学习一个新类

image-20220211020821695

点进这个包就可以了

或者查看帮助文档

Java 8 中文版 - 在线API中文手册 - 码工具 (matools.com)

在线API文档 (oschina.net)

冒泡排序

共有八大排序

image-20220211112304743

image-20220211113240519

用一个布尔值简单的优化

稀疏数组(压缩)

简介

image-20220211113543973

image-20220211113632342

image-20220211113706923

创建

image-20220211115137374

输出

image-20220211115247387

还原

image-20220211115705207

可以在第一步和第二步之间先用fill填充

面向对象编程OOP

初识面向对象

image-20220211120257499

image-20220211161836553

方法回顾和加深

image-20220211165622152

静态:用static修饰,可以直接调用

非静态:调用时要new一个对象

image-20220211170324479

image-20220211170337854

image-20220211170957927

值传递

image-20220211171410497

不会改变实参

引用传递(Java没有指针)

image-20220211172321301

类似于全局变量,person是一个对象,指向一个类,是一个具体的人,可以改变。

一个类里面只能有一个 public class

对象的创建分析

image-20220211204404748

image-20220211205214877

image-20220211205110158

构造器

image-20220211205754665

out文件下有所有文件的输出

image-20220211205942358

显式定义构造器

image-20220211210434555

this,很重要

当你定义了有参构造,无参构造必须显式定义

alt+insert自动生成构造器

image-20220211213211821

简单小结

image-20220211213630383

动态的行为

面向对象三大特性

封装

image-20220211213721209

image-20220211214024028

get和set用来修改和展示私有属性

image-20220211214306595

image-20220211214553808

继承

image-20220211214810209

多继承是指继承多个

image-20220211220641217

私有属性不能继承过去

default是默认的

ctrl+H 打开继承‘树’

image-20220211221034999

object类

image-20220211221112540

super

与this形成对比,

image-20220211221851274

调用父类的属性

image-20220211222023540

super无法调用私有类

image-20220211222220652

this()调用当前类的默认构造器

父类只有有参构造器时,子类不能无参继承

image-20220211222347879

image-20220211222540919

image-20220211222644356

方法重写

静态

image-20220211223944845

image-20220211224045777

image-20220211224546632

image-20220211224824792

正确的写法,没有static

image-20220211224946610

alt+insert 可以在子类内自动生成重写

image-20220211225024088

子类重新写了父类的方法,静态static就是方法固定住了,会导致无法重写

多态

image-20220211225451362

image-20220211230540164

image-20220211230610594

强转

image-20220211230847036

不能重写的情况

static方法不能重写

final常量 不能重写

private 方法不能重写

instanceof和类型转换

image-20220211232624280

image-20220211232850908

image-20220211232948137

image-20220211233028444

A instanceof B ,A与B没有继承的关系会报错,

A没有引用B,则false

返回true的情况

object->父类->子类 这样的继承关系

这三种任意类型 A 引用 子类时,A与这三种类型都返回true

类型之间的转换

低类型转到高类型:子类转换为父类,可能会丢失一些方法

image-20220211234333807

高转低需要强转

image-20220211234446099

把父类类型强转为子类类型,然后父类就可以使用子类的方法了

image-20220212121511653

static关键字详解

image-20220212121844057

静态变量可以使用类名来调用

image-20220212122101988

静态方法不能调用非静态方法

非静态方法可以调用静态方法

image-20220212122500876

static{}静态代码块

创建一个新对象时,先执行静态代码块,再执行匿名代码块,再构造器

第二次创建对象时,不用执行静态代码快(只执行一次)

image-20220212122823947

将一个方法导入

抽象类和接口

抽象类

image-20220212123120356

image-20220212161326714

子类必须重写抽象父类的所有的方法

image-20220212161723371

接口(可以实现多继承)

image-20220212161941032

image-20220212162025019

image-20220212162040898

把class改成 interface

image-20220212162444226

利用接口实现多继承

实现类命名规则 接口名+Impl implements关键字

image-20220212162650548

image-20220212163147371

接口中的变量默认为public static final

内部类和oop实战

image-20220212163359029

image-20220212163818977

image-20220212163947382

局部内部类

定义在方法里

image-20220212164234904

匿名对象类

image-20220212164348827

接口的匿名内部类

image-20220212164453094

异常机制

什么是异常

image-20220212164718640

image-20220212170742150

异常体系结构

image-20220212170832851

image-20220212171001671

image-20220212171049916

Java异常处理机制

image-20220212171725344

image-20220212210121161

处理异常

image-20220212171738484

try尝试寻找异常

catch抓住异常 catch后括号内规定要抓取的异常类型

catch可以写多个

image-20220212172931808

finally结束工作

image-20220212172259520

image-20220212172313628

image-20220212172342536

image-20220212172356150

finally可以用于关闭io流、资源等

CTRL+alt+T 选中代码包围住,放到一个代码块(if,for, try)里

主动抛出异常

image-20220212173351326

image-20220212173605085

在方法里抛出异常,虽然没有让0做分母,但是依旧会报告异常

自定义异常

通过继承Exception来自定义异常

image-20220212174432088

image-20220212211010962

image-20220212211055395

总结

有了try catch 就可以让出现异常的程序不停止,继续执行下去

image-20220212211138993

posted on   宋新晨  阅读(65)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示