Java笔记
1.Java中严格区分大小写 采用驼峰命名方式 首字母大写
import java.util.*;--------------->代表导入全部的包
2.Java中的输入需要导包
输入
import java.util.Scanner;
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
int input = sc.nextInt();
输出 System.out.println(data);
3.
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();//输入数据,以字符串存储
String []arr = input.split(",");//将数据以,进行分割,并挨个存储在arr【】中
int []a = new int[arr.length];//创建一个与arr大小相等数组a【】
for (int i = 0; i < arr.length; i++)
{
a[i] = Integer.parseInt(arr[i]);
//将数组arr中的数据依次转换为int类型存储在a【】中
}
4.数据类型
整数:
byte(-128 到 +128)
short
int
long(在定义的是时候需要在后面加上L (long a = 999999999999L))
小数
float(需要加入F作为标识)
double
字符类型
char
boolean类型
true
false
字符串类型
string
5.
StringBuffer和StringBuilder都是Java中可变字符串的类,它们的主要区别在于线程安全性和性能。
StringBuffer是线程安全的,因为它的方法都是同步的,也就是说,在多线程环境下,多个线程可以同时访问一个StringBuffer对象,而不会发生数据竞争的问题。但是,由于同步的开销,StringBuffer的性能比StringBuilder要差一些。
StringBuilder是非线程安全的,因为它的方法都不是同步的。在单线程环境下,使用StringBuilder比使用StringBuffer更快,因为没有同步的开销。但是,在多线程环境下,如果多个线程同时访问一个StringBuilder对象,就可能会发生数据竞争的问题,导致程序出错。
因此,如果你需要在多线程环境下使用可变字符串,应该使用StringBuffer;如果在单线程环境下使用可变字符串,并且对性能要求较高,应该使用StringBuilder。
6.静态变量是优先于对象出现,是随着类的加载而加载
静态方法只能访问静态
非静态方法可以访问所有
静态方法无关键字this
7.静态static变量是所有对象共有的
调用的时候可以使用对象名或者类名进行调用
静态static方法多用于工具类和测试类,在Javabean类中少用
调用的时候一般采用类名进行调用(工具类中使用私有的构造方法 共有的静态方法)
8.Java中三种类
JavaBean类 用来描述一类事物的类,如Student,Teacher,Dog等
测试类 用来检查其他类是否正确,带有Main方法的类,是程序入口
工具类 不是描述一类事物 而是帮助做一些事情的类
9.
public class A{
int a;
public A() //构造函数
}
public class B{
A a;
public B()//构造函数
{
a = new A();(如果B类是以A类为成员 那么需要对A进行实例化)
}
}
public class Main{
public static void main(string []arg){
//主函数的内容
A a = new A();
B b = new B();
}
}
10.StringBuilder(通常用于字符串的拼接与反转)
本质是一个容器
①构造方法
public StringBuilder();
public StringBuilder(String str);
可以使用下面的方式创建
StringBuilder sb = new StringBuilder(“abc”);
②方法
添加元素:sb.append(任意类型)
反转: sb.reverse();
长度: sb.length();
转为字符串string类型:sb.toString();
11.StringJoiner(jdk8后出现 更加方便)
StringJoiner sj = new StringJoiner(间隔符);
StringJoiner sj = new StringJoiner(间隔符,开始符,结束符);
成员方法
sj.add();
sj.length();
sj.toString();
12.集合容器ArrayList
可以自动扩容 而数组是定长的
但是集合容器在存储基本类型的时候必须将基本类型包装成类
ArrayList<数据类型> list = new ArrayList<数据类型>();
增:list.add(值)
删:list.remove(值);
改:list.set(索引,值);
查:list.get(索引);
长度:list.size();
13.java中的随机数生成
Random r = new Random();
int num = r.nextInt(10);
14.数组的两种创建方法
int []a = {1,2,3,4,5};
int []b = new int[5];
15.继承关系
父类:Person
public class Person{
.......
}
子类:
public class Student extends Person{
........
}
public class Teacher extends Person{
........
}
Person为父类(基类或者超类)
Student和Teacher类是子类(派生类)
extends为关键字
16.Java中不支持多继承 但支持多层继承
每一个类都直接或者间接的继承于Object类
17.继承中的关键字
this表示当前类
super代表父类
18.方法的重写(发生了重写 则会对父类进行覆盖)
例如:
@override
public void eat{
......
}
19.父类的构造方法直接使用super()
20
.
21.
使用父类的指针指向子类的对象
22.如果使用多态的方式新建对象
Fu f = New Zi();
如果在调用成员变量的时候 如果父类与子类有同名的 那么就会优先调用父类的成员变量
如果在调用成员方法的时候 如果父类不存在需要重写的方法 那么就会错误(也就是说 这种方式创建的父类对象可以调用子类中对父类重写的方法 但无法直接调用子类新增的方法或同名方法)
23.
多态的优势
①定义方法的时候 使用父类作为参数 可以接受所有子类的对象、
②使用父类对象调用子类中对父类的重写方法
多态的劣势
①无法直接调用子类新增的方法或同名方法
可以用强制转换来使其恢复正常
Fu f = New Zi();
Zi z = (Zi)f;
24.Object是顶级父类 也就是说他可以指向任意子类
25.包的作用
26.Final关键字
27.权限修饰符的分类
28.代码块
局部代码块
构造代码块
静态代码块
在类的成员变量底下
static{
......//仅会执行一次
}
29.抽象类和抽象方法
30.接口
接口就是一种规则(是对行为的抽象) 与接口有关系的类需要遵守接口的重写方式
接口中的成员变量默认是public static final类型
接口中的方法默认是public abstract
接口与接口之间可以是单继承,多继承关系(需要实现多继承关系的接口 需要重写里面所有抽象方法)
jdk新增的规则
31.