目录
一、零碎内容
一、输入、输出
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 不松,点击最下面的 或者 ctrl+a 全选——带全部参数的构造
- Getter and Setter——> ctrl+a 全选——> 对每个是私有化的变量都提供get set 方法
- 插件PTG 秒生成标准Javabean
- ctrl+alt+L 格式化代码变得规整
三、数组
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 关键字
this 表示方法的调用者:哪个对象调用这个方法,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. 构造方法/构造器
就是为了在创造对象的时候,由虚拟机自动调用,给成员变量初始化的。
在编写一个类时没有添加无参构造方法,那么编译器会自动添加默认无参构造方法;(如果自己手动添加构造函数,无论有参数或是没参数,默认构造函数都将无效)
编写时添加有参构造方法而未添加无参构造方法,那么编译器只认有参构造方法而不会默认添加无参构造方法。
如果需要使用无参构造方法,一定要在类里面添加。
作用
给数据赋值的时候,不用 t1.XX,好几行,只需一行就可以解决
// lombok 技术可以实现为类自动添加get、set 方法 无参数构造器,toString方法 // @Data // @Data注解可以自动生成get、set方法 无参构造器,toString方法 // @NoArgsConstructor 无参构造器 // @AllArgsConstructor 有参构造器
4. JavaBean/实体类
6. static
叫静态,可以修饰成员变量、成员方法
6-1. static 修饰成员变量
静态方法,在同一个类中 类名可以不写(这就是为什么在mian()方法中调用静态方法不写成main.XXX()的原因)
6-2. 静态方法的应用
写工具类
比如一个验证码,登录界面需要,注册界面也需要。
那为什么不用实力方法呢?因为实例方法需要创建对象来调用,此时对象只是为了调用方法,对象占内存,这样会浪费内存。
工具类没有创建对象的需求,建议将工具类的构造器进行私有
6-3. static 修饰方法
有static修饰的成员方法
无static修饰的成员方法
总结:1. 如果一个方法只是为了做一个功能且不需要直接访问对象的数据,这个方法志杰定义成静态方法
2. 如果这个方法是对象的行为,需要访问对象的数据,这个方法必须定义为实例方法。
静态方法,在同一个类中 类名可以不写(这就是为什么在mian()方法中调用静态方法不写成main.XXX()的原因)
6-4. static 的注意事项
第一条
因为实例成员是属于对象的,直接访问,他哪知道访问哪个对象的成员变量/方法
第二条
静态成员独一份,只有那一个,要访问就访问他嘛。因为实例的方法也是属于对象的方法,使用实例方法的时候,一定是用 对象名.实例方法(),其中已经给定了是哪个对象。
第三条
this 代表的是对象。静态方法没有对象,上哪调啊。实例方法是用对象调用的,所以 this 有指代的对象。