一.关于IDEA快捷键
1.快速生成语句
快速生成main()方法:psvm,回车
快速生成输出语句:sout,回车
2.内容辅助键
Ctrl+Alt+space:内容提示,代码补全等
快速注释方法:
单行:选中代码,Ctrl+/,再来一次就是取消
多行:选中代码,Ctrl+shift+/,再来一次,就是取消
代码格式标准化:Ctrl+Alt+L
二.数组
1.数组定义格式:数组类型[ ]变量名
例如int [ ] arr
2.动态初始化:分配内存空间,赋值
例如:int [ ] arr= new int [3]
3为数组长度,表示数组中有三个元素。
3.数组元素访问:数组名+索引
索引从0开始,每次加一。
通过数组索引更改数据会导致原始地址内数据发生改变,即会更改原始数据。
4.java中的内存分配
栈内存:存储局部变量,定义在方法中的变量,例如arr,使用完毕立即消失。
堆内存:存储new出来的内容(实体,对象),数组在初始化时,会为存储空间添加默认值。
| 数组类型 | 默认值 |
| 整数 | 0 |
| 浮点数 | 0.0 |
| 布尔 | false |
| 字符 | 空字符 |
| 引用数据类型 | null |
每一个new出来的东西都有一个地址值,使用完毕会在回收器空闲时被回收。
5.静态初始化
int [ ] arr = new int [ ]{1,2,3}
简化成int [ ] arr = {1,2,3}
直接赋值
6.数据操作常见问题
1)索引越界
索引数超过数组长度。
2)空指针异常
即默认值null无有效对象。
7.常见操作
1.获取数组元素数量
public static void Arr(){
int [] arr = {1,2,3};
System.out.println(arr.length);//arr.length获取数组长度
}
2.遍历数组
//输出数组中的所有元素
public static void Arr(){
int [] arr = {1,2,3};
for(int i = 0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
//输出[8,7,6,5,4]
public static void Arr() {
int[] arr = {8,7,6,5,4};
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
if (i < arr.length - 1) {
System.out.print(arr[i] + ",");
} else {
System.out.print(arr[i] + "]");
}
}
}
3.求数组最值
//找最大值
public static void Arr1() {
int[] arr = {2, 3, 4, 7, 4, 2};
int max = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
} else {
max = max;
}
}
System.out.println(max);
}
三.方法
1.方法定义和调用
方法定义:
public static void 方法名(){
//方法体
}
方法调用:
方法名();
public class HelloWorld {
public static void main(String[] args) {
Arr1();
}
public static void Arr1() {
int[] arr = {2, 3, 4, 7, 4, 2};
int max = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
} else {
max = max;
}
}
System.out.println(max);
}
}
2.带参数方法的定义和调用
单参数
//给定参数判断是否为偶数
public class HelloWorld {
public static void main(String[] args) {
Arr2(20);//常量调用
int number = 20;
Arr2(number);//变量调用
}
public static void Arr2(int number){
if(number%2==0){
System.out.println(true);
}else {
System.out.println(false);
}
}
}
3.形参、实参
形参:方法定义中的参数,如int number;
实参:方法调用中的参数,如number,20。
4.带返回值的方法和调用
//给定参数判断是否为偶数
public class HelloWorld {
public static void main(String[] args) {
boolean f = Arr2(10);
System.out.println(f);
}
public static boolean Arr2(int number){
if(number%2==0){
return true;
}else {
return false;
}
}
}
方法的返回值要用变量接收。
5.注意事项
1.方法不能嵌套定义,方法中不能定义另一个方法,但是可以调用其他方法。
2.void无返回值,但是可以有return,表示方法结束。
public class HelloWorld {
public static void main(String[] args) {
int f = Measure(10,30);
System.out.println(f);
}
public static int Measure(int a,int b){
if(a>b){
return a;
}else {
return b;
}
}
}
6.方法重载
方法重载指同一个类中定义的多个方法之间的关系,满足下列条件:
1.多个方法在同一个类中。
2.多个方法具有相同的变量名。
3.多个方法参数、类型、或者数量不同。
4.重载仅对应方法的定义,与方法的调用无关。
5.不能通过返回值来判断方法是否构成重载。
例如:
public class HelloWorld {
public static void main(String[] args) {
boolean f = Compare(10.31,39.33);
System.out.println(f);
}
public static boolean Compare(int a, int b) {
System.out.println("int");
return a == b;
}
public static boolean Compare(double a, double b) {
System.out.println("double");
return a == b;
}
}
四.封装
1.private
1.private作用
作为权限修饰符,可以修饰成员,保护成员不被别的类使用。
private修饰的成员只能在本类中使用。
2.private在其他类使用
使用get变量名:获取值,用public修饰;
使用set变量名:设置值,用public修饰。
例如:
public class Practise {
String name;
private int age;
public void setAge(int a){
if(a<0||a>120){
System.out.println("输入错误!");
}else {
age=a;
}
}
public int getAge(){
return age;
}
public void Show(){
System.out.println(name+","+age);
}
}
public class PractiseDemo {
public static void main(String[] args) {
Practise s = new Practise();
s.name="唐老鸭";
s.setAge(-56);
s.Show();
}
}
2.this关键字
this+名称指代长远变量,解决局部变量隐藏成员变量。
1.方法的形参如果与成员变量同名,不带this修饰的变量是形参,而不是成员变量。
2.方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量。
3.方法被哪个对象调用,this就代表哪个对象。
3.封装
1.封装概述
面向对象三大特征:封装,继承,多态。
封装是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作。
2.封装原则
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问成员变量private,提供对应的getXXX/setXXX方法。
3.封装好处
通过方法来控制成员变量的操作,提高了代码的安全性。
把代码用方法进行封装,提高了代码的复用性。
例子:
//带参构造方法
public class Practise {
private String name;
private int age;
public Practise() {
} //无参构造
public Practise(String name) {
this.name = name;
}
public Practise(int age) {
this.age = age;
}
public Practise(String name, int age) {
this.name = name;
this.age = age;
}
public void Show(){
System.out.println(name+","+age);
}
}
public class PractiseDemo {
public static void main(String[] args) {
Practise s1 = new Practise();
s1.Show();
Practise s2 = new Practise("唐老鸭",76);
s2.Show();
Practise s3 = new Practise("白雪公主",56);
s3.Show();
Practise s4 = new Practise("米老鼠",76);
s4.Show();
}
}
//无参和带参构造方法
public class Practise {
private String name;
private int age;
public Practise() {
}
public Practise(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
public void Show(){
System.out.println(name+","+age);
}
}
public class PractiseDemo {
public static void main(String[] args) {
//无参创建,set赋值
Practise s1 = new Practise();
s1.setName("唐老鸭");
s1.setAge(87);
s1.Show();
//带参直接创建
Practise s2 = new Practise("唐老鸭",87);
s2.Show();
}
}
无论是否使用无参构造方法,都推荐书写无参数构造方法。
四.字符串
1.API应用程序编程接口
2.String
| 方法名 | 说明 |
| public String() | 创建一个空白字符串对象,不含有任何内容 |
| public String(char[] chs) | 根据字符数组的内容,来创建字符串对象 |
| public String(byte[] bys) | 根据字节数组的内容,来创建字符串对象 |
| String s = "abc" | 直接赋值创建字符串 |
String s1 = new String();
System.out.println(s1);
char[] chs = {'a','b','c'};
String s2 = new String(chs);
System.out.println(s2);
byte[] bys = {97,98,99};
String s3 = new String(bys);
System.out.println(s3);
String s4 = "dawd";//最常用
System.out.println(s4);
3.字符串比较
基本类型:数值相同
引用类型:地址相同
字符串比较所用方法:equals()
案例:用户登录。
package dailySchedu;
import java.util.Scanner;
public class Dl {
public static void main(String[] args) {
String s11 = "123";
String s21 = "123";
while (true) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入账号:");
String s1 = sc.nextLine();
System.out.println("请输入密码");
String s2 = sc.nextLine();
if (s1.equals(s11)&&s2.equals(s21)) {//比较字符串内容,严格区分大小写
System.out.println("登陆成功!");
break;
} else {
System.out.println("输入失败请重新登录:");
}
}
}
}
4.字符串操作
System.out.println(line.charAt(i));//输出字符串中索引为i的字符 System.out.println(line.length());//字符串长度
//字符串反转
import java.util.Scanner;
public class Dl {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String s = sc.nextLine();
String ss = "";
for(int i = s.length()-1;i>=0;i--){
ss+=s.charAt(i);
}
System.out.println(ss);
}
}
5.StringBuilder
String使用时内容不可变;
StringBuilder无需导包,内容可变。
public StringBuilder()//创建空白可变,无内容 public StringBuilder(String str)//创建可变字符串对象
关于StringBuilder的添加和反转方法:
public StringBuilder append(){}//添加数据返回对象本身
public StringBuilder reverse(){}//返回相反的字符序列
例子:
public class Dl {
public static void main(String[] args) {
StringBuilder s = new StringBuilder();
s.append("a").append("b").append("c");
System.out.println(s);//输出abc
s.reverse();
System.out.println(s);//输出cba
}
}
6.String和StringBuilder相互转换
1.StringBuild转化为String
public String toString;
2.String转化为StringBuilder
public StringBuilder(String s);
例子:
String ss = s.toString();//StringBuild转化为String StringBuilder sss = new StringBuilder(s);//String转化为StringBuilder










