java 09
1、形式参数
基本类型: 当基本数据类型作为参数传递的时候,传递是具体的数值
引用类型:
数组:当数组作为方法的参数类型的时候,将来需要传递数组的地址值
具体的类:当你看到一个类作为方法的参数类型的时候,将来调用需要传入该类或该类的子类的对象
抽象类:当你看到一个抽象类作为方法的参数类型的时候,将来调用需要传入该抽象类具体实现子类的对象
接口:当你看到一个接口作为方法的参数类型的时候,将来调用需要传入实现了该接口的具体子类对象
具体的类作参数传递示例
class Student{
public void fun1(){
System.out.println("好好学习,天天向上!");
}
}
class StudentDemo1{
public void show1(Student student){
student.fun1();
}
}
public class Demo1 {
public static void main(String[] args) {
StudentDemo1 studentDemo1 = new StudentDemo1();
studentDemo1.show1(new Student());
}
}
抽象类作参数传递案例
abstract class Student2{
public abstract void fun1();
}
class Student2Zi extends Student2{
@Override
public void fun1() {
System.out.println("江川是世界上手速最快的男人!");
}
}
class StudentDemo2{
public void show1(Student2 student2){
student2.fun1();
}
}
public class Demo2 {
public static void main(String[] args) {
StudentDemo2 studentDemo2 = new StudentDemo2();
studentDemo2.show1(new Student2Zi());
}
}
接口作参数传递案例
interface Inter1{
void fun1();
}
class Student3 implements Inter1{
@Override
public void fun1() {
System.out.println("钱志强是世界上最有钱的男人!");
}
}
class StudentDemo3{
public void show1(Inter1 inter1){
inter1.fun1();
}
}
public class Demo3 {
public static void main(String[] args) {
StudentDemo3 studentDemo3 = new StudentDemo3();
studentDemo3.show1(new Student3());
}
}
2、返回值
基本类型: 当基本数据类型作为方法的返回值类型的时候,方法中return具体类型的数值即可
引用类型:
数组:当数组作为方法的返回值类型的时候,将来需要在方法中return该一个数组的地址值
具体的类:当类作为方法的返回值类型的时候,将来需要在方法中return该一个该类的对象
抽象类:当抽象类作为方法的返回值类型的时候,将来需要在方法中return该一个该类的具体子类对象
接口:当接口作为方法的返回值类型的时候,将来需要在方法中return该一个实现了该接口的具体子类对象
返回值为具体的类示例
class Student1{
public void fun1(){
System.out.println("李刚觉得自己是亿万富翁...");
}
}
class StudentDemo1{
public Student1 show1(){
return new Student1();
}
}
public class Demo1 {
public static void main(String[] args) {
StudentDemo1 studentDemo1 = new StudentDemo1();
Student1 s1 = studentDemo1.show1();
s1.fun1();
}
}
返回值为抽象类示例
abstract class Student2{
public abstract void fun1();
}
class Student2Zi extends Student2{
@Override
public void fun1() {
System.out.println("好好学习,天天向上!");
}
}
class StudentDemo2{
public Student2 show1(){
return new Student2Zi();
}
}
public class Demo2 {
public static void main(String[] args) {
StudentDemo2 studentDemo2 = new StudentDemo2();
Student2 s1 = studentDemo2.show1();
s1.fun1();
}
}
返回值为接口示例
interface Inter1{
void fun1();
}
class Inter1Impl implements Inter1{
@Override
public void fun1() {
System.out.println("好好学习,天天向上!");
}
}
class Student3{
public Inter1 show1(){
return new Inter1Impl();
}
}
public class Demo3 {
public static void main(String[] args) {
new Student3()
.show1()
.fun1();
}
}
3、权限修饰符
public protected 默认的 private
同一类中 √ √ √ √
同一包子类,其他类 √ √ √
不同包子类 √ √
不同包其他类 √
目前为止学过的修饰符:
权限修饰符:public,protected,默认的,private
静态修饰符:static
抽象修饰符:abstract
最终修饰符:final
类:
权限修饰符:public,默认的
抽象修饰符:abstract
最终修饰符:final
成员变量:
权限修饰符:public,protected,默认的,private
静态修饰符:static
最终修饰符:final
构造方法:
权限修饰符:public,protected,默认的,private
成员方法:
权限修饰符:public,protected,默认的,private
静态修饰符:static
最终修饰符:final
抽象修饰符:abstract
常见的修饰符组合:
1、public static final
2、public abstract
4、内部类
内部类:在一个类中定义一个类
根据定义的位置不同,分为两种内部类
成员内部类:将类定义在类中成员的位置【类中方法外】上
常见修饰成员内部类的修饰词:
private
static
局部内部类:将一个类定义在一个方法的内部,只能在方法的内部使用
class Outer2{
public void fun1(){
int a = 10;
}
public void show1(){
int b = 11;
class Inner{
public void function(){
System.out.println("好好学习,天天向上!");
}
}
b = 22;
Inner inner = new Inner();
inner.function();
}
}
public class InnerClassDemo2 {
public static void main(String[] args) {
Outer2 outer2 = new Outer2();
outer2.show1();
}
}
匿名内部类
书写格式
匿名内部类:
new 接口名/抽象类名(){
}
就意味着JVM在运行过程中做了几件事:
1、JVM内部自己创建一个类
2、这个类实现一个接口或者继承了一个抽象类
3、将这个类的对象创建出来
interface Inter1{
void fun1();
}
class Demo1{
public void show1(Inter1 inter1){
inter1.fun1();
}
}
public class NiMingClassDemo1 {
public static void main(String[] args) {
Demo1 demo1 = new Demo1();
demo1.show1(new Inter1() {
@Override
public void fun1() {
System.out.println("李刚今天下午没有睡觉...");
}
});
demo1.show1(new Inter1() {
@Override
public void fun1() {
System.out.println("江川今天下午睡觉了...");
}
});
}
}
interface Inter3 {
void show();
}
class Outer3 {
public static Inter3 method(){
return new Inter3() {
@Override
public void show() {
System.out.println("HelloWorld");
}
};
}
}
class OuterDemo {
public static void main(String[] args) {
Outer3.method().show();
}
}
包的划分
包的划分好处:
1、方便管理我们的代码文件
2、不同包下的文件名可以是一样的
常见的包命名规则:
1、按照功能划分
增加
- 学生增加
- 老师增加
删除
- 学生删除
- 老师删除
修改
- 学生修改
- 老师修改
查询
- 学生查询
- 老师查询
2、按照角色划分
学生
- 学生增加
- 学生删除
- 学生修改
- 学生查询
老师
- 老师增加
- 老师删除
- 老师修改
- 老师查询
若某一维度不会大幅度或经常性修改的话,就可以考虑将该维度定义成一个包
springboot中层划分:
configs: 存放配置文件
controller: 主要前端页面与后端交互的入口
dao: 主要是与数据库操作相关的代码
entity[pojo]: 实体类层
service: 业务层
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现