Java基础

Java基础

前篇

1. JRE、JDK

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1. Java中内存分配

虚拟机自动调用main方法,进入栈中运行
在这里插入图片描述

变量与方法

1. 面试题

1.1 成员变量与局部变量的区别有哪些

a. 概念
在这里插入图片描述
b. 作用域
在这里插入图片描述
c. 存储位置
在这里插入图片描述
d. 生命周期
在这里插入图片描述
e. 初始值
在这里插入图片描述
f. 使用原则:
在这里插入图片描述

1.2 在Java中定义一个不做事且没有参数的构造方法的作用

java在执行子类的构造方法之前,若没有指定super(…),则会默认调用父类的无参构造方法,若此时父类中只有有参构造方法,则编译时会发生错误。
在这里插入图片描述

1.3 在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是?

帮助子类做初始化工作

1.4 一个类的构造方法的作用是什么?若一个类没有声明构造方法,改程序能正确执行吗?为什么?

new一个对象的时候需要调用该类的构造方法,系统默认会创造一个不带参数的构造方法
官方:
主要作用是完成对类对象的初始化工作。可以执行。因为一个类即使没有声明构造方法也会有默认的不带参数的构造方法。

1.5 构造方法有哪些特性?

在这里插入图片描述

1.6 静态变量和实例变量区别

静态变量: 静态变量由于不属于任何实例对象,属于类的,所以在内存中只会有一份,它当且仅当在类初次加载时会被初始化,JVM只为静态变量分配一次内存空间。

实例变量: 每次创建对象,都会为每个对象分配成员变量内存空间,实例变量是属于实例对象的,在创建对象的时候被初始化,在内存中,创建几次对象,就有几份成员变量。

1.7 静态方法和实例方法有何不同?

在这里插入图片描述

1.8在一个静态方法内调用一个非静态成员为什么是非法的?

在这里插入图片描述

1.9 什么是方法的返回值?返回值的作用是什么?

在这里插入图片描述

1.10值传递和引用传递有什么区别

在这里插入图片描述

1.11 对象相等判断之==和equals的区别?

在这里插入图片描述

1.12 hashCode 与 equals

2. 构造方法

2.1. 概述

在这里插入图片描述
若想都用,则两个构造方法都手动创建。直接给对象赋值了,姓名和年龄
在这里插入图片描述

2.2. 注意事项:

在这里插入图片描述

2.3. 方法重载

2.3.1. 概述

在这里插入图片描述

2.3.2. 好处

在这里插入图片描述

2.3.3. 面试题之方法重写与重载

3.1 构造器(constructor)是否可被重写(override)?
构造器不能被继承,因此不能被重写,但可以被重载。

3.2 重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
在这里插入图片描述

面向过程和面向对象(封装、继承、多态)

1. 概念

在这里插入图片描述

2.封装

2.1 解释

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.2 面试

在这里插入图片描述

3. 继承

在这里插入图片描述
《就近原则》

重要:子类中所有的构造方法默认都会先调用父类的无参构造方法!!!

在这里插入图片描述

super关键字

3.1. 继承中访问构造方法和成员变量的特点

在这里插入图片描述

3.2. 继承中成员方法访问特点:

在这里插入图片描述

3.3. super内存图

在这里插入图片描述

3.4. 方法重写

在这里插入图片描述

3.5.java中继承的注意事项

在这里插入图片描述

3.6. 案例

在这里插入图片描述

package com.weichen.test;
public class Test_fu_zi {
   
	public static void main(String[] args) {
   
		// TODO Auto-generated method stub
		Dog dog=new Dog("狗",22);
		dog.method();
		System.out.println(dog.getName()+dog.getAge());
		
		Cat cat=new Cat("猫",22);
		cat.method();
		System.out.println(cat.getName()+cat.getAge());
	}
}
class Animal{
   
	private String name;
	private int age;
	public Animal() {
   	
	}
	public Animal(String name,int age) {
   
		this.name=name;
		this.age=age;
	}
	public void setName(String name) {
   
		this.name=name;
	}
	public void setAge(int age) {
   
		this.age=age;
	}
	public String getName() {
   
		return name;
	}
	public int getAge() {
   
		return age;
	}
}
class Dog extends Animal{
   
	public Dog() {
   
		
	}
	public Dog(String name,int age) {
   
		super(name, age);
	}
	public void method() {
   
		System.out.println("我是狗,我可以看门");
	}
	
}
class Cat extends Animal{
   
	public Cat() {
   
		
	}
	public Cat(String name,int age) {
   
		super(name, age);
	}
	public void method() {
   
		System.out.println("我是猫,我可以抓老鼠");
	}
	
}

3.7. 面试之继承

在这里插入图片描述

3.8. 面试之super关键字的使用

在这里插入图片描述
在这里插入图片描述

4. 多态

4.1 概述

在这里插入图片描述
在这里插入图片描述

4.2 多态转型内存图解

在这里插入图片描述

数组:

1. 基本使用:

package com.weichen.test;

import java.util.Arrays;

public class Array_usually {
   

	public static void main(String[] args) {
   
		// TODO Auto-generated method stub
		//声明一个数组并分配空间:必须指定数组大小
		int[] arr1=new int[2];
		int[] arr2= {
   1,2,3,4};
		int[] arr3=new int[] {
   1,2,3,4};
		
		
		//数组的遍历方式1:
		for(int score:arr1) {
   
			System.out.println(score);
		}
		
		//数组的遍历方式2
		for(int i=0;i<arr2.length;i++) {
   
			System.out.println(arr2[i]);
		}
		
		
		//Arrays数组工具类的使用
		//1. 比较两个数组是否相等
		System.out.println("比较两个数组是否相等:"+Arrays.equals(arr2, arr3));  
		
		
		//2. 对数组的元素进行升序排列
		Arrays.sort(arr3); 
		System.out.println("对数组的元素进行升序排列:");
		for(int score:arr3) {
   
			System.out.println(score);
		}
		
		//3.将一个数组转换成一个字符串
		System.out.println("将一个数组转换成一个字符串"+Arrays.toString(arr2));
		
		//4.把数组array所有元素都赋值为val
		System.out.println("把数组array所有元素都赋值为val");
		Arrays.fill(arr1, 7);
		for(int score:arr1) {
   
			System.out.println(score);
		}
		
		//5.把数组复制成一个长度为length的新数组,返回类型与复制的数组一致
		int[] new_Array =Arrays.copyOf(arr1, 5);
		System.out.println("把数组复制成一个长度为length的新数组,返回类型与复制的数组一致");
		for(int score:new_Array) {
   
			System.out.println(score);
		}
		
		
		//6.查询元素值val在数组array中的下标(要求数组中元素已经按照升序排列)
		System.out.println("查询元素值7在数组arr1中的下标(要求数组中元素已经按照升序排列)");
		System.out.println(Arrays.binarySearch(arr1, 7));
		
	}

}

2、二维数组

在这里插入图片描述
在这里插入图片描述

3. LeetCode

在这里插入图片描述

import java.util.Arrays;
public class leetcode_01 {
   
	public static void main(String[] args) {
   
		// TODO Auto-generated method stub
		int[] heights= {
   1,1,4,2,1,3};
		int count=heightChecker(heights);
		System.out.println(count);

	}

	    public static int heightChecker(int[] heights) {
   
	    	int[] new_heights=heights.clone();
	    	int count=0;
	    	Arrays.sort(new_heights);

	            for(int i=0;i<heights.length;i++){
   
	                if(new_heights[i]==heights[i]){
   
	                    count++;
	                }
	            }
	            return count;
	    }
}

在这里插入图片描述

package com.weichen.test;
public class Leetcode_arr02 {
   

	public static void main(String[] args) {
   
		// TODO Auto-generated method stub
		int[] arr= {
   1,1,1,1,1};
		Solution solution=new Solution();
		int result=solution.numOfSubarrays(arr,1,0);
		System.out.println(result);
	}
}
class Solution {
   
    public int numOfSubarrays(int[] arr, int k, int threshold) {
   
    	int count=0;    //记录满足条件的数组个数	 
    	
    	//找出子数组
    	int[] sub_arr=new int[k]; 	
    	for(int i=0;i<arr.length-k+1;i++) {
     		   		
    		int temp=i;
    		for(int j=0;j<k;j++) {
   
    			sub_arr[j]=arr[temp++];
    		}
    		if(avg(sub_arr)>=threshold) {
   
    		    count++;
        	}
    	}		
    	return count;
    }

    //求平均值
    public int avg(int[] arr) {
   
    	int sum=0;
    	for(int i=0;i<arr.length;i++) {
   
    		sum+=arr[i];
    	} 	
		return sum/arr.length; 	
    }
}

在这里插入图片描述

package com.weichen.test;

import java.util.HashSet;
import java.util.Set;

public class Leetcode_04 {
   

	public static void main(String[] args) {
   
		// TODO Auto-generated method stub
		Solution_1 solution=new Solution_1();
		int[] nums= {
   2,2,3,4,5};
		int result=solution.findRepeatNumber(nums);
		System.out.println(result);
	}

}
class Solution_1 {
   
    public int findRepeatNumber(int[] nums) {
   
    	Set<Integer> set=new HashSet<Integer>();
    	int repeat=-1;
    	for(int num:nums) {
   
    		if(!set.add(num)) {
   
    			repeat=num;
    			break;
    		}
    	}  	
    	return repeat;
    }
}

4、案例

数组反转

public class test_flower {
   
	public static void main(String[] args) {
   
		int[] arr=new int[] {
   19,28,37,
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值