• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
honggang123
博客园    首页    新随笔    联系   管理    订阅  订阅
java 基础学习笔记
1. 最流行编程语言之一,在国内最为==广泛==的编程语言 2. 可移植性,安全,性能好 3. 开发社区完善,功能最为丰富

阶段一

一 Java 背景概述

1 背景知识

  1. java 是美国sun 公司 19995 推出的高级编程语言
  2. java 早期称Oak(橡树),后期改名java
  3. java之父: 詹姆斯*高斯林
  4. 2009 年,sun公司被Oracle(甲骨文)公司收购

2 流行原因

  1. 最流行编程语言之一,在国内最为广泛的编程语言
  2. 可移植性,安全,性能好
  3. 开发社区完善,功能最为丰富

3 Java 技术体系

image-20221116224602470

ps: 在本次课程(黑马),先学习标准版-- java 核心和基础,后面学习企业版

二 Java 快速入门

1 Java 环境配置(idea,jdk)

  1. 官网下载
  2. 网盘(idea,jdk)资料
  3. 在安装文件中javac.exe和java.exe介绍,java.exe是执行工具,javac.exe是编译工具(对程序进行翻译)
  4. 命令行窗口常用命令 dir - 查看当前路径; cd; cls - 清屏;

2 java 入门程序-helloworld

1 java 开发的三个步骤

编写代码,编译代码,运行代码

注意:代码文件名全英文,首字母大写,满足驼峰命名 ,源文件必须 .java

2 编写程序

第一个java程序

public class HelloWorld {
	public static void main(String[] args) {
		System.out.printIn('HelloWorld!');
	}
}

3 命令行窗口编译与运行

  1. 编译 javac 文件名.java
  2. 运行java 类名 (是自己定义的类名)

注意:

  1. 勾选扩展名
  2. 使用双引号
  3. System.out.println 中 l 是L 的小写
  4. 第一次运行时,可能不能直接在命令窗口运行javac,可以在安装文件bin中打开 运行
  5. 文件名称与类名称必须一致
  6. jdk11开始可以直接运行源代码文件 (xxx:Java HelloWorld.java)

补充知识:

  1. 编程语言发展历程 (机器语言- 汇编语言-高级语言)

  2. jdk的组成:

    image-20221117000323114

  3. java跨平台(一次编译,处处可用;程序只需要开发一次,就可以在安装了JVM的系统平台运行)

  4. 注意配置Path环境变量

    image-20221117001311529

    image-20221117001531441

三 IDEA开发工具的使用

1 idea 开发工具的安装

参考百度网盘

2 idea编写第一个程序

1 idea项目结构

image-20221117204258913

​ 如:

image-20221117204323316

2 idea 使用步骤

  1. 创建Project空工程

    配置工程所需的环境:image-20221118214107688

    配置工程路径:

    image-20221118214309540

  2. 创建Module模块

    image-20221118214800179

    image-20221118214959497

  3. 创建Package包

    鼠标右键的点击:

    image-20221118215324028

    包的命名规范:全部英文小写 网站反着名命名 第三部是建议功能名称

    image-20221118215428299

  4. 创建class类

    image-20221118215853052

    直接显示:

    image-20221118215935558

  5. 在类中编写代码

    package com.xxx.hello;
    
    public class HelloWorld {
        public static void main(String[] args) { //键入main,回车可以快速生成
            System.out.println("Hello World !"); //键入sout,回车可以快速生成
        }
    }
    
  6. 完成编译运行

  7. 总结

    image-20221118220930797

    3 idea 设置主题与字体

    image-20221118221204652

4 idea 快捷键+导入(删除)模块

image-20221118221733243

​ 导入模块

  1. 关联导入(在存在的模块导入,用.mi文件)(缺点:路径不会改变)
  2. 新建一个模块,再复制粘贴(建议)

删除模块

在项目中,点击image-20221118223406798

然后在所属文件中,删除文件,(如果重建相同名称模块有问题,则再重新打开项目)

打开工程(还是点击这个”有小黑点的文件“)

image-20221118223822099

关闭工程

image-20221118223901173

5 vscode与idea快捷键修改及个人快捷键备忘

阶段二

1 java 基础语法

1 注释的快捷键

image-20221118230231198

/*
* 这是文档注释
*/

2 java中的进制数输入

image-20221118231845172

3 java中的数据类型

image-20221118232019862

还有:String 等

4 标识符及命名规范

image-20221118232452203

2 类型转换

1 自动类型转换

范围大的变量,可以直接赋值给范围大的遍变量

image-20221118233313845

2 强制类型转换

image-20221118234629881

image-20221118234435914

   double a = 12.2;
   int b = (int) a;
   System.out.println(b); // 12

补充image-20221119003631455

3 运算符

注意:

算数运算符:

image-20221118235416312

关系运算符:

image-20221119000737448

逻辑运算符:

image-20221119000934382

+连接符(注意:与‘a',a连接情况)

int a = 5;
System.out.println("xxx"+'a'+a);    // xxxa5 
System.out.println('a'+"xxx");      // axxx
System.out.println("xxx"+'a');      // xxxa
System.out.println('a'+a);          // 102

4案例:键盘导入- Scanner

  1. 导包(多看api)

  2. 使用

    import java.util.Scanner;
    public class HelloWorld {
        public static void main(String[] args) {
           Scanner sn = new Scanner(System.in);
    
            System.out.println("name is ");
            // 等待键盘输入,才会执行下一行
            String name = sn.next();
            System.out.println("age is ");
            int age = sn.nextInt();
    
            System.out.println("name is "+name+"/t age is "+age);
        }
    }
    

3 程序流程控制

image-20221119103436625

switch的使用:

注意:image-20221119104541121

image-20221119104909474

String weekday = "周二";
switch (weekday){
    case "周一":
        System.out.println("one");
        break;
    case "周二":
        System.out.println("two");
        break;
    case "周三":
        System.out.println("thr");
        break;
    default:
        System.out.println("error");
}

案例:打印乘法表

int i,j;
for(i=1;i<=9;i++) {
    for(j=1;j<=i;j++){
        System.out.print(j+"*"+i+"="+(i*j)+"/t");
    }
    System.out.println("");
}

1*1=1	
1*2=2	2*2=4	
1*3=3	2*3=6	3*3=9	
1*4=4	2*4=8	3*4=12	4*4=16	
1*5=5	2*5=10	3*5=15	4*5=20	5*5=25	
1*6=6	2*6=12	3*6=18	4*6=24	5*6=30	6*6=36	
1*7=7	2*7=14	3*7=21	4*7=28	5*7=35	6*7=42	7*7=49	
1*8=8	2*8=16	3*8=24	4*8=32	5*8=40	6*8=48	7*8=56	8*8=64	
1*9=9	2*9=18	3*9=27	4*9=36	5*9=45	6*9=54	7*9=63	8*9=72	9*9=81	

案例:打印水仙花

for (int i = 100; i < 999; i++) {
    int ge = i % 10;
    int shi = i / 10 % 10;
    int bai = i / 100;

    if ((ge * ge * ge + shi * shi * shi + bai * bai * bai) == i) {
        System.out.print(i + "/t");
    }
}

死循环

image-20221119131812026

案例: Random随机数-猜数字

注意:随机数的范围

package com.xxx.hello;

import java.util.Random;
import java.util.Scanner;

public class HelloWorld {
    public static void main(String[] args) {
        // 随机数0-9
        Random r = new Random();
        int data = r.nextInt(10); // 不包含10
        System.out.println(data);

        // 65 - 91 随机数
        for(int j =0;j<30;j++) {
            int data2 = r.nextInt(27)+65;
            System.out.print(data2+"/t");
        }
    }
}
// 猜数字游戏案例
Random r = new Random();
Scanner sn = new Scanner(System.in);
while (true) {
    System.out.print("请输入数字:");
    int userInputNum = sn.nextInt();
    int randomNum = r.nextInt(10)+1; // 1 - 10 之间
    if(userInputNum < randomNum){
        System.out.println("猜小了");
    }else if(userInputNum > randomNum) {
        System.out.println("猜大了");
    }else {
        System.out.println("对了!😀朋友去买单吧!");
        break;
    }
}

/*
int randomNum = r.nextInt(10)+1; // 1 - 10 之间
代替写法: r.nextInt(1,11) 包含前面不包含后面
*/

4 数组

1 数组的定义

静态初始化数组

image-20221119140308154

操作:

// 定义数组
int[] arr={12,22,33};
// 赋值
arr[1] = 123111;
// 取值
System.out.println(arr[1]);
// 访问数组长度
System.out.println(arr.length);

注意image-20221119141100322

动态初始化数组(指定数组长度,后期赋值)

image-20221119141526188

image-20221119153600415

示例:

// 元素默认值
boolean[] arr2 = new boolean[20];
System.out.println(arr2[19]); // false

2遍历数组-案例:

案例 - 求和

int[] arr = {16, 26, 100, 89, 12};
int sum = 0;
for (int i = 0; i < arr.length; i++) {
    sum += arr[i];
}
System.out.println("sum is "+sum);

注意:image-20221119155654944

案例 - 冒泡排序

// 案例 冒泡排序
int [] peopleCode = {22,33,12,12,3333,3,22,67,2,13};
int temp = 0;
for(int i=0;i<peopleCode.length;i++) {
    for(int j=0; j<i+1;j++) {
        if(peopleCode[i]<peopleCode[j]){
            temp = peopleCode[i];
            peopleCode[i]=peopleCode[j];
            peopleCode[j]=temp;
        }
    }
}
for(int k=0; k<peopleCode.length; k++)
    System.out.print(peopleCode[k]+" ");

3 Debug 工具的使用

image-20221119163446103

4 补充:java的内存分配简述

image-20221119164245856

5 方法

5.1 方法定义的格式

image-20221119165423517

方法定义的注意事项:

image-20221119184553643

image-20221119185601223

5.2 方法案例

使用方法,传递数组求最值:

package com.xxx.hello;

import java.util.Scanner;

public class FunStudy {
    public static void main(String[] args) {
//        Scanner sn = new Scanner(System.in);
//        int n = sn.nextInt();
//        check(n);

        int [] arrNum = {12,23,61233,12,32,663};
        System.out.println(getMax(arrNum));

//        int re = sum(n);
//        System.out.println(re);
    }
    // 求和
    public static int sum(int n) {
        int re = 0;
        for(int i =1;i<=n;i++) {
            re += i;
        }
        return re;
    }
    // 判断奇数 偶数
    public static void check(int n) {
        if(n%2 == 0) {
            System.out.println(n+"是偶数");
        }else {
            System.out.println(n+"是奇数");
        }
    }
    // 求最值
    public static int getMax(int[] arr) {
        int max =arr[0];
        for(int i=0;i<arr.length;i++) {
            if(max<arr[i]){
                max = arr[i];
            }
        }
        return max;
    }
    
//    public static void main(String[] args) {
//        int re = 0;
//        re = sum(10,121);
//        System.out.println(re);
//    }
//    public  static int sum(int a, int b) {
//        int c = a+ b;
//        return c;
//    }
}

方法在内存存放的位置:

image-20221119192651396

5.3 方法类型传递机制

基本类型的参数传递:值传递

值传递

示例:

package com.xxx.hello;

public class MethodStudy {
    public static void main(String[] args) {
        int a= 10;
        change(a);
        System.out.println(a); // 10
    }
    public static void change(int a) {
        System.out.println(a); // 10
        a=20;
        System.out.println(a); // 20
    }
}

效果:

image-20221119193749100

引用类型的参数传递:值传递

示例:

package com.xxx.hello;

public class MethodStudy {
    public static void main(String[] args) {
        int[] aaa= {10,12,11};
        change(aaa);
        System.out.println(aaa[1]); //222
    }
    public static void change(int[] a) {
        System.out.println(a[1]); // 12
        a[1]=222;
        System.out.println(a[1]); // 222
    }
}

效果:

image-20221119194902561

在栈内存中放的变量地址,指向相同的堆中的值;当值变化时,地址则没有变化。

总结

image-20221119194934097

5.4 方法重载与return关键字

  1. 方法重载

    示例:

    package com.xxx.hello;
    
    public class FireSuc {
        public static void main(String[] args) {
    
            fire();
            fire("y国");
            fire("d国",16);
        }
        public static void fire(){
    //        System.out.println("向米国发射1枚炮弹");
            fire("米国");
        }
        public static void fire(String location) {
    //        System.out.println("向"+location+"发射1枚炮弹");
            fire(location,1);
        }
        public static void fire(String location, int num) {
            System.out.println("向"+location+"发射"+num+"枚炮弹");
        }
    }
    
    

    重载方法识别技巧:(1. 方法名称相同 2. 形参不同)

    image-20221119205442642

  2. return关键字:跳出当前方法,或结束当前方法的执行(在是void的情况下,没有返回值)

    示例:除法的式子中,分母不能为”0“,return 在判断下执行

    // return 的作用
    public static void main(String[] args) {
        result(12,3);
    }
    public static void result(int a, int b){
        if(b == 0){
            System.out.println("input error !");
            return; // 跳出当前方法
        }
        int c = a/b;
        System.out.println("result is "+c);
    }
    

5.5 案例 - 双色球中奖

  1. 示例:

    image-20221120225611621

    package com.xxx.hello;
    
    import java.util.Random;
    
    public class Ex3 {
        public static void main(String[] args) {
            // 案例 - 双色球中奖
    
            int[] num = createNumber();
            int[] redNum = new int[6];
            for(int i=0; i<6;i++) {
                redNum[i] = num[i];
            }
            for(int i=0; i<num.length; i++){
                System.out.print(num[i]+"/t");
            }
            int[] myNum = {24,20,1,3,4,5,7};
            int redCount = 0;
            int blueCount =0;
            for(int i=0; i<6; i++) {
                boolean isRedOk = check(redNum,myNum[i]);
                if(isRedOk)
                    redCount++;
            }
            if(num[6] == myNum[6]) {
                blueCount= 1;
            }
            System.out.println("");
            System.out.println("中奖个数:"+redCount+"/t"+blueCount);
            String str = redCount +""+blueCount;
            switch (str){
                case "01":
                    System.out.println("六等奖 5元");
                    break;
                case "11":
                    System.out.println("六等奖 5元");
                    break;
                case "21":
                    System.out.println("五等奖 10元");
                    break;
                case "31":
                    System.out.println("五等奖 10元");
                    break;
                case "40":
                    System.out.println("五等奖 10元");
                    break;
                case "41":
                    System.out.println("四等奖 200元");
                    break;
                case "50":
                    System.out.println("三等奖 3000元");
                    break;
                case "51":
                    System.out.println("三等奖 3000元");
                    break;
                case "60":
                    System.out.println("二等奖 500万元");
                    break;
                case "61":
                    System.out.println("一等奖 1000万元");
                    break;
                default:
                    System.out.println("下次一定");
            }
    
        }
        public static int[] createNumber() {
            Random r = new Random();
            int[] redNumber = new int[7];
            for(int i=0;i<6;) {
                int num = r.nextInt(33)+1;
                boolean isCheck = check(redNumber,num);
                if(!isCheck) {
                    redNumber[i] = num;
                    i++;
                }
            }
            redNumber[6] = r.nextInt(16)+1;
            return redNumber;
        }
        public static boolean check(int[] arr,int num) {
            for(int i =0;i<arr.length;i++){
                if(num==arr[i]){
                    return true;
                }
            }
            return false;
        }
    }
    

阶段三

1 面向对象

1.1 设计对象并使用

1.1.1 类的定义和对象的使用

概念:

image-20221125135633210

定义类

image-20221125130907450

获取对象的类

image-20221125130923118

使用类

image-20221125131959304

示例代码:

Phone.java文件:

package com.xxx.test.obj;

public class Phone {
    // 属性
    String brand;
    double price;

    // 行为
    public void call() {
        System.out.println("手机在大电话");
    }
    public void playGame() {
        System.out.println("手机在玩游戏");
    }
}

PhoneTest.java文件:

package com.xxx.test.obj;

public class PhoneTest {
    public static void main(String[] args) {
        // 创建对象
        Phone p = new Phone();
        // 赋值
        p.brand = "小米";
        p.price = 1266;
        // 获取对象里面的值
        System.out.println(p.brand);
        System.out.println(p.price);
        // 获取对象的方法
        p.call();
        p.playGame(); 
    }
}

效果:

image-20221125140129835

1.1.2 类的几个补充事项

image-20221125140631700

注意:

image-20221125140940677

image-20221125140953297

image-20221125141025755

对象成员变量的默认值:

image-20221125141147148

1.2 封装(重要)

image-20221125145516749

1.2.1 封装思想 -如:

人画园

人对象:人的名字,人的年龄等

园对象:园的半径,画圆行为等

ps:问什么画圆行为在园对象中?因为画圆,需要半径。

面向对象编程中,sun 公司提供许许多多的方法,在我们需要使用的,查找即可,不记不背,知道即可;

可以下载:JDK API 1.8.0 中文版

封装思想的好处

image-20221125152124498

1.2.2 private 关键字

image-20221125153010148

image-20221125154051545

示例:

Friend.java

package com.xxx.test.obj2;

public class Friend {
    private String uname;
    private int age;
    String six;
    String denger;

    // 对每个私有化成员变量,都要提供set和get方法
    // set : 给成员变量赋值
    // get :对外提供成员变量的值

    public void setUname(String v){
        uname=v;
    }
    public String getUname(){
        return uname;
    }

    public void setAge(int v) {
        if(v >= 18 && v <= 50) {
            age = v;
        }else {
            System.out.println("非法数据");
        }
    }
    public int getAge(){
        return age;
    }
    public void eat(){
        System.out.println("干饭人");
    }
}

FriendTest.java

package com.xxx.test.obj2;

public class FriendTest {
    public static void main(String[] args) {

        Friend g1 = new Friend();
        g1.setUname("如玉");
        g1.setAge(-18);
        System.out.println(g1.getUname() + "/t" + g1.getAge());

        Friend g2 = new Friend();
        g2.setUname("莉莉丝");
        g2.setAge(20);
        System.out.println(g2.getUname() + "/t" + g2.getAge());

    }
}

效果:

image-20221125155441009

总结

image-20221125160131090

1.3 this关键字

区分局部变量与全局变量

image-20221125160421413

package com.xxx.test.obj3;

public class Friend {
    private int age;

    public void setAge(int age){
        this.age = age;
    }
    public int getAge(){
        return this.age;
    }
}
package com.xxx.test.obj3;

public class FriendTest {
    public static void main(String[] args) {
        Friend g1 = new Friend();
        g1.setAge(18);
        System.out.println(g1.getAge());
    }
}

1.4 构造方法

概述

image-20221125161947139

1.4.1 构造方法的格式

image-20221125163242287

image-20221125163309504

1.4.2 构造方法的作用

image-20221125163404294

1.4.3 构造方法的注意事项

image-20221125163105811

示例

package com.xxx.test.obj4;

public class Friend {
    private String uname;
    private int age;

    // 如果没有写任何的构造方法
    // 虚拟机会给添加一个空参构造方法
    // 同时,如果写了有参构造方法
    // 在测试类中,创建对象,空参调用,报错
    public Friend(){
        System.out.println("执行,呵呵");
    }
    public Friend(String uname,int age){
        this.uname = uname;
        this.age = age;
    }
    public String getUname(){
        return this.uname;
    }
    public int getAge(){
        return this.age;
    }
}
package com.xxx.test.obj4;

public class FriendTest {
    public static void main(String[] args) {
        Friend g1 = new Friend("如玉",18);
//        Friend g1 = new Friend();
        System.out.println(g1.getUname()+"/t"+g1.getAge());
    }
}

1.5 标准JavaBean类

image-20221125182534337

快捷键生成JavaBean模板

  1. alt+insert 或者 alt+fn+insert

    image-20221125222143382

  2. 插件ptg

    image-20221125223117928

1.6 对象内存图

1.6.2 对象在内存中的存储变化

image-20221125231104054

image-20221125231001071

1.6.3 基本数据类型与引用数据类型

image-20221127133755738

1.6.4 this指向原理

image-20221127134257231

1.6.5 成员变量与局部变量的区别

image-20221127135208389

posted on 2023-01-31 11:09  小明与小红  阅读(61)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3