ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2022/7/27 第七组陈美娜 代码块/类内部/设计模式

2022-07-29 21:34:26  阅读:148  来源: 互联网

标签:27 内部 静态 访问 实例 static 2022 设计模式 方法


类的内部结构:属性,方法,构造器,代码块,内部类

一.代码块:
静态代码块:一个类被加载时会被调用一次,做一些初始化工作

方法体里能写啥,他就能写什么

static{

}
实例代码块:有实例(创建兑现)的情况下,被加载时会被调用一次
{

}
Ch01 ch01=new ch01();
初始化块
  • 类的一个成员,将逻辑语句封装在...中,通过{ }包裹,只有{},没有方法名,没有参数,没有返回值,

  • 它是不需要通过对象或类进行显式的调用

  • 它会在类加载或者创建对象时,主动的隐式调用,就像tostring的默认调用一样,就是不能像tostring一样能够调出来

面试题:
  • 当没有继承关系时,就一个类,构造器,实例块,静态块同时存在------------------先执行静态块,实例块,构造器

  • 当有继承关系,父类静态--子类静态--父类实例块---父类构造器--子类实例块---子类构造器 总结:父类优于子类,静态块优于其它

二.static

能够修饰属性,方法和代码块,内部类

用static修饰的结构,不属于任何一个对象,只属于类,

能用新创一个对象,但是不推荐

this,super

无论是this还是super,都不可以在静态结构中使用。

内存机制:
  • 栈放变量,static定义的都会放在不会被回收的方法区

  • 不属于某一个实例对象,只存在于方法区,可能会有好几个变量指向,它与此相反,堆里面的就属于实例对象,只被指向同一个变量

  • java中有垃圾回收机制,普通变量用完之后,就会被当作垃圾回收掉

  • static就是让变量不被当做垃圾回收

  • 开发中尽量不用静态,因为方法区会满,也会占内存

public class ch03{

   static String name="";//属性

   public static void show(){    //静态方法
       
  }  
   
       public static void main(){

       System.out.Println(Ch03.name);
       //一般情况下要先创建对象再调用属性,不依赖对象直接类名.属性
       Ch03.show();
   
      }
}
实例方法和静态方法的互相调用:

1.静态方法中可以直接调用实例方法吗

不可以,静态方法只能调静态方法,要掉的话需要实例化,static里面是class(静态先出来的)

2.实例方法中可以直接调用静态方法吗

可以

总结:static是先创建的,实例是在static后面创建的,

所以想要实例调用先创建的轻而易举

静态的结构,随着类的创建而加载

非静态的结构,随着对象的创建而加载

3.在java中调用实例方法,必须要有主体,不能直接调用

{//实例化

this.fun();//省略了this

this.show();
class.name;
}

*4.静态方法无论在哪里都是类名.方法名,同一个类的可以省略类名

静态方法:Array.tostring(),

工具类
public class Demo01{

public static void plUS(int i,int j)   {

}

}//直接class.plus

继承关系:has,is,use(参数);

外部类():2:09:09上午

一个public声明的类,类名必须和类名必须和.java的文件名相同

生成的.class文件是两个独立的class

image-20220727202547621

 

 

内部类:实例内部类,静态内部类

类的组成结构:属性,方法,构造器,代码块,内部类

定义: 在一个类内部里进行其他类结构的嵌套操作

image-20220727211741406

实例内部类

image-20220727212624913

如何创造对象?先有外,后内
//Inner inner=new Inner();//普通类创对象
//Ch01 ch01=new Ch01(); //外部类创对象
//Inner inner=ch01.Inner; //先外
Inner inner=new Ch01().new Inner();
实例内部类里什么都能放

方法:public void show(){}

构造器:public Inner(){}

内部类:class Innerinner{}

属性:privte String name;

也能放外部类的继承,就是不能放一切静态的

不能放主方法

实例内部类
  1. 可以直接访问外部类的所有成员,包含私有

  2. 可以添加任意访问修饰符

  3. 成员内部类–访问—>外部类成员 【访问方式:直接访问】

  4. 外部类–访问—>成员内部类 【访问方式:创建对象,再访问】

  5. 外部其他类–访问—>成员内部类

  6. 如果外部类和内部类的成员重名时,内部类访问的话,默认遵循就近原则,如果想访问外部类的成员,则可以使用(外部类名.this.成员)访问

实例内部类(有对象)中能写静态代码块吗?

内部类是残缺的类,

内部类中,静态代码块只能写在静态内部类中,

因此实例内部类中只能写实例代码块{}

 

静态内部类

image-20220727213355974

  1. 可以直接访问外部类的所有静态成员,包含私有的,但不能直接访问非静态成员

  2. 静态内部类–访问—>外部类 【访问方式:直接访问所有静态成员】

  3. 外部类–访问—>静态内部类 【访问方式:创建对象,再访问】

  4. 外部其他类–访问—>静态内部类

只要是静态,想要调用就是{类名.()}

其次得用构造器创对象

InnerStatic innerStatic=
new ch01.InnerStatic();

静态内部类能放什么?

静态类的也能放,实例类的也能放

主方法也能放

外部类和内部类的区别
  • 定义了外部类之后,和原先的类是并列的独立的关系

  • 定义了内部类之后,与原来的类是包含关系

     

匿名内部类(1:22:03)

不能有静态

不能使用抽象方法(本身就是抽象)

设计模式

概念:人们为软件开发中抽象出可重复利用的解决方案

软件开发工程师之间

面向对象的设计原则:

1.开闭原则(Open Close Principle)

对扩展开放(方法的重写),对修改关闭(继承,实现接口)

通过“抽象约束,封装变化”来实现开闭原则

通过接口或者抽象类为软件定义一个相对稳定的抽象层

讲相同的可变因素封装在相同的具体实现类中,派生一个实体类(继承,实现)就可以

2.里氏代换原则

在子类继承父类时,除了添加新的方法完成新增的功能之外,尽量不要重写父类的方法(想要添加新功能,直接添加功能就行,不要去重写方法)

3.依赖倒转原则

要面向接口编程,不要面向实现编程

a.每个类尽量提供接口或抽象类,或者两者兼备(约束条件为接口,)

b.变量的类型声明尽量是接口或者抽象类

c.任何类都不应该从具体类派生

d.使用继承时,要遵循里氏代换原则

4.接口隔离原则

要使用多个隔离的接口

5.迪米特法则

6.合成复用原则

7.单一原则:一个类只做一件事

类的单例设计模式:

就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法

第一种:饿汉式单例模式

a在该类内部产生一个唯一的实例对象,把他封装成static类型

b别人不能new,构造器私有化,不能在类的外部通过new去实例化

c定义一个静态方法返回这个唯一的对象

image-20220727144343606

 

静态变量是变量,想变常量前面加final

static final C   //常量

饿汉式:不管以后会不会用到,先创出来

第二种:懒汉式单例模式(延迟加载)

什么时候调用getInstance方法,什么时候实例化

1.先将实例化对象设为属性

2.依然将构造器私有化

image-20220727151153952

懒汉式在多线程环境中完全错误,根本不能保证单例的状态

饿汉式与懒汉式的区别

a.二者最主要的区别在于创建对象的时机不同:饿汉式是在类加载就创建了对象实例,而懒汉式是在使用是才创建。

b.饿汉式不存在线程安全问题,懒汉式存在线程安全问题

c.饿汉式存在浪费资源的可能。因为如果程序员一个对象实例都没有使用,那么饿汉式创建对象就浪费了,懒汉式是使用时才创建,就不存在这个问题

3.内部类实现单例

也是懒汉式的问题,只不过没有线程(卡)问题

image-20220727154707256

*6.箭头函数:

JDK8新特性;jdk8以后的新特性:

可以用注解@FunctionalInterface来标识

函数式接口:
如果一个接口只有一个抽象方法,这个接口称为函数式接口

image-20220728131858938

image-20220728132538006

几种写法:

1.有参数,有返回值

(i,j)->{return i+j;}

如果方法体只是一句返回值(i,j)->i+j

image-20220728133334667

2.有参数,无返回值

(i,j)->{}

3.无参

标签:27,内部,静态,访问,实例,static,2022,设计模式,方法
来源: https://www.cnblogs.com/nanaxin/p/16533606.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有