存自己电脑易误删,存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)**
更多推荐
java EE基础篇--自学笔记
发布评论