为什么this()和super()必须是构造函数中的第一条语句?
Java要求,如果您在构造函数中调用this()或super(),则它必须是第一条语句。 为什么?
例如:
public class MyClass {public MyClass(int x) {}
}public class MySubClass extends MyClass {public MySubClass(int a, int b) {int c = a + b;super(c); // COMPILE ERROR}
}
Sun编译器说“对super的调用必须是构造函数中的第一条语句”。 Eclipse编译器说“构造函数调用必须是构造函数中的第一条语句”。
但是,您可以通过重新安排一些代码来解决此问题:
public class MySubClass extends MyClass {public MySubClass(int a, int b) {super(a + b); // OK}
}
这是另一个示例:
public class MyClass {public MyClass(List list) {}
}public class MySubClassA extends MyClass {public MySubClassA(Object item) {// Create a list that contains the item, and pass the list to superList list = new ArrayList();list.add(item);super(list); // COMPILE ERROR}
}public class MySubClassB extends MyClass {public MySubClassB(Object item) {// Create a list that contains the item, and pass the list to supersuper(Arrays.asList(new Object[] { item })); // OK}
}
因此,这不会阻止您在调用super之前执行逻辑 。 这只是在阻止您执行无法包含在单个表达式中的逻辑。
调用this()
有类似的规则。 编译器说“对此的调用必须是构造函数中的第一条语句”。
为什么编译器有这些限制? 您能否举一个代码示例,如果编译器没有此限制,那么会发生不好的事情吗?
#1楼
父类的constructor
需要在子类的constructor
之前调用。 这将确保如果您在构造函数中的父类上调用任何方法,则该父类已经正确设置。
您想要做的是,将args传递给super构造函数是完全合法的,您只需要在执行操作时内联构造这些args,或者将它们传递给构造函数,然后将它们传递给super
:
public MySubClassB extends MyClass {public MySubClassB(Object[] myArray) {super(myArray);}
}
如果编译器未强制执行此操作,则可以执行以下操作:
public MySubClassB extends MyClass {public MySubClassB(Object[] myArray) {someMethodOnSuper(); //ERROR super not yet constructedsuper(myArray);}
}
如果parent
类具有默认构造函数,则compiler
会自动为您插入对super的调用。 由于Java中的每个类都继承自Object
,因此必须以某种方式调用对象构造函数,并且必须首先执行它。 编译器自动插入super()可以实现这一点。 强制super出现在最前面,强制以正确的顺序执行构造函数主体,即:对象->父->子-> ChildOfChild-> SoOnSoForth
#2楼
我相当确定(熟悉Java规范的人),这是为了防止您(a)被允许使用部分构造的对象,以及(b)强制父类的构造函数以“新鲜”构造”对象。
一些“坏”事情的例子是:
class Thing
{final int x;Thing(int x) { this.x = x; }
}class Bad1 extends Thing
{final int z;Bad1(int x, int y){this.z = this.x + this.y; // WHOOPS! x hasn't been set yetsuper(x);}
}class Bad2 extends Thing
{final int y;Bad2(int x, int y){this.x = 33;this.y = y; super(x); // WHOOPS! x is supposed to be final}
}
#3楼
您可以在调用子级的构造函数之前,使用匿名的初始化程序块来初始化子级中的字段。 此示例将演示:
public class Test {public static void main(String[] args) {new Child();}
}class Parent {public Parent() {System.out.println("In parent");}
}class Child extends Parent {{System.out.println("In initializer");}public Child() {super();System.out.println("In child");}
}
这将输出:
在父母中
在初始化器中
在儿童中
#4楼
因为JLS是这样说的。 是否可以以兼容的方式更改JLS以允许它? 对。
但是,这会使语言规范变得复杂,这已经不够复杂了。 这样做并不是一件非常有用的事情,并且有很多解决方法(用静态方法或lambda表达式的结果this(fn())
调用另一个构造函数-该方法在另一个构造函数之前被调用,因此也超级构造函数)。 因此,进行更改的功率重量比是不利的。
请注意,仅此规则并不能防止在超类完成构造之前使用字段。
考虑这些非法的例子。
super(this.x = 5);super(this.fn());super(fn());super(x);super(this instanceof SubClass);
// this.getClass() would be /really/ useful sometimes.
这个例子是合法的,但是是“错误的”。
class MyBase {MyBase() {fn();}abstract void fn();
}
class MyDerived extends MyBase {void fn() {// ???}
}
在上面的示例中,如果MyDerived.fn
需要MyDerived
构造函数的参数,则需要使用ThreadLocal
将它们隐藏起来。 ;(
顺便提及,由于Java 1.4中,包含外部合成领域this
是内部类超级构造函数被调用之前分配。 这在为目标早期版本而编译的代码中引起了特殊的NullPointerException
事件。
另请注意,在存在不安全的出版物的情况下,除非采取预防措施,否则可以通过其他线程重新查看构造。
编辑2018年3月:在消息记录:建筑和验证甲骨文是在暗示这个限制被删除(但不像C#, this
将是构造函数链之前肯定未分配 (DU))。
从历史上看,this()或super()必须首先在构造函数中。 这种限制从来没有流行过,并且被认为是任意的。 造成这种限制的原因有很多微妙的原因,包括对invokespecial的验证。 多年来,我们已经在虚拟机级别解决了这些问题,以至于考虑解除此限制不仅对于记录,而且对于所有构造函数都是可行的。
#5楼
仅仅是因为这是继承哲学。 并且根据Java语言规范,这是定义构造函数主体的方式:
ConstructorBody:{ExplicitConstructorInvocation opt BlockStatements opt }
构造函数主体的第一条语句可以是
- 显式调用同一类的另一个构造函数(通过使用关键字“ this”); 要么
- 直接超类的显式调用(通过使用关键字“ super”)
如果构造函数主体不是以显式构造函数调用开始的,并且声明的构造函数不是原始类Object的一部分,则构造函数主体将隐式以超类构造函数调用“ super();”开头,该超类构造函数调用为它的直接超类,不带参数。 依此类推..将有整个构造函数链,一直追溯到Object的构造函数; “ Java平台中的所有类都是对象的后代”。 这件事称为“ 构造函数链接 ”。
现在为什么呢?
Java之所以以这种方式定义ConstructorBody的原因是,他们需要维护对象的层次结构 。 记住继承的定义; 它扩展了课程。 话虽这么说,您不能扩展不存在的东西。 首先需要创建基(超类),然后可以派生它(子类)。 这就是为什么他们称它们为“父母和孩子”类; 你不能没有父母就生孩子。
从技术上讲,子类从其父类继承所有成员(字段,方法,嵌套类)。 而且由于构造函数不是成员(它们不属于对象。它们负责创建对象),因此它们不会被子类继承,但是可以调用它们。 并且由于在创建对象时仅执行一个构造函数 。 那么,当您创建子类对象时,如何保证创建超类呢? 因此,“构造链接”的概念; 因此,我们可以从当前构造函数中调用其他构造函数(即super)。 Java要求此调用是子类构造函数中的FIRST行,以维护层次结构并保证层次结构。 他们假设,如果您不显式创建父对象FIRST(就像您忘记了它一样),他们将为您隐式地创建它。
此检查在编译期间完成。 但是我不确定在运行时会发生什么,我们会得到什么样的运行时错误,当我们明确尝试从子类的构造函数内部的基本构造函数中执行基本构造函数时,如果Java没有抛出编译错误,身体,而不是从第一行...
#6楼
我的猜测是,这样做是为了使编写处理Java代码的工具的人员和阅读Java代码的人员在某种程度上更轻松。
如果允许super()
或this()
调用移动,则有更多变化需要检查。 例如,如果将super()
或this()
调用移至条件if()
则可能必须足够聪明才能将隐式super()
插入else
。 如果您两次调用super()
或一起使用super()
和this()
,则可能需要知道如何报告错误。 可能需要禁止在接收器上进行方法调用,直到调用super()
或this()
为止,并弄清何时变得复杂。
让每个人都做这些额外的工作似乎比付出的代价更大。
#7楼
因此,这不会阻止您在调用super之前执行逻辑。 这只是在阻止您执行无法包含在单个表达式中的逻辑。
实际上,您可以使用多种方法执行逻辑,只需要将代码包装在静态函数中,然后在super语句中调用它即可。
使用您的示例:
public class MySubClassC extends MyClass {public MySubClassC(Object item) {// Create a list that contains the item, and pass the list to supersuper(createList(item)); // OK}private static List createList(item) {List list = new ArrayList();list.add(item);return list;}
}
#8楼
Tldr:
其他答案解决了问题的“原因”。 我将针对此限制提供一些技巧 :
基本思想是用您的嵌入式语句劫持 super
语句。 这可以通过将语句伪装为表达式来完成。
Tsdr:
考虑我们要在调用super()
之前对Statement9()
执行Statement1()
super()
:
public class Child extends Parent {public Child(T1 _1, T2 _2, T3 _3) {Statement_1();Statement_2();Statement_3(); // and etc...Statement_9();super(_1, _2, _3); // compiler rejects because this is not the first line}
}
编译器当然会拒绝我们的代码。 因此,我们可以这样做:
// This compiles fine:public class Child extends Parent {public Child(T1 _1, T2 _2, T3 _3) {super(F(_1), _2, _3);}public static T1 F(T1 _1) {Statement_1();Statement_2();Statement_3(); // and etc...Statement_9();return _1;}
}
唯一的限制是, 父类必须具有一个至少包含一个参数的构造函数,以便我们可以将表达式作为表达式潜入。
这是一个更详细的示例:
public class Child extends Parent {public Child(int i, String s, T1 t1) {i = i * 10 - 123;if (s.length() > i) {s = "This is substr s: " + s.substring(0, 5);} else {s = "Asdfg";}t1.Set(i);T2 t2 = t1.Get();t2.F();Object obj = Static_Class.A_Static_Method(i, s, t1);super(obj, i, "some argument", s, t1, t2); // compiler rejects because this is not the first line}
}
重做为:
// This compiles fine:public class Child extends Parent {public Child(int i, String s, T1 t1) {super(Arg1(i, s, t1), Arg2(i), "some argument", Arg4(i, s), t1, Arg6(i, t1));}private static Object Arg1(int i, String s, T1 t1) {i = Arg2(i);s = Arg4(s);return Static_Class.A_Static_Method(i, s, t1);}private static int Arg2(int i) {i = i * 10 - 123;return i;}private static String Arg4(int i, String s) {i = Arg2(i);if (s.length() > i) {s = "This is sub s: " + s.substring(0, 5);} else {s = "Asdfg";}return s;}private static T2 Arg6(int i, T1 t1) {i = Arg2(i);t1.Set(i);T2 t2 = t1.Get();t2.F();return t2;}
}
实际上,编译器可以为我们自动化该过程。 他们只是选择不这样做。
#9楼
我找到了解决方法。
这不会编译:
public class MySubClass extends MyClass {public MySubClass(int a, int b) {int c = a + b;super(c); // COMPILE ERRORdoSomething(c);doSomething2(a);doSomething3(b);}
}
这有效:
public class MySubClass extends MyClass {public MySubClass(int a, int b) {this(a + b);doSomething2(a);doSomething3(b);}private MySubClass(int c) {super(c);doSomething(c);}
}
#10楼
我知道我参加聚会有点晚了,但是我已经使用了几次这个技巧(而且我知道这有点不寻常):
我使用一种方法创建通用接口InfoRunnable<T>
:
public T run(Object... args);
如果需要在将其传递给构造函数之前做一些事情,请执行以下操作:
super(new InfoRunnable<ThingToPass>() {public ThingToPass run(Object... args) {/* do your things here */}
}.run(/* args here */));
#11楼
在构造子对象之前,必须先创建父对象。 如您所知,当您编写这样的类时:
public MyClass {public MyClass(String someArg) {System.out.println(someArg);}
}
转到下一个(扩展和超级隐藏):
public MyClass extends Object{public MyClass(String someArg) {super();System.out.println(someArg);}
}
首先,我们创建一个Object
,然后将该对象扩展到MyClass
。 我们不能在Object
之前创建MyClass
。 一个简单的规则是,必须在子构造函数之前调用父构造函数。 但是我们知道,类可以具有一个以上的构造函数。 Java允许我们选择一个将被调用的构造函数(它将是super()
或super(yourArgs...)
)。 因此,当您编写super(yourArgs...)
您将重新定义构造函数,该构造函数将被调用以创建父对象。 您无法在super()
之前执行其他方法,因为该对象尚不存在(但是在super()
,将创建一个对象,您将可以执行所需的任何操作)。
那么,为什么不能在任何方法之后执行this()
呢? 如您所知, this()
是当前类的构造函数。 同样,我们的类中可以有不同数量的构造函数,并像this()
或this(yourArgs...)
那样调用它们。 如我所说,每个构造函数都有隐藏的方法super()
。 当我们编写自定义的super(yourArgs...)
时,我们用super(yourArgs...)
删除了super()
super(yourArgs...)
。 同样,当我们定义this()
或this(yourArgs...)
我们也会在当前构造函数中删除我们的super()
,因为如果super()
与this()
在同一方法中一起使用,它将创建一个以上的父对象。 这就是为什么对this()
方法施加相同规则的原因。 它只是将父对象的创建传递给另一个子构造函数,该构造函数调用super()
构造函数进行父创建。 因此,代码实际上将是这样的:
public MyClass extends Object{public MyClass(int a) {super();System.out.println(a);}public MyClass(int a, int b) {this(a);System.out.println(b);}
}
正如其他人所说,您可以执行以下代码:
this(a+b);
您也可以执行如下代码:
public MyClass(int a, SomeObject someObject) {this(someObject.add(a+5));
}
但是您不能执行这样的代码,因为您的方法尚不存在:
public MyClass extends Object{public MyClass(int a) {}public MyClass(int a, int b) {this(add(a, b));}public int add(int a, int b){return a+b;}
}
另外,您必须在this()
方法链中具有super()
构造函数。 您不能像这样创建对象:
public MyClass{public MyClass(int a) {this(a, 5);}public MyClass(int a, int b) {this(a);}
}
#12楼
class C
{int y,z;C(){y=10;}C(int x){C();z=x+y;System.out.println(z);}
}class A
{public static void main(String a[]){new C(10);}
}
参见示例,如果我们正在调用构造函数C(int x)
则z的值取决于y,如果我们在第一行中未调用C()
,则z将会出现问题。 z将无法获得正确的值。
#13楼
构造函数按派生顺序完成其执行是有意义的。 因为超类不了解任何子类,所以它需要执行的任何初始化与子类执行的任何初始化是分离的,并且可能是前提。 因此,它必须首先完成其执行。
一个简单的演示:
class A {A() {System.out.println("Inside A's constructor.");}
}class B extends A {B() {System.out.println("Inside B's constructor.");}
}class C extends B {C() {System.out.println("Inside C's constructor.");}
}class CallingCons {public static void main(String args[]) {C c = new C();}
}
该程序的输出为:
Inside A's constructor
Inside B's constructor
Inside C's constructor
#14楼
实际上, super()
是构造函数的第一条语句,因为要确保其超类在构造子类之前已完全形成。 即使您的第一条语句中没有super()
,编译器也会为您添加它!
#15楼
您能否举一个代码示例,如果编译器没有此限制,那么会发生不好的事情吗?
class Good {int essential1;int essential2;Good(int n) {if (n > 100)throw new IllegalArgumentException("n is too large!");essential1 = 1 / n;essential2 = n + 2;}
}class Bad extends Good {Bad(int n) {try {super(n);} catch (Exception e) {// Exception is ignored}}public static void main(String[] args) {Bad b = new Bad(0);
// b = new Bad(101);System.out.println(b.essential1 + b.essential2);}
}
构造期间的异常几乎总是表示正在构造的对象无法正确初始化,现在处于错误状态,无法使用,并且必须进行垃圾回收。 但是,子类的构造函数可以忽略在其父类之一中发生的异常并返回部分初始化的对象。 在上面的示例中,如果提供给new Bad()
的参数new Bad()
0或大于100,则essential1
和essential2
都不会正确初始化。
您可能会说忽略异常总是一个坏主意。 好,这是另一个例子:
class Bad extends Good {Bad(int n) {for (int i = 0; i < n; i++)super(i);}
}
好笑,不是吗? 在此示例中,我们要创建多少个对象? 一? 二? 也许什么都没有...
允许在构造函数的中间调用super()
或this()
将打开潘多拉盒子的令人讨厌的构造函数。
另一方面,我知道在调用super()
或this()
之前经常需要包含一些静态部分。 这可能是任何不依赖this
引用的代码(实际上, this
引用已经存在于构造函数的最开始,但是在super()
或this()
返回之前无法有序使用)并且需要进行此类调用。 另外,像在任何方法中一样,有可能在调用super()
或this()
之前需要创建一些局部变量。
在这种情况下,您有以下机会:
- 使用此答案中显示的模式,可以避免这种限制。
- 等待Java团队允许pre-
super()
和pre-this()
代码。 这可以通过对super()
或this()
在构造函数中可能出现的位置施加限制来完成。 实际上,即使是今天的编译器,也能够以足以安全地允许在构造函数开始时添加静态代码的程度来区分好和坏(或潜在的坏)情况。 确实,假设super()
和this()
返回this
引用,然后,构造函数将
return this;
在末尾。 以及编译器拒绝代码
public int get() {int x;for (int i = 0; i < 10; i++)x = i;return x;
}public int get(int y) {int x;if (y > 0)x = y;return x;
}public int get(boolean b) {int x;try {x = 1;} catch (Exception e) {}return x;
}
错误“变量x可能尚未初始化”,它可以this
变量执行this
,就像对其他任何局部变量一样对其进行检查。 唯一的区别是this
不能由比其它的任何方法来指定super()
或this()
调用(和往常一样,如果在一个构造没有这样的呼叫, super()
被隐含由编译器在开始插入的)和可能不会分配两次。 如有任何疑问(例如在第一个get()
,实际上x
总是被分配),编译器可能会返回错误。 这比在任何在super()
或this()
之前除了注释之外的构造函数上简单地返回错误要好。
#16楼
那是因为您的构造函数依赖于其他构造函数。 为了使您的构造函数正常工作,它对其他依赖于其他构造函数的正常工作必不可少。 这就是为什么必须首先检查依赖构造函数的原因,该构造函数在构造函数中由this()或super()调用。 如果其他通过this()或super()调用的构造函数有问题,那么执行其他语句是什么,因为如果调用的构造函数失败,所有语句都会失败。
#17楼
我完全同意,限制太严格了。 使用静态辅助方法(如Tom Hawtin-粘性线建议)或将所有“ pre-super()计算”推入参数中的单个表达式并不总是可能的,例如:
class Sup {public Sup(final int x_) { //cheap constructor }public Sup(final Sup sup_) { //expensive copy constructor }
}class Sub extends Sup {private int x;public Sub(final Sub aSub) {/* for aSub with aSub.x == 0, * the expensive copy constructor is unnecessary:*//* if (aSub.x == 0) { * super(0);* } else {* super(aSub);* } * above gives error since if-construct before super() is not allowed.*//* super((aSub.x == 0) ? 0 : aSub); * above gives error since the ?-operator's type is Object*/super(aSub); // much slower :( // further initialization of aSub}
}
正如Carson Myers建议的那样,使用“尚未构建的对象”异常会有所帮助,但是在每次构建对象时检查此异常会减慢执行速度。 我希望Java编译器能够更好地进行区分(而不是因此禁止if语句,但允许在参数中使用?运算符),即使这会使语言规范变得复杂。
#18楼
您问为什么,其他答案imo并没有真正说出为什么可以调用您的super的构造函数,但前提是它是第一行。 原因是您没有真正调用构造函数。 在C ++中,等效语法为
MySubClass: MyClass {public:MySubClass(int a, int b): MyClass(a+b){}};
当您这样看到初始化器子句时,在大括号之前,您会知道它很特殊。 它在构造函数的其余部分运行之前运行,实际上在任何成员变量初始化之前运行。 对于Java来说并没有什么不同。 有一种方法可以让一些代码(其他构造函数)在构造函数真正开始之前,子类的任何成员初始化之前运行。 那样的话就是把“ call”(例如super
)放在第一行。 (从某种意义上说, super
或this
有点在第一个开括号之前,即使您在后面键入,因为它会在您完全构建完所有东西之前执行。) (例如int c = a + b;
)使编译器说“哦,好的,没有其他构造函数,那么我们就可以初始化所有内容。” 因此它开始运行,并初始化您的超类,成员和诸如此类的东西,然后在大括号之后开始执行代码。
如果几行后,它遇到一些代码,说“哦,是的,当您构造此对象时,这是我希望您传递给基类的构造函数的参数”,这为时已晚,并且没有有任何道理。 因此,您会收到一个编译器错误。
#19楼
通过链接构造函数和静态方法,我找到了解决此问题的方法。 我想做的事情看起来像这样:
public class Foo extends Baz {private final Bar myBar;public Foo(String arg1, String arg2) {// ...// ... Some other stuff needed to construct a 'Bar'...// ...final Bar b = new Bar(arg1, arg2);super(b.baz()):myBar = b;}
}
因此,基本上是基于构造函数参数构造一个对象,将该对象存储在一个成员中,并将该对象上的方法结果传递给super的构造函数。 使成员成为最终成员也很重要,因为该类的性质是不变的。 请注意,碰巧碰巧,构造Bar实际上需要几个中间对象,因此在我的实际用例中,它不能简化为单一形式。
我最终使它像这样工作:
public class Foo extends Baz {private final Bar myBar;private static Bar makeBar(String arg1, String arg2) {// My more complicated setup routine to actually make 'Bar' goes here...return new Bar(arg1, arg2);}public Foo(String arg1, String arg2) {this(makeBar(arg1, arg2));}private Foo(Bar bar) {super(bar.baz());myBar = bar;}
}
合法代码,它完成了在调用超级构造函数之前执行多个语句的任务。
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 【转】java后端解决跨域问题
1. java过滤器过滤 允许整个项目跨域访问,可通过filter来进行过虑: public class SimpleCORSFilter implements Filter{ @Override public void destroy() { } @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IO…...
2024/5/6 21:28:21 - JAVA基础20.1.7
Number和Math类方法 number子类:Integer、Long、Byte、Double、Float、Short(int是基本类型,非number子类;int和Integer的区别在于,int必须有一个值,比如零一二三四,而Integer可以为null,比如考试时一个学生缺考,成绩为零,那么缺考需要用Integer表示,成绩则Integer和…...
2024/5/6 21:28:17 - 一次写入数据库的异常
今天从A表中读取一个DateTime类型的数据,然后写进另一个B表中,但是写的数据不能精确到后面的毫秒数,看了看代码中读取的DateTime变量。看上图也有毫秒位,排除读A表的问题。看看数据库里的内容:真是日了狗了,毫秒部分哪去了????后来找到问题所在了String.Format("…...
2024/5/10 13:45:13 - 图像处理框架PIL(二)——利用PIL制作验证码
from PIL import Image, ImageDraw, ImageFont import numpy as np 第一、验证码文字生成 1. 第一验证码中的字母的生成:无法直接生成字母,但是字母和数字之间可以通过ASCII值可以进行转换 规则是:数字65~90为26个大写英文字母,数字97~122号为26个小写英文字母。所以只要生…...
2024/5/6 21:28:09 - 关于vue项目中,使用require动态加载本地图片
vue中使用require(path)报错let path = "@/assets/imgs/cloud/Directory.svg" require("@/assets/imgs/cloud/Directory.svg") // 直接应用不会报错 require(path) // 使用变量报错,路径未找到原因:webpack本身是一个预编译的打包工具,无法预测未知变量…...
2024/5/6 20:12:15 - Spring集成jedis简单实例
jedis是redis的java客户端,spring将redis连接池作为一个bean配置。redis连接池分为两种,一种是“redis.clients.jedis.ShardedJedisPool”,这是基于hash算法的一种分布式集群redis客户端连接池。另一种是“redis.clients.jedis.JedisPool”,这是单机环境适用的redis连接池。…...
2024/5/6 21:28:01 - synchronized:对象锁、类锁
https://www.cnblogs.com/houzheng/p/9084026.html 一、对象锁和类锁 1.对象锁:也就是方法锁 是针对一个对象实例的,它只在该对象的某个内存位置声明一个标识该对象是否拥有锁,所以它只会锁住当前的对象,而并不会对其他对象实例的锁产生任何影响,不同对象访问同一个被sync…...
2024/5/6 21:27:58 - QML类型系统
QML类型系统在QML文档中的对象层次结构定义中可以使用的类型可以来自各种来源。它们可能是:由QML语言本地提供QML模块通过C ++注册由QML模块作为QML文档提供基本类型基本型是一种指的是简单的值,例如一个int或一个string。这与QML对象类型相反,QML对象是指具有属性,信号,方…...
2024/5/8 16:47:03 - knn算法的优缺点
简述K近邻算法的优缺点 优点 1、简单,易于理解,易于实现。 2、只需保存训练样本和标记,无需估计参数,无需训练。 3、不易受小错误概率的影响。经理论证明,最近邻的渐进错误率最坏时不超过两倍的贝叶斯错误率,最好时接近或达到贝叶斯错误率。 缺点 1、K的选择不固定。 2、…...
2024/5/6 21:27:51 - void类型和void* 的用法
转自:https://www.cnblogs.com/yuanyongbin/p/8058755.htmlC语言中的void 和 void * 总结1、void的作用c语言中,void为“不确定类型”,不可以用void来声明变量。如:void a = 10;如果出现这样语句编译器会报错:variable or field ‘a’ declared void。在C语言中void 常常…...
2024/5/6 21:27:45 - Oracle创建用户、角色、授权、建表
oracle数据库的权限系统分为系统权限与对象权限。系统权限( database system privilege )可以让用户执行特定的命令集。例如,create table权限允许用户创建表,grant any privilege 权限允许用户授予任何系统权限。对象权限( database object privilege )可以让用户能够对各个…...
2024/5/6 21:27:41 - Spring AOP事务处理
4.1Spring 中事务简介 4.1.1事务定义 事务(Transaction)是一个业务,是一个不可分割的逻辑工作单元,基于事务可以更好的保证业务的正确性。 4.1.2事务特性 事务具备ACID特性,分别是: 原子性(Atomicity):一个事务中的多个操作要么都成功要么都失败。 一致性(Consisten…...
2024/5/6 21:27:37 - 乱码问题
乱码问题 提交问题出现乱码post乱码:过滤器解决;<!-- 解决post乱码问题 --><filter><filter-name>encoding</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><!-- 设置编码参是UTF…...
2024/5/6 21:27:33 - Yarn 的一些配置项
minimum-allocation 为了易于管理资源和调度资源,Hadoop YARN内置了资源规整化算法,它规定了最小可申请资源量、最大可申请资源量和资源规整化因子,如果应用程序申请的资源量小于最小可申请资源量,则YARN会将其大小改为最小可申请量,也就是说,应用程序获得资源不会小于自…...
2024/5/6 21:27:29 - C++类 二叉排序树删除节点
BinaryTreeNode: 节点类 BinaryTree:二叉排序树类//删除一个节点自身 template<typename T> BinaryTreeNode<T>* BinaryTreeNode<T>::RemoveSelf() {//分三种情况//第一种情况:要删除的是叶子节点,改变父节点的指向,删除该节点if (nullptr == pLeft &…...
2024/5/6 21:27:25 - Spring Boot 五种热部署方式,再也不用老重启了!
1、模板热部署在 Spring Boot 中,模板引擎的页面默认是开启缓存的,如果修改了页面的内容,则刷新页面是得不到修改后的页面的,因此我们可以在application.properties中关闭模版引擎的缓存,如下:Thymeleaf的配置:spring.thymeleaf.cache=falseFreeMarker的配置:spring.fr…...
2024/5/6 8:33:21 - Nagios基本理论及原理
概念一款免费开源的IT基础设施监控系统,除了主机还能监控交换机路由器等网络设备 结构上分为两部分1.核心功能 -- 轻量化2.插件特性:1.监控网络服务 2.监控主机资源(cpu,内存等) 3.主动通知(发现异常报警功能) 4.web页面 5.可扩展(插件)优点1.轻量级,架构简单 2.容…...
2024/5/6 21:27:21 - python3截取图片
import os from PIL import Imagedef cut_img(img_path):# 打开一张图img = Image.open(img_path)# 图片尺寸img_size = img.sizeimg_h = img_size[1] # 图片高度img_w = img_size[0] # 图片宽度x = 0.2*img_wy = 0.3*img_hw = 0.5*img_wh = 0.6*img_hprint(h:+str(h))print(…...
2024/5/6 21:27:17 - 第十节-SpringBoot使用拦截器
1.实现HandlerInterceptor ,重写方法 public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {System.out.printl…...
2024/5/6 21:27:13 - 深度学习(9)神经网络训练中Epoch、Batch Size和iteration
深度学习(9)梯度下降EPOCHSBATCH SIZEiteration示例 你肯定经历过这样的时刻,看着电脑屏幕抓着头,困惑着:「为什么我会在代码中使用这三个术语,它们有什么区别吗?」因为它们看起来实在太相似了。 梯度下降 为了理解这些术语有什么不同,你需要了解一些关于机器学习的术语…...
2024/5/6 21:27:09
最新文章
- 67万英语单词学习词典ACCESS\EXCEL数据库
这似乎是最多记录的英语单词学习词典,包含复数、过去分词等形式的单词。是一个针对想考级的人员辅助背单词学英语必备的数据,具体请自行查阅以下的相关截图。 有了数据才能想方设法做好产品,结合权威的记忆理论,充分调动用户的眼…...
2024/5/10 16:04:05 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/5/9 21:23:04 - 【精选】发布应用到应用商店的基本介绍
摘要 本文旨在介绍如何在各大应用商店发布应用,包括市场选择、准备材料、上架步骤以及常见被拒原因及解决方法。通过详细的步骤和经验分享,帮助开发者顺利将应用推向市场。 引言 随着移动应用市场的不断发展,越来越多的开发者希望将他们的…...
2024/5/10 12:48:08 - ssm框架中各层级介绍
1、Spring(业务逻辑层): Spring框架提供了依赖注入(DI)和面向切面编程(AOP)等功能,可以帮助管理Java应用程序中的对象依赖关系和提供横切关注点的支持。 在SSM框架中,S…...
2024/5/10 0:21:53 - 面试算法-140-接雨水
题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2…...
2024/5/10 0:11:31 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/10 12:36:12 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/9 15:10:32 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/9 4:20:59 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/7 11:36:39 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/6 1:40:42 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/8 20:48:49 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/7 9:26:26 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/8 19:33:07 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/5 8:13:33 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/8 20:38:49 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/10 10:22:18 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/9 17:11:10 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57