10月31日总结
一、学习内容
1.初始化问题
一个类的成员变量(属性)他定义了之后会有默认的初始值
基础数据类型有初始值
int 0
double false
float 0.0
引用数据类型:
String null
基础数据类型:定义在方法里的变量为局部变量,必须手动初始化。
引用数据类型:同上
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5LqH65MR-1604152236471)(D:\培训学习\每日总结\10.31\10.31总结.assets\image-20201031093609152.png)]
静态常量(方法区,持久代,永久代,元数据区)
class User(){
// 静态变量的定义变量名要全部大写,中间有多个单词用_来表示
// 只存放在一个元数据区(方法区)
// 带有static的变量可以用 User.Height来调用或使用
private static String Height;
}
native
程序计数器·
2.堆栈和方法区的原理
栈的特点是先进后出
在栈帧中new一个新的区域,是在堆里申请一片空间
User user = new User();
//user就是一个内存地址~指向堆中的一个空间
方法区/永久代/持久代
存放类的class对象,静态常量,字符串,静态的方法和静态的属性
存放如方法区的静态常量,会直接进行初始化
存入到方法区的常量可以直接用class名来使用如:
class User(){
// 静态常量存入到方法区可以在Main方法中用User.直接使用
private static String USERNAME;
// set方法
public void setUSERNAME(String USERNAME){
this.USERNAME=USERNAME;
}
}
class test1(){
public static void main(String args[]){
// 在堆内申请一个空间,存放User类中的属性
User user = new User();
// 使用user地址引用其中的set方法
user.setUSERNAME("aa");
// User.USERNAME 存入到方法区的常量可以直接用class名来使用如:
System.out.println(User.USERNAME)
}
}
3.新的栈帧的添加方式:
在主方法中只要出现了一个方法的调用必然会出现一个新的栈帧。
4.斐波那契数列
package com.xinzhi;
public class Fibonacci {
public static int fibonacc(int count){
if (count == 1){
return 0;
}
if (count == 2){
return 1;
}
if(count < 1){
return -1;
}
return fibonacc(count-1)+fibonacc(count-2);
}
}
// ------------------------------
// main中的使用:
package com.xinzhi;
public class test {
public static void main(String[] args) {
System.out.println(Fibonacci.fibonacc(5));
}
}
5.自写SuperArray
package com.xinzhi;
public class SuperArrary {
private int[] array;
private int pointer=-1;
public SuperArrary(int size){
array = new int[size];
}
public SuperArrary(){
this(3);
}
public void delete(int num){
if(num < 0||num >pointer){
System.out.println("您输入的下标不合法");
}
for (int i = num+1; i < array.length; i++) {
array[i-1]=array[i];
}
pointer--;
}
public SuperArrary addarray(int date){
pointer++;
int[] temp = array;
if(pointer >= array.length){
temp = new int[array.length*2];
for (int i = 0; i <pointer ; i++) {
temp[i]=array[i];
}
}
temp[pointer]=date;
array=temp;
return this;
}
public void sort(){
for (int i = 0; i < pointer; i++) {
for (int j = 0; j < pointer-i; j++) {
if(array[j] > array[j+1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
public void point(){
for (int i = 0; i <= pointer; i++) {
System.out.println(array[i]);
}
}
}
// -----------------------------------------------------
// 简单的使用:
public static void main(String[] args) {
SuperArrary sa=new SuperArrary(3);
sa.addarray(1).addarray(6).addarray(8).addarray(2);
sa.sort();
sa.point();
}
二、附加学习
1.自动拆装箱的练习
// 转换成int类型以后计算数字在二进制下 1 的数量
Integer.bitCount(1);
// 数字转换成String类型的字符串 把123转换成用10进制来表示出来
Integer.toString(123,10);
2.递归的使用练习
public class User {
public static int Jiecheng(int n) {
if (n == 1){
return 1;
}else{
return Jiecheng(n-1)*n;
}
}
public static void main(String[] args) {
System.out.println(Jiecheng(8));
}
}
== 1){
return 1;
}else{
return Jiecheng(n-1)*n;
}
}
public static void main(String[] args) {
System.out.println(Jiecheng(8));
}
}