存自己电脑易误删,存CSDN,如果你也是刚刚学习Java可以交流一下

Java EE基础

建模块----> 建包----> src文件夹 —> src下建类,类名与文件入口函数要保持一致

工程(项目总文件)----模块(拆分)----包------class(类)

数据类型

基本数据类型: 数值型,非数值型

数值型: 整数(byte short int long)

浮点数(float double)

字符(char)

非数值型: 类(class)

接口(interface)

数组([])

引用数据类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-URuBJmDr-1676652399533)(C:\Users\小泥人\AppData\Roaming\Typora\typora-user-images\image-20221230113547748.png)]

基础语法

// 定义一个类
class Student{
    private String name;
    public Student(String name){
        this.setName(name);
    }
    public void tell(){
        System.out.printIn("姓名:" + getName());
    }
    
    public String getName(){
        return name;
    }
    
    public void setName(String names){
        // 可以在set里加一些验证方法在进行给变量赋值
        name = names;
    }
}

public class 与类名对应 {
    // 入口函数
    public static void main(String[] args){
		//基本上只调用类中的方法
        // 定义变量
        Student stu = new Student("小倪人");
        stu.tell();
    }
}

声明方法:

public static int add(int a, int b){
        int c = a + b;
        return c;
    }


//定义方法, void  类型,可以有return,但不能有返回值
//其他都必须有返回值
// 声明数组  int [] arr = {}   ----> 静态初始化
int [3] arr

堆与栈

主入口–方法类,都存与方法区 栈—运行主入口 堆—存储 new就是在堆开辟空间

Java垃圾回收机制

对象或者数组在堆内存 永久没被使用,将会被自动清理(粗况理解)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kZP4C0Kg-1676652399534)(C:\Users\小泥人\AppData\Roaming\Typora\typora-user-images\image-20230214233743924.png)]

private(修饰符)

私有的,是一个权限修饰符,可以用来修饰成员(变量方法)

特点就是只能在本类当中访问

set方法是设置值

this.进行判断赋值即可,不需要有return

get取值

return出去的值,下方案例

class Person{
    private String name;
    private int age;
    private String hobby;

    public void tell(){
        System.out.println("用户:" + getName() + "年龄:" + getAge() + "爱好:" + getHobby());
    }

    public Person(String name, String hobby, int age){
        this.setName("小倪人");
        this.setAge(44);
        this.setHobby("钓鱼11");
    }

    // set  赋值, 接收names 字符串类型
    public void setName(String names){
        this.name = names;
    }

    public void setHobby(String hobby) {
        this.hobby = hobby;
    }

    public void setAge(int age) {
        this.age = age;
    }
    
    // get   ---- 调用set方法取值, 所以必须要有return返回值  取-------返
    public String getName(){
        return name;
    }

    public String getHobby() {
        return hobby;
    }

    public int getAge() {
        return age;
    }
}

入口函数
public class day902 {
    public static void main(String[] args) {
        // 类名 对象名 = new 类名()   ----应该分两个Java类来写,demo没分,用法一样 ,入口  类名 变量 接收 new一个类名开辟空间
        Person per = new Person("小倪人", "钓鱼", 88);

        per.tell();
    }
}

构造方法

格式:

  • 方法名与类名相同,大小写也需一致
  • 没有返回值类型,连void都没有
  • 没有具体的返回值(不能由return带回结果数据)

执行时机:

  • 创建对象的时候调用,每创建一次对象,就会执行一次构造方法
  • 不能手动调用构造方法

demo

//  主函数
package com.xnr.Demo;

public class Test {
    public static void main(String[] args) {
        Demo stu = new Demo("小倪",22);
        Demo stu1 = new Demo("小倪人",23);
        Demo stu2 = new Demo("小倪人的",20);

        stu.showList();
        stu1.showList();
        stu2.showList();
    }
}

// 模块---也可以叫分支,构造方法demo
package com.xnr.Demo;

/**
 * 构造方法格式
 *  方法名与类名相同,大小写也需一致
 *  没有返回值类型,连void都没有
 *  没有具体的返回值(不能由return带回结果数据)
 * @author 小泥人
 */
public class Demo {

    private String name;
    private int age;
    
    // 公共方法 对变量赋值,避免重复操作,与前端类似,注意指针指向问题
    public Demo(String name, int age){
        // 接收到参数进行赋值操作  切记 不可 return 出去东西,只是一个方法,void也无 return  
        // public 后面无void (还有直接-------接上方法名的) 都不需要返回值!!!!!! 
        // 跟String int......都需要有返回值,return出去处理的结果
        this.name = name;
        this.age = age;
        System.out.println("我是Student的构造方法");
    }

    public void showList(){
        System.out.println(name + age);
    }
}
  • 思想就是公共方法,有点像模块化的东西,也许说的不对!

如果一个类中没有编写任何一个构造方法,系统会默认提供一个没有接收的构造方法:如下

反之则相反,如果定义了构造函数,系统默认的构造函数将会被销毁

推荐:两种方法都写

// 如果main入口处调用构造方法,自己其他模块的类中未定义此构造方法,系统会默认创建一个
public Demo(){}
// 在入口调用的时候

public static void main(String[] args) {
    // 传参一项会报错,跟前端差不多,参数虽然传递给他了,但是人不要
        Demo stu = new Demo("小倪",22);
    // 如下可以的,默认创建一个构造函数
        Demo stu1 = new Demo();
}

JavaBean类: 封装数据用

一些constructor 方法右键生成即可 getXxx setXxx方法,或者构造函数

//修饰符创建变量
private String name;
private int age;

//无参构造函数
public Demo(){
    
}
// 有参构造函数
public Demo(String name, int age ){
    this.name = name ;
    this.age = age ;
}

// setXxx 修改变量
public void setName(String name ){
    this.name = name ;
}

public String getName(String name){
    return name;
}

JDK API

Scanner – 键盘录入

next() 定义类型 next 获取键盘输入空格之前的所有值,遇到空格停止录入 ----- 结束标记 空格 tab键

nextLine() nextLine 获取键盘输入所有值,包括空格以及后方的值 ----- 结束标记 : 回车 换行符

nextInt() 输入整数类型的

nextInt 与 nextLine方法配合使用的时候,nextLine方法就没有键盘录入了 , 回车也会被记录,比较容易理解

字符串和整数一起接收的时候,尽量使用next()

  • 案例
package com.xnr.Day02;

import java.util.Scanner;

public class ScannerApi {
    public static void main(String[] args) {
//        一个API  Scanner   获取键盘输入值的   格式   内置构造方法  包(Scanner) 名子 = 开辟空间(new) 方法名(传递参数)
        Scanner downKey = new Scanner(System.in);
        System.out.println("输入几个数字测试一下API");
//        定义类型  nextLine 获取键盘输入所有值,包括空格以及后方的值
//            结束标记 : 回车 换行符
        String su  = downKey.nextLine();
//        定义类型  next 获取键盘输入空格之前的所有值   遇到空格停止录入
//            结束标记 空格、tab键
        String su1 = downKey.next();
        System.out.println(11 + ":" + su + "-------" + su1);
    }
}

java.lang包 属于核心包,不需要导包

String

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JZsB714i-1676652399534)(C:\Users\小泥人\AppData\Roaming\Typora\typora-user-images\image-20230216230152125.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m3WBbSlv-1676652399535)(C:\Users\小泥人\AppData\Roaming\Typora\typora-user-images\image-20230216230435517.png)]

public class DemoStringConstructor {
    /**
     * String 类常见构造方法:
     *    public String() : 创建一个空白字符串对象,不含有任何内容
     *    public String(char[] chs) : 根据字符数组的内容,来创建字符串对象
     *    public String(String original) : 根据传入的字符串内容,创建字符串对象
     *    String s = "xnr"; 直接赋值的方式创建字符串对象,内容就是等于号右侧的内容
     *
     *    Tips:
     *          String 这个类比较特殊,打印其对象的时候,不会出现内存地址
     *          而是该对象所记录的真实内容
     *
     *          面向对象--继承, Object类
     * @author 小泥人
     */
    public static void main(String[] args) {
        String s1 = new String();
        System.out.println(s1);

        char[] chs = {'a','b','c'};
        String s2 = new String(chs);
        System.out.println(s2);

        String s3 = new String("123");
        System.out.println(s3);
    }
}

构造方法可以创建对象,双引号也可以创建对象

==号作比较

基本数据类型比较的是具体的值

引用数据类型比较的是地址值(堆中存放的地址标识,我的理解,不知道对不对)

双引号创建的字符串对象,在字符串常量池(jdk7之前存放在方法区中,后来移步至堆内存中,这都不重要,执行流程一样的)中存储,通过构造方法创建的字符串对象,在堆内存中存储

  • Tips:
public class DemoStringConstructor {
    public static void main(String[] args) {
     	String str = "abc";
        String str1 = "abc";
        System.out.printIn(str == str1)  // 返回 true
		// 执行流程  str一创建的  会存放至方法区中  然后在栈中执行时候,str 在字符串常量池中搜不到,会创建一个,str1执行时,有这个值
         // 直接套用 , 指向的地方一样,还能为false????  他是在比较值
        char[] cha = {'a','b','c'};
        String s1 = new String(cha);
        String s2 = new String(cha);  // 两块地址引用 cha 
        // 不用想,肯定false   new 关键字,是在堆内存开辟两块新空间,地址不同,比较结果肯定不同  故 false  他是在比较地址
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-896yAdCe-1676652399535)(C:\Users\小泥人\AppData\Roaming\Typora\typora-user-images\image-20230216235245561.png)]

charAt()

获取字符串中的每一个字符 然后可以遍历 for循环拿到字符串对应的索引

Tips:

package com.xnr.charAtDemo;

import java.util.Scanner;

public class CharAtDemo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请您输入:");
        String s = sc.nextLine();

//        char c1 = s.charAt(0);
        for (int i = 0; i < s.length(); i++) {
            char c1 = s.charAt(i);
            System.out.println(c1);
        }
    }
}

toCharArray()

将字符串拆分为字符串数组并返回

格式 char strArray(处理过的用变量接收) = 字符串变量.toCharArray()

Tips:

package com.xnr.charAtDemo;

import java.util.Scanner;

public class CharAtDemo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请您输入:");
        String s = sc.nextLine();
        char[] c1 = s.toCharArray();
        

        for (int i = 0; i < s.length(); i++) {
            System.out.println(c1[i]);
        }
    }
}

substring

截取字符串:

String substring(int beginIndex): 传递字符串的起始索引,向后截取至末尾,得到新的字符串并返回

String substring(int beginIndex , int endIndex) : 传递字符串的起始索引,向后截取至endIndex结束下标,含头含尾

Tips:

package com.xnr.phoneTest;

public class phoneTest {
    public static void main(String[] args) {
        String str = "xnrsss";
        String strSlice = str.substring(3);
        String strSlice2 = str.substring(0, 3);
        System.out.println("原字符串" + "--------------" + str + "--------------" + "beginIndex" + "--------------" + strSlice + "--------------" + "beginIndex-end" + "--------------" + strSlice2);
    }
}

String replace

(CharSequence target, CharSequence replacement)

  • 将当前字符串中的target(被替换的值)内容,使用replacement(替换的新值)进行替换掉
  • 返回新字符串

TIPS:

package com.xnr.replaceDemo;

import java.util.Scanner;

public class replaceDemo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入评论");
        String msg = sc.nextLine();
        String res = msg.replace("TMD","***");
        System.out.println(res);
    }
}

split

String[] split(String regex)

split: 根据传入的字符串作为规则进行切割,将切割后的内容存入字符串数组中,并将字符串数组返回

Tips:

// 入口文件
package com.xnr.splitDemo;

import java.util.Scanner;

public class mainTset {
    public static void main(String[] args) {
        // 键盘录入
        Scanner  sc = new Scanner(System.in);
        System.out.println("请输入学生信息:");
        String stuInfo = sc.nextLine();

        String[] str =  stuInfo.split(",");
//        System.out.println(str[0]);
//        System.out.println(str[1]);

        splitDemo stu = new splitDemo(str[0],str[1]);

        String getStr = stu.getName() + "-----" + stu.getAge();
        System.out.println(getStr);
    }
}


// 方法模块
package com.xnr.splitDemo;

public class splitDemo {
    private String name;
    private String age;

    public splitDemo(String name, String age) {
        this.name = name;
        this.age = age;
    }

    public splitDemo() {

    }

    public String getName() {
        return name;
    }

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

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gEeNBvNu-1676652399535)(C:\Users\小泥人\AppData\Roaming\Typora\typora-user-images\image-20230218001900588.png)]

StringBuilder

可变的字符串类,可以看成一个容器 提高字符串操作效率

  • StringBuilder() : 构造一个不带任何字符串的生成器,初始容量为16个字符
  • StringBuilder(CharSequence seq) : 构造一个字符串生成器,它包含与指定的CharSequence 相同的字符
  • StringBuilder(int capacity) : 构造一个不带任何字符的字符串生成器,其初始容量由 capacity 参数指定
  • StringBuilder(String str) : 构造一个字符串生成器,并初始化为指定的字符串内容

常用StringBuilder() && StringBuilder(String str)

) {
this.name = name;
}

public String getAge() {
    return age;
}

public void setAge(String age) {
    this.age = age;
}

}

[外链图片转存中...(img-gEeNBvNu-1676652399535)]



## StringBuilder

 **可变的字符串类,可以看成一个容器   提高字符串操作效率**

* StringBuilder()  :  构造一个不带任何字符串的生成器,初始容量为16个字符
* StringBuilder(CharSequence seq) : 构造一个字符串生成器,它包含与指定的CharSequence 相同的字符
* StringBuilder(int capacity) : 构造一个不带任何字符的字符串生成器,其初始容量由 capacity 参数指定
* StringBuilder(String str) : 构造一个字符串生成器,并初始化为指定的字符串内容

**常用**: **StringBuilder() && StringBuilder(String str)**