java—1 封装
目录一、零碎内容一、输入、输出二、idea项目结构三、Java标识符的命名规范约定俗成四. 方法和函数二、快捷键三、数组1. 声明数组2. 静态初始化3. 数组动态初始化4. 声明和初始化一起完成5. 数组地址四、面向对象编程1. 对象是什么2.类的基本语法1.封装1-1.private 私有化变量2. this 关键字3. 构造方法/构造器编辑4. JavaBean/实体类编辑6. static6-1. static 修饰成员变量6-2. 静态方法的应用6-3. static 修饰方法6-4. static 的注意事项一、零碎内容一、输入、输出1. 输入import java.util.Scanner; Scanner sc new Scanner(System.in); // 创建一个对象 int choose sc.nextInt(); float money sc.nextFloat(); -------第一套体系 next(); 接收字符串 next()当开始读取字符时当遇到 空格/Tab键/回车 截止读取 next().chatAt(0); //只接收字符串的第一个字符 -------第二套体系 nextLine()可以读取字符前后的空格/Tab键有回车键时截止读取。两套输入体系最好不要混用弊端① 先用第一套 再用第二套会导致下面的nextLine 接受不到数据将输完第一套的录入 后的回车接收了混用时要清楚缓冲区的换行符char gender_1 sc.next().charAt(0); sc.nextLine(); // 清除缓冲区中的换行符 String name_2 sc.nextLine();2. 输出// 快捷键 sout System.out println(sum sum) // 输出数据后换行 // sum 123 System.out print() // 输出数据后不换行 System.out printf(sum %.2f,sum) // 和C 语言一样的输出格式二、idea项目结构psvm piblic static void main{} // psvm 程序主入口new project— 勾选 add sample code 会自动生成 main.class不勾选的话new module勾选 add sample code 会自动生成 src main.class不勾选时三、Java标识符的命名规范约定俗成包名当由多个单词组成时所有单词都是小写。如aaa.bbb.ccc。类名、接口名单词的首字母大写。如XxxYyyZzz。大驼峰命名法变量名、方法名由多个单词组成时第一个单词均小写其它单词首字母大写。如xxxYyyZzz。小驼峰命名法简称驼峰法常量名所有字母均大写。且由多个单词组成时单词之间用下划线“_”隔开。如XXX_YYY_ZZZ。四. 方法和函数类中的函数叫方法方法的重载二、快捷键IDEA常用快捷键整理大全非常详细持续更新中..._keymap idea-CSDN博客多行代码注释 // ctrl / /* */ ctrl shift /Ctrl P 展示出这个方法的调用参数列表信息。ctrl alt m 自动抽取方法ctrl d 复制这行代码到下一行Alt Insert 快速生成含有任意形参的构造器和私有属性的Getter/Setter等方法最常使用constructor - Select None—— 空参点击shift 不松点击最下面的 或者 ctrla 全选——带全部参数的构造Getter and Setter—— ctrla 全选—— 对每个是私有化的变量都提供get set 方法插件PTG 秒生成标准JavabeanctrlaltL 格式化代码变得规整shift f6 选中变量批量修改三、数组Java数组这一篇就够了超详细-CSDN博客1. 声明数组java 一般用第一种c 用第二种float boy[]; float a[][]; 一次声明多个数组 float [] a,b; * float [] a,b[]; // 相当于 float a[],b[][]; // 与C 不同java 不允许在声明数组时指定数组元素的个数 float a[12]; //会报错2. 静态初始化3. 数组动态初始化4. 声明和初始化一起完成float[] boy new float[4] float[] boy: 声明一个float 类型的数组数组名arr。声明打招呼我要来了给我预留内存 new float[4]: 创建了一个长度为 6 的 float类型的数组并将其分配给变量 arr。(分配内存) 万物皆是类float 也是类。都说new 一个对象arr 就是 float类数组的一个对象。 float a[][]; // a new float[3][4]; 等价于 float a new flaot[3][4] // 和c 不同的是 java可以使用int变量的值指定数组大小 int size 30; float boy new float[size];5. 数组地址int[] arr new int[6]; 数组 arr 装六个整数 现在装六个电影对象 电影对象类型是什么 —— Movie 类本身就是类型万物皆类型 Moive[] movies new Movie[6]四、面向对象编程对象本质上是一种特殊的数据结构可以理解为一张表存储数据。class 也就是类也成为对象的数据图或者对象的模板1. 对象是什么怎么才能设计这个对象声明对象的格式类名 对象名 new 类名();s1 就是一个明星对象 s1是一个地址。对象在计算机中的表现java代码的运行实际上在JVM虚拟机上。在内存中为了更好的执行分为 栈内存堆内存和方法区。方法区放 class 文件方法的执行放到栈先进后出里面。对象放在堆内存面向对象编程是什么万物皆对象谁的数据谁存储。2.类的基本语法是为了设计出更好的类1.封装把数据和对数据的处理放到同一个类中封装的设计要求合理隐藏合理暴露1-1.private 私有化变量private用于合理隐藏get、set进行合理暴露私有化变量是为了保证数据的输入合法如果不合法可以在set方法中设置为什么不在输入时判断呢 如果你有108个女朋友每个都要写个判断语句太麻烦2. this 关键字如果想用成员变量的值怎么办 使用thisthis 表示方法的调用者哪个对象调用这个方法this就拿到哪个对象主要用来解决变量名冲突问题package com.daydayup.fengzhaung; public class GrilFriend { // 属性名词 // 类里面方法的外面的变量 成员变量 private String name; // 私有化变量是为了保证数据的输入合法如果不合法可以在set方法中设置为什么不在输入时判断呢 // 如果你有108个女朋友每个都要写个判断语句太麻烦 private int age; String gender; // 对于一个私有化的变量都要提供get和set方法 // set: 给成员变量赋值 // get: 对外提供成员变量的值 // 作用给成员变量name进行赋值 public void setName(String name){ this.name name; // 因为方法的参数与成员变量相同。对成员变量进行赋值 要用this } // 作用对外提供name属性 public String getName(){ return name; } public void setAge(int age){ if (age 18 age 30){ this.age age; }else{ System.out.println(非法参数); } } public int getAge(){ return age; } // 行为动词 public void sleep(){ System.out.println(睡觉); } public void eat(){ System.out.println(吃饭); } }package com.daydayup.fengzhaung; public class GrilFriendTest { public static void main(String[] args) { // 创建女朋友的对象 GrilFriend gf1 new GrilFriend(); // 赋值 gf1.setName(诗诗); gf1.setAge(18); gf1.gender 萌妹子; System.out.println(gf1.getName()); System.out.println(gf1.getAge()); System.out.println(gf1.gender); gf1.eat(); gf1.sleep(); } }3. 构造方法/构造器就是为了在创造对象的时候由虚拟机自动调用给成员变量初始化的。在编写一个类时没有添加无参构造方法那么编译器会自动添加默认无参构造方法如果自己手动添加构造函数无论有参数或是没参数默认构造函数都将无效编写时添加有参构造方法而未添加无参构造方法那么编译器只认有参构造方法而不会默认添加无参构造方法。如果需要使用无参构造方法一定要在类里面添加。快捷键 alt insert 全部选得到空参构造全选得到有参构造作用给数据赋值的时候不用 t1.XX好几行只需一行就可以解决// lombok 技术可以实现为类自动添加get、set 方法 无参数构造器toString方法 // Data // Data注解可以自动生成get、set方法 无参构造器toString方法 // NoArgsConstructor 无参构造器 // AllArgsConstructor 有参构造器4. JavaBean/实体类变量是优化方法公有化内存图面向对象-07-三种情况的对象内存图_哔哩哔哩_bilibili5 String创建方式最常用以后会用Java内存模型因此那么 new 方法 开辟新的地址常用方法总结 | Java字符串常用操作(方法)-CSDN博客比较 号比的是什么遍历StringBuliderStringJoiner基本类型和引用类型1. 基本类型8 个四类八种整型byteshortintlong浮点floatdouble字符char布尔boolean2. 引用类型所有类、接口、数组、字符串、集合、自定义对象比如String、Element、List、Map、你写的RiskReq、BzskScf全都是引用类型二、核心本质区别最关键基本类型直接存真实值栈内存直接存数据本身引用类型栈里存的是内存地址引用 / 指针真实对象存在堆内存比喻秒懂基本类型手里直接拿着钱引用类型手里拿的是银行卡钱存在银行堆内存详细对比表对比项基本类型引用类型存储内容存真实数值存对象地址内存位置只在栈栈存地址堆存真实对象默认值有默认值int0、booleanfalse默认值是null是否 new不用 new直接赋值必须new创建对象赋值方式值传递赋值后互不影响地址传递两个变量指向同一个对象一改全改包含种类固定 8 种无限多类、数组、String、集合等能不能为 null不能可以为 null四、赋值区别最容易踩坑1. 基本类型赋值后互不干扰int a 10; int b a; b 20; // a 还是 10不受影响各自独立复制的是值。2. 引用类型赋值是共享同一个对象User u1 new User(); User u2 u1; // 把地址赋给 u2 u2.setName(张三); // u1 的 name 也变成 张三两个变量指向同一个内存对象。五、默认值区别基本类型int0double0.0char空字符booleanfalse引用类型所有对象默认都是null一句话极简总结基本类型存真实值、栈内存、无 new、不能 null、赋值互不影响。引用类型存地址、堆内存、要 new、可以 null、赋值共用一个对象。6.集合ArrayListEE存储类型只能存储引用类型的数据不能存储基本类型的数据ArrayListString list new ArrayListString(); // jdk7 以前 ArrayListString list new ArrayList(); // jdk 7 以后如果要存储基本类型数据需要把其写成包装类现在要自己定义一个 Student 类在主函数中public class Test04_ArrayList { public static void main(String[] args) { // 创建集合 ArrayListStudent list new ArrayList(); // 创建学生对象 Student s1 new Student(张三,24); Student s2 new Student(李四,24); Student s3 new Student(王五,24); // 添加元素 list.add(s1); list.add(s2); list.add(s3); System.out.println(list); // 输出的是地址 for (int i 0; i list.size(); i) { // i 是索引 list.get(i) Student stu list.get(i); // stu 是地址 System.out.println(stu.getName() , stu.getAge() ); } } }然后定义Student 类标准的JavaBeanpublic class Student { /* * javabean * 1.私有化变量 * 2.空参构造方法 * 3.带全部参数的构造方法 * 4. get/set 方法 * */ private String name; private int age; // Alt insert 空参构造 public Student() { } public Student(String name, int age) { this.name name; this.age age; } // get、set方法 Altinsert public String getName() { return name; } public void setName(String name) { this.name name; } public int getAge() { return age; } public void setAge(int age) { this.age age; } }对 Student 类中的成员的某个变量进行操作就相当于 对二维数组进行操作需要先拿到目标成员的索引通过 get (i) 找到成员变量张三/李四/王五 再用 get 变量名 getName/getName得到变量。用 setName 进行添加或修改。7. static叫静态可以修饰成员变量、成员方法6-1. static 修饰成员变量静态方法在同一个类中 类名可以不写这就是为什么在mian()方法中调用静态方法不写成main.XXX()的原因6-2. 静态方法有static修饰的成员方法无static修饰的成员方法总结1. 如果一个方法只是为了做一个功能且不需要直接访问对象的数据这个方法定义成静态方法2. 如果这个方法是对象的行为需要访问对象的数据这个方法必须定义为实例方法。静态方法在同一个类中 类名可以不写这就是为什么在mian()方法中调用静态方法不写成main.XXX()的原因6-3 static 的注意事项总结静态方法中没有关键字 this静态方法中只能访问静态变量非静态方法可以访问所有理解非静态方法中 其实暗含着 this 关键字表示当前方法调用者的地址值要不然好几个对象对其进行调用对象名.实例方法()怎么分别是哪个对象调用的呢。静态方法里的对象是共享的就没有 this 关键字第二条静态方法中没有静态方法中调用非静态的变量怎么知道这个变量是谁的变量上面说了要用 指定调用者的地址第三条非静态的方法调用其他方法暗含者从内存角度继承面向对象三大特征封装继承多态回忆封装把一些零散的数据和行为都封装为一个整体。这个整体就是“对象”以后我们面对的就是这个 对象的整体而不是零散的数据。但当这类的对象越来越多之后比如老师校长等等会有一些和 student 类一样的数据和行为 又有不同的。继承一、作用提高代码重复性减少一些重复的代码。使得子类具有父类的属性和方法还可以在子类中重新定义追加属性和方法。让子类更强大二、什么继承子类只能继承父类的非私有成员如果成员变量是私有的但如果获得成员的get、set 方法不是私有的子类可以通过get、set 方法进行操作父类私有变量。权限修饰符继承的特点1. 单继承、多继承一个类只能有一个爸爸不能有多个爸爸但爸爸可以有爸爸。2. 祖宗类3.就近原则supper 超级父类又称超类方法重写重写规范声明不变重新实现。本质就是覆盖些虚方法表中的方法。子类构造器通过super() 调用父类的空参构造如果在创建对象的是否就赋值既 想调用有参构造 怎么办this(.....) 访问本类构造用于设定默认值的时候this(...)调用兄弟构造器如何写父类写成JavaBean 形式私有变量提供构造方法空参/形参在加上 行为public void eat {}方法中使用 变量属性的时候直接用。而子类想要用某些 变量属性的时候要用 get子类标准的就是在写一个class文件1、提供构造方法空参/形参Alt insert 显示的是他爹的空参和形参构造方法全选2、行为看要不要重写他爹的还是自己独有的在调用他爹的某些属性时要用 get例如 getAge()测试类创建对象创建子类或则父类对象多态什么是多态对象多态行为多态当一个图书推荐系统人员分为 学生、老师、管理员。但从 注册函数 开始 函数中的方法的形参 填什么呢填Teacher 哪学生和管理员就不能注册了。那就 把形参 写成他们的父类总之多态调用成员的特点变量调用编译看左边运行也看左边方法调用编译看左边运行看右边方法编译看左边运行看右边变量编译运行都看左为什么呢 多态强调的是对象多态和行为多态可没说变量多态使用多态的好处弊端解决方法就是 类型转换。新写法编译看左边不能调用子类独有的功能 。如果想用子类独有的功能怎么办呢--类型转换。多态下的类型转换可以调用子类独有的功能