2020-09-22

Java中的数组

1.JAVA中的数组
java确保数组会被初始化,而且不能在他的范围之外被访问。每个引用都会自动被初始化为null。在使用任何引用前,必须为其指定一个对象。可以创建用来存放基本数据类型的数组,编译器也能确保这种数组的初始化,因为它会将这种数组所占的内存全部置零。
数组两大特性:1.内存连续 2.类型相同

//定义数组
int [] a;
int b[];
//初始化
a=new int [10];
a[0]=3;
System.out.printlh(a)//输出a的首地址
for(int i=0;i<10;i++){
System. out.println(a[i]);}//输出除a[0]为3,其他全为0,因为未赋值自动初始化为0
int []c={2,3,4,5,6};
//for-each循环
for(int i:c){
System. out.println(i+" ");//输出数组c中所有的值
}

2.永远不需要销毁对象:
对象生命周期从new开始到垃圾站自动回收结束。
变量生命周期由花括号决定作用,作用域决定了其内定义的变量名的可见性和生命周期。
int x=12; {int a=3; int x=5;//报错。此处代码在c和C++中是合法的,但在java中却不能这样书写。 }
当用new创建一个java对象时,它可以存活于作用域之外。

string s=new String("a string");

引用s在作用域终点就消失了,然而,s指向的是对象仍然继续占据内存空间。在这一小段代码中,我们无法在这个作用域之后访问这个对象,因为对它唯一的引用已经超出了作用域的范围
java有一个垃圾回收器,用来监视用new创建的所有对象,并辨别那些不会再被引用的对象。随后,释放这些对象的内存空间,以便供其他新的对象使用。
3.static关键字
当声明一个事物是static时,就意味着这个域或方法不会与包含它的那个类的任何对象实例关联在一起。

Dog a=new Dog();
Dog.run(8,5);//直接用对象调用函数
……
static int run(x,y)
{……}

static 方法的一个重要用法就是在不创建任何对象的前提下就可以调用它。

class StaticTest{
static int i=47;
}
StaticTest st1=new StaticTest();
StaticTest st2=new StaticTest();
//st1.i与st2.i指向同一存储空间





4.对象赋值:

public  class demo3{
public static void f(A y){
y.num=20;
}
public static void main(String[] args)
{
A x=new A();
x.num=10;
System.out.println(x.num)//输出10;
f(x);
System.out.println(x.num)//输出20;
}
}
class A{
int num;
}
public demo3{
public static void main(String[] args)
{A t1=new A();
A t2=new A();
t1.num=10;
t2.num=20;
System.out.println(t1.num+t2.num)//输出30;
t1=t2;//对象赋值,两对象指向同一存储空间System.out.println(t1.num+t2.num)//输出40;
t1.num=30;//由于赋值操作的是一个对象的引用,所以修改t1的同时也改变了t2,这是由于t1和t2包含的是相同的引用,他们指向相同的对象。
System.out.println(t1.num+t2.num)//输出60
t1. num=t2. num这样便可以保持两个对象彼此独立,而不是将t1和t2绑定到相同的对象。
}
}
class A{
int num;
}

5.注释文档:
1.javadoc输出的是一个HTML文件,可以用Web浏览器查看。
2.所有javadoc命令都只能在“/**”注释里出现,注释结束于“*/”。
3.独立文档标签是一些以“@”字符开头的命令,并且置于注释行的最前头。
4.javadoc只能为public(公共)和protected(受保护)成员进行文档注释。private(私有)和包内可访问成员的注释会被忽略掉。
6.编译风格:
1.类名首字母要大写
2.如果类名由几个单词构成,那么把它们并在一起(也就是说,不要用下划线来分隔名字)其中每个内部字母都采用大写形式。
3.“驼峰风格”:只是标识符的第一个字母采用小写,其他所有内容与类风格一致。
7.操作符:
1.“=”、“==”、和“!=”,这些操作符能操作所有对象。String类支持“+”和“+=”
2.int x =1;y=2;z=3; int a=x+y+z; int b=x+(y-2)/(2+z); System.out.println("a="+a+“b=”+b);
System.out.println()语句包含“+”操作符。在这种上下文环境中,“+”意味着“字符串连接”,并且如果有必要,它还要执行“字符串转换”。当编译器观察到一个String后面紧跟一个“+”,而这个“+”的后面又紧跟一个非String类型的元素时,就会尝试着将这个非String类型转的元素转换为String.
8.关系操作符(测试对象等价性):

Integer a1=new Integer(47);
Integer a2=new Integer(47);
System. out.println(n1=n2);//输出为false
System. out. println(n1!=n2);
/*输出为true。尽管两个Integer对象都是相同的,然而对象的引用却是不同的。*/

1.基本类型用==或!=即可。
2.对象比较必须使用特殊方法equals().
3.由于equals()的默认行为是比较引用。所以除非在自己的新类中覆盖equals()方法,否则不可能表现出我们希望的行为。

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值