内容大部分来源于学习笔记,随手记录笔记内容以及个人笔记
java是面向对象的语言,一个对象包含状态和行为
可以这样理解,我眼前的石头,手里水杯,这些具体到某一个个体,这就是对象;像手机,电脑这种,只能定义到一个范围,不能具体到是哪一个手机或电脑,就不是对象
在java中,可以通过对象来使用对象所在类的方法,或拿取对象自身的属性(值),java程序就是如此实现的
List a = new List();//创建对象,此时a就是对象 a.name;//获取这个对象的name的值 a.name = "a";//修改这个值 a.run();//调用这个方法,而且是a调用的
一个java文件可以有多个类/接口,但只能有一个public类/接口供外部访问
public修饰的类名和文件名相同,且只有一个
对象的类型,换种说法。我手上的华为Mate 60的类型是手机。类中包含变量和方法和构造方法(方法也叫函数)
public class dog{ ? ?//变量,也叫属性 ? ?String name; ? ?int age; ? ? ? ?public dog(){}//构造方法(函数) ? ? ? ?//方法 ? ?void eat(){ ? ? ? ?System.out.println("吃饭"); ? } ? ? ? ?//块代码,初始化块 ? { ? ? ? ?int a = 1; ? } ? ? ? ?//静态代码块 ? ?static{ ? ? ? ?int b = 0; ? } ? ? ? ?public class aa{ ? ? ? ?private int c; ? } }
变量 String name; String前省略了访问权限修饰符(就是限制使用范围的)
访问权限修饰符 public:允许所有访问
protected:只允许本类或同一个包下使用 【default】:这个就是不写,默认的,表示允许本类和同个包下访问 private:只允许本类中使用
方法 调用是执行的代码
初始化块\代码块 创建对象前自动执行的代码 优先于构造函数
内部类 定义在类中的类
构造方法(函数) 创建对象时自动执行,没有构造函数java会自己生成一个无参的构造函数
修饰属性(变量):只能赋值一次不可更改,此时也叫常亮
修饰类:不可被继承
修饰方法:不可重写,有中说法是private修饰的方法隐式地认为被final修饰过,其实private的方法只能在本类中使用,别的都不能调用
static
变量: 修饰变量,该变量由该类的所有对象共享,不需要对象也可以调用(直接类名调)。 同时不管何种方式修改这个变量,修改后再调用就是修改后的值,简单的说就是,普通的变量,通过对象A调用普通的变量,这个变量就已经贴上A的标签了,不会对这个变量,它的任何状态都是A的。别的对象B使用这个变量名调用时,就是一个新的,独属于B的变量
有一个学生的类 class 学生{ 现在有两个变量 String 橡皮; static String 黑板; } 学生A.橡皮 代表着学生A的橡皮 学生B.橡皮 代表着学生B的橡皮 学生A.橡皮 = 大; 学生A的橡皮是大的 学生B.橡皮 在调用的时候就不会受到上面的影响 这就是普遍变量 ? 学生A.黑板 = 龙的传入; 代表着在黑板上写着龙的传人 学生B.黑板 代表学生B调用黑板的属性,发现黑板上写着龙的传人 这说明静态变量不是独属于对象的,是该类对象共享的
方法: 允许直接使用,就是可以通过类名调用,不用创建对象就可以调用(这一点很关键,有些for循环之类的要调用方法钱会一直创建对象,对性能有影响)
代码块(初始化块): 就是用{}包起来的代码,会在创建第一个对象前执行(先执行静态代码块,后执行代码块内容),在一些业务逻辑有大用
内部类:
外部类对象共享,只能访问外部类的静态成员。
和类相似,带把class关键字换成了interface,类有具体的实现,而接口没有具体的实现
接口中的方法默认被static修饰,也就是说可以直接通过接口命名调方法
public class A{ public void go(){ 方法的具体实现 } } ? public interface B{ public void run(); }
JDK 1.8 以前,接口中抽象方法必须且默认为 public,不允许实现任何方法。
JDK 1.8 以后,接口中抽象方法可以且默认为 default,且允许实现 static 和 default 方法。
JDK 1.9 以后,接口中抽象方法可以是 private。
不过日常中多时使用public
abstract方法:只有声明,没有方法的具体实现,和接口的写法差不多
abstract类:修饰类后,这个类就是抽象类了,不能实例化对象,必须其他类继承后才能通过子类构造对象
public abstract class Vehicle { ? ?// 声明变量 ? ?String brand; ? ?// 声明并实现方法 ? ?public void go(String loc){ ? ? ? ?System.out.print("go to" + loc); ? } ? ?//声明方法但不实现 ? ?public void run(); }
接口不能实现普通方法,抽象类可以实现具体的方法、也可以不实现。
接口只能定义静态常量,抽象类可以定义非静态变量。
一个实体类可以实现多个接口,但只能继承一个抽象类。
default方法:接口中用default修饰方法可以写实现
可以直接在接口内实现,供没有定义的旧类直接使用。若类中实现了该方法则覆盖。
如果类实现了多个接口且拥有同名 default 方法:
两个接口若存在继承关系,调用时优先使用子类方法。
否则,必须重写子类 default 方法,通过 super 关键字明确实现哪个接口
public interface IntefercaeDemo { ? //具体方法 default void showDefault(){ System.out.println("this is showDefault method"); } static void showStatic(){ System.out.println("this is showStatic method"); } //没有实现的抽象方法 void sayHi(); }
每一个文件,在最前面都会有自身的包的位置
同时该文件中如果用到其他位置的类或接口什么的,页会在文件首部记录这个文件的存储位置
这个位置是相对位置,都是从项目结构下的src.main.java开始说明
package com.qf.controller //第一条一般都是该文件的位置,不包括文件名 ? package com.qf.service.UserService //从这里开始就是导入的文件位置了,而且直接指向文件,UserService的位置 ? public class UserController{ public void get(){ //调用UserService的getUSer方法 User user = UserService.getUser(); } }