JAVA基础:数组、重载、数据类型、封装、字符串、静态、继承、重写、多态、代码块、权限、接口、内部类

1 数组

//静态初始化
int[] arr1=new int[]{1,2,3,4}
//简化形式
int[] arr2={1,2,3,4}
//动态初始化
int[] arr3=new int[5]

2 方法重载

在同一个类中的多个方法的方法名相同,参数个数不同,参数类型不同,参数类型顺序不同

public class Test1 {public static void main(String[] args) {Animal animal = new Animal();animal.m(1);animal.m(1.1);animal.m(1,1.1);animal.m(1.1,1);}
}
class Animal{public void m(int n){System.out.println("int");}public void m(double n){System.out.println("float");}public void m(int n,double m){System.out.println("int n,float m");}public void m(double m,int n){System.out.println("float m,int n");}
}

3   数据类型

3.1 基本数据类型 

//数据值存储在自己空间中
int a=1;

3.2  引用数据类型         

//数据值存储在其他空间中,指向堆内存
int[] arr=new int[]{1,2,3};
//传递的地址值
int[] arr1=arr;

4 IDEA

编写代码:project->module->packege->class,自动保存和编译

快捷键:

sout:

System.out.println();

psvm:

public static void main(String[] args) {}

5 封装

私有变量+get、set方法

public class Object {
//成员变量private String name;private int age;public void setAge(int  n){
//局部变量int b=1;if(n>=18&&n<=50){age = n;}else{System.out.println("非法参数");}}public int getAge(){return age;}
}
public void setAge(int  age){if(n>=18&&n<=50){//自己传递给自己age = age;//把值传递给成员变量的age//age就近原则,this是调用者的地址值,所以this===对象类new声明的变量this.age=age;}else{System.out.println("非法参数");}}

构造方法

public class Object {//    方法名与类名相同,没有返回值,由虚拟机在创建对象的时候自动调用public Object() {}
}

6 标准javaBean

成员变量private,且提供set、get

至少两个构造方法:1 无参构造 2有全部参数构造

alt+insert:要有空参构造和全参构造 

插件快速构造

7 字符串

7.1string

是java定义好的类,定义在java.lang包,使用不需要导包

public Object() {}
//当使用双引号直接赋值,会查该字符串在串池是否存在//存在:复用,指向相同地址//不存在:创建新的String s1="abc";String s2=new String();String s3=new String("123456");char[] c={'1','2','3'};//s4与s6指向地址不同String s4=new String(c);String s6=new String(c);
//    字节数组转为字符串byte[] b={12,13,14};String s5=new String(b);
//表示内容相等么?boolean b1=s5.equals(s4);boolean b2=s5.equalsIgnoreCase(s4);
}

7.2  StringBuilder

 public static void main(String[] args) {//    创建一个可变字符串对象StringBuilder sb=new StringBuilder("abc");sb.append("de");System.out.println(sb);//abcdesb.reverse();System.out.println(sb);//edcba
//       容量sb.capacity();
//       容量内字符串长度sb.length();}

源码分析:默认创建一个长度16的字节数组,大于16会扩容

7.3  StringBuffer

String保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,String是被final修饰的类,不能被继承

StringBuffer保存的是字符串变量,里面的值可以修改

        String s1=new String("");StringBuffer sb=new StringBuffer();System.out.println(s1);//空
//        打印的是属性值System.out.println(sb);//1
//        每次加一个值sb.append(1);sb.reverse();System.out.println(sb);
//        把StringBuffer变为字符串String str=sb.toString();

7.4 StringJoiner

 StringJoiner sj=new StringJoiner("---");sj.add("111").add("222");System.out.println(sj);//111---222StringJoiner sj1=new StringJoiner("---","[","]");sj1.add("111").add("222");System.out.println(sj1);//[111---222]

拼接:

JDK8之前StringBuilder的append()方法

JDK8之后预估string拼接后大小,然后把内容放入数组,产生一个新字符串

 ==比较的是?

引用数据类型比较地址值

基本数据类型比较数据值

7.5 转换罗马数字案例

 

package DEMO1;import java.util.Scanner;public class Object {public static void main(String[] args) {String s;Scanner sc=new Scanner(System.in);while (true){s=sc.next();if(check(s)){break;}else {System.out.println("error");continue;}}StringBuilder sb=new StringBuilder();for(int i=0;i<s.length();i++){char c=s.charAt(i);sb.append(change(c-48));}System.out.println(sb);}public static String change(int number){String arr[] = {"","Ⅰ","Ⅱ","Ⅲ","Ⅳ","Ⅴ","Ⅵ","Ⅶ","Ⅷ","Ⅸ"};return arr[number];}public static boolean check(String s){if(s.length()>9){return  false;}for(int i=0;i<s.length();i++){char c=s.charAt(i);if(!(c>'0'&&c<'9'))return  false;}return true;}
}

7.6 泛型

public class Test1 {public static void main(String[] args) {
//                泛型:限定集合中存储的数据类型
//                打印的是内部数据内容
//                不能放基本数据类型,string是引用数据类型ArrayList<String> list=new ArrayList<>();list.add("aaa");list.add("bbb");list.add("ccc");list.add("ddd");list.remove("ccc");System.out.println(list);
//                删除1索引的数值是第二个值list.remove(1);System.out.println(list);
//                修改list.set(1,"eee");System.out.println(list);
//                遍历for(int i=0;i<list.size();i++){String str=list.get(i);System.out.println(str);}}
}

8 static变量

修饰成员方法、成员变量

被所有类所共享,不属于特定对象

推荐用类名调用,也可以用对象名调用

静态变量是随着类加载而加载,优先于对象出现

堆内存

工具类:不描述具体事物,而是做事情的类

私有化构造方法,不让外界创建其对象

方法定义为静态,静态方法没有this关键字

9 继承

java只支持单继承,不支持多继承,但支持多重继承

所有类都继承object类

子类不可以继承父类所有构造方法,能继承父类所有成员变量,能继承非私有的成员方法

父类、子类都有自己的虚方法表,包括非private、非static、非final

只有父类虚方法才能被子类继承和重写

public class student {String name;int age;
//    表示当前调用者的地址值
//    this是由虚拟机赋值的,而不能手动赋值public void show1(student this){System.out.println(this);
//        相当于this.nameSystem.out.println(name);};
}studentTest
public class studentTest {public static void main(String[] args) {student s1=new student();System.out.println(s1);s1.show1();}}

 调用子类父类的方法或声明

Test1.java

public class Test1 {String b="3";
}

Test2.java

public class Test2 extends Test1{public static void main(String[] args) {Test2 t2=new Test2();t2.func();}String c="2";public  void func() {System.out.println(c);//2System.out.println(b);//3System.out.println(super.b);//3System.out.println(this.b);//3}
}

成员变量访问特点:就近原则

10 重写

重写的方法名称、形参必须与父类一致,权限>父类(public>protected>不写),返回值类型<=父类

方法的重载是方法的参数个数或种类或顺序不同,方法名相同

快捷键:

 

11 多态

前提;1 有继承 2 有重写 3 父类引用指向子类对象

多态成员变量:编译运行看左边

方法:编译看左边,运行看右边

Animal.java

public class Animal {public int age=20;public static void sleep(){System.out.println("动物在睡觉");}public void func() {System.out.println("我是animal");}
}

 Dog.java

package DEMO1;public class Dog extends Animal{public int age=18;public static void sleep(){System.out.println("dog在睡觉");}@Overridepublic void func() {super.func();System.out.println("我是dog");}public void eat(){System.out.println("dog吃饭");}}

 Test1.java

package DEMO1;public class Test1 {public static void main(String[] args) {Animal animal = new Animal();animal.func();Dog dog=new Dog();dog.func();Animal Adog=new Dog();
//                子父类存在同名的非静态成员方法时,访问的是子类中重写的方法Adog.func();//我是dog
//                多态情况下,子父类存在同名的静态成员变量成员方法时,访问的是父类的成员函数Adog.sleep();//动物在睡觉
//                多态情况下,子类和父类存在同名的成员变量时,访问的时父类的成员变量System.out.println(Adog.age);//20
//                多态情况下,不能访问子类独由的方法
//                Adog.eat();
//                向下转型Dog dog1=(Dog)dog;dog1.func();//我是dog}
}

报错问题:将子类Cat的对象cat变成了兄弟类的对象dog,这就不是向下转型,因此会报ClassCastException类型转换异常

        Animal cat = new Cat();//向下转型Dog dog1 = (Dog)Adog;//调用子类独有的方法dog1.func();  
instanceof关键字
Animal Adog=new Dog();if(Adog instanceof cat){cat ca=(cat)Adog;ca.func();//我是animal}else if(Adog instanceof Dog){Dog dog2=(Dog) Adog;dog2.func();//我是dog}

12 包和final 

12.1 包

包是文件夹,管理不同java类

名称:公司域名反写+包的作用

使用java.lang包的类,不需要导包

12.2 final

不能重写、继承,常量

final 基本类型:数据不能改变

final 引用类型:(数组)地址值不能改变,内部数据可以改变

常量:全部大写,多个单词用'_'隔开

13 权限修饰符

 14 代码块

14.1 局部代码块

        public static void main(String[] args) {{int a=1;System.out.println(a);}
//                代码块执行完,a占用的内存就清除,现在基本用不到}

14.2 构造代码块

public class Test1 {
//        多个构造方法重复的代码写在构造方法块
//        构造方法块优于构造方法执行{System.out.println("我是老大");}public Test1(){System.out.println("我是老二");}public Test1(int a){System.out.println("我是老三");}public static void main(String[] args) {Test1 te=new Test1();Test1 te1=new Test1(2);}
}

节省重复代码第二种方式:

public class Test1 {public Test1(){System.out.println("我是老二");}public Test1(int a){this();System.out.println("我是老三");}public static void main(String[] args) {Test1 te=new Test1(2);}
}

14.3 静态代码块

创建子类对象实例,父类也会被加载,父类先被加载,子类后被加载

public class Test1 {public static void main(String[] args) {System.out.println(B.n1);}
}
class A{public static int n2=20000;static{System.out.println("1");}
}
class B extends A{public static int n1=10000;static {System.out.println(n2);}
}

普通代码块:每次创建一个对象就执行一次
静态代码块:只要类加载了就会被调用,只会执行一次

public class Test1 {public static void main(String[] args) {System.out.println(A.n2);A a=new A();}
}
class A{public static int n2=20000;static{System.out.println("静态代码块被调用");}{System.out.println("普通代码块被调用");}
}

 

类什么时候被加载:

1 new:A a = new A();

2 使用类的静态成员:静态成员,静态方法

15 抽象类

Animal.java

package DEMO1;
//抽象类不能被实例化
public abstract class Animal {private int age;//初始化父类成员使用public Animal(){this.age=age;}public void sleep(){System.out.println("动物在睡觉");}//只有方法的定义,没有方法的实现//有抽象方法,那么这个类必定是一个抽象类//抽象类里面可以没有抽象方法public abstract void eat();
}

Dog.java

public class Dog extends Animal{//所有非抽象子类必须重写抽象类中的抽象方法@Overridepublic void eat() {System.out.println("我是dog");}
}

Main.java

public class Main {public static void main(String[] args) {Dog do1=new Dog();do1.eat();do1.sleep();}
}

16 接口

 

Temnal->jps-> jhsdb hsdb 打开内存分析工具->file->

 

Swim.java

public interface Swim {//默认加上public static finalint a=10;//默认加上public abstractvoid method();public abstract void swim();
}

Frog.java

//要么重写所有抽象方法要么抽象类
public class Frog extends Animal implements Swim{
//    不加构造无法赋值public Frog(int age) {super(age);}public Frog(int age, String name) {super(age, name);}public Frog() {}public Frog(String name) {super(name);}@Overridepublic void eat() {System.out.println("青蛙吃");}@Overridepublic void method() {System.out.println("method");}@Overridepublic void swim() {System.out.println("青蛙游泳");}
}

Main.java

public class Main {public static void main(String[] args) {Frog fr=new Frog(18,"青蛙");System.out.println(fr.getAge()+fr.getName());fr.eat();fr.swim();}
}

实现多个接口的同名方法,重写一次即重写了各个接口的方法 

接口与接口,可以单继承,也可以多继承

Swim.java

package DEMO1;public interface Swim {
//    public 可以省略,default不能省略//接口在进行扩展的时候,不会破坏与接口相关的实现类代码public default void method1(){System.out.println("method1没有重写Swim");};public default void method2(){System.out.println("method2有重写");};public static void jing(){System.out.println("我是静态");add();};private static void add(){System.out.println("静态的私有方法,节省代码");}}

Frog.java

package DEMO1;
//要么重写所有抽象方法要么是抽象类
public class Frog  implements Swim{@Overridepublic void method1() {System.out.println("haha");}@Overridepublic void method2() {System.out.println("method2重写");}
}

Main.java

package DEMO1;public class Main {public static void main(String[] args) {Frog fr=new Frog();
//    实现的接口中存在相同名字默认方法,必须重写fr.method1();fr.method2();Swim.jing();}
}

适配器设计模式

swim.java

package DEMO1;public interface Swim {
public abstract void  swim1();
public abstract void  swim2();public abstract void  swim3();public abstract void  swim4();public abstract void  swim5();public abstract void  swim6();public abstract void  swim7();public abstract void  swim8();
}

Rubbit.java

package DEMO1;public class Rubbit implements Swim{@Overridepublic void swim1() {}@Overridepublic void swim2() {}@Overridepublic void swim3() {}@Overridepublic void swim4() {}@Overridepublic void swim5() {}@Overridepublic void swim6() {}@Overridepublic void swim7() {}@Overridepublic void swim8() {}
}

 Frog.java

public class Frog  extends Rubbit {@Overridepublic void swim5() {System.out.println("我只用swim接口的5");}
}

 Main.java

public class Main {public static void main(String[] args) {Frog fr=new Frog();fr.swim5();}
}

17 内部类 

17.1 成员内部类

JDK16之前不能定义静态变量,JDK16之后才可以定义静态变量

 Animal.java

public class Animal {class eye{ }private class hand{}public hand gethand(){return new hand();}
}

Main.java

public class Main {public static void main(String[] args) {Animal.eye ae=new Animal().new eye();
//    hand不能用上面的方法newAnimal animal=new Animal();System.out.println(animal.gethand());//DEMO1.Animal$hand@682a0b20}
}

 outer this是隐含的

17.2 静态内部类

Animal.java

package DEMO1;public class Animal {public int a=1;public static  int b=2;static class eye{public static void show(){Animal an=new Animal();System.out.println(an.a);System.out.println(b);}public  void show1(){System.out.println("3");}}
}

Main.java

package DEMO1;public class Main {public static void main(String[] args) {Animal.eye.show();
//        Animal.eye.show1();show1不是静态方法,错误Animal.eye ae=new Animal.eye();ae.show1();}
}

17.3 局部内部类

类中函数里定义的类

17.4 匿名内部类

匿名内部类不能是抽象的,只能也必须继承一个类或者实现一个接口, 无构造,无静态

public class Main {public static void main(String[] args) {
// swim是接口,{}是匿名类,实现了Swim()这个接口,new的是匿名类
// Swim是抽象类,那么{}是其子类,new表示创建没有名字的对象new Swim(){@Overridepublic  void  swim(){System.out.println("1");};}.swim();//1Swim sw=new Swim() {@Overridepublic void swim() {System.out.println("2");}};sw.swim();//2System.out.println(sw.getClass());//获取类名class DEMO1.Main$2,这个类是被临时创建}
}

应用:

package DEMO1;public class Main {public static void main(String[] args) {fun(new A(){@Overridepublic void eat() {System.out.println("eat");}});//eat}public static void fun(A s){s.eat();}interface A{public void eat();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/745761.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【javaWeb】在webapp中手动发布一个应用

标题 &#x1f432;一、为什么要在webapp中手动发布一个应用&#x1f389;二、手动发布步骤1.下载Tomcat2.解压并安装3.在webapps中创建文档 ✨三、总结 &#x1f432;一、为什么要在webapp中手动发布一个应用 好处解释灵活性手动发布应用程序可以根据自己的需求进行自定义配置…

2.24计组碎片

op(a1)说的是对a1存的数&#xff0c;即&#xff08;a1)&#xff0c;进行op操作 访存说的是访问、读写主存&#xff0c;如果是写在寄存器上&#xff0c;就不需要访存 对于C就是说&#xff0c;如果是1100-1110的话&#xff0c;就可以对应取到0000-1111&#xff0c;如果是下面那个…

Spring状态机简单实现

一、什么是状态机 状态机&#xff0c;又称有限状态自动机&#xff0c;是表示有限个状态以及在这些状态之间的转移和动作等行为的计算模型。状态机的概念其实可以应用的各种领域&#xff0c;包括电子工程、语言学、哲学、生物学、数学和逻辑学等&#xff0c;例如日常生活中的电…

基于单片机的恒压供水控制器设计

摘 要 随着我国现代化的进程不断加快&#xff0c;城市居民生活水平不断提高&#xff0c;随之而来的是房屋的翻新和重建&#xff0c;但建筑层数的不断增高&#xff0c;使得供水所需压力不断提高&#xff0c;若建筑设计时对压力判断不足&#xff0c;会导致供水时无法供应到高楼层…

2.1HTML5基本结构

HTML5实际上不算是一种编程语言&#xff0c;而是一种标记语言。HTML5文件是由一系列成对出现的元素标签嵌套组合而成&#xff0c;这些标签以<元素名>的形式出现&#xff0c;用于标记文本内容的含义。浏览器通过元素标签解析文本内容并将结果显示在网页上&#xff0c;而元…

【Jenkins】data stream error|Error cloning remote repo ‘origin‘ 错误解决【亲测有效】

错误构建日志 17:39:09 ERROR: Error cloning remote repo origin 17:39:09 hudson.plugins.git.GitException: Command "git fetch --tags --progress http://domain/xxx.git refs/heads/*:refs/remotes/origin/*" returned status code 128: 17:39:09 stdout: 17…

多线程(代码案例: 单例模式, 阻塞队列, 生产者消费者模型,定时器)

设计模式是什么 类似于棋谱一样的东西 计算机圈子里的大佬为了能让小菜鸡的代码不要写的太差 针对一些典型的场景, 给出了一些典型的解决方案 这样小菜鸡们可以根据这些方案(ACM里面叫板子, 象棋五子棋里叫棋谱, 咱这里叫 设计模式), 略加修改, 这样代码再差也差不到哪里去 … …

数码管的动态显示(三)

1.原理 data_reg寄存&#xff0c;只寄存符号位和数据位不包含小数点位。 动态数码管每个显示1ms&#xff0c;所以计数到5*10^4-1 为了将sel和seg同步&#xff0c;把sel打了一拍。 6位都使用到了可以这么计算&#xff0c;6位都显示的是数据。或者最高位显示的是小数点&#xff…

Yolo系列各代网络结构分析(一)

Yolo系列 Yolo系列算是目标检测领域的常青树了&#xff0c;从v1到最近的v9&#xff0c;一直都在不断迭代&#xff0c;不断改进&#xff0c;但是细看其各代网络的发展&#xff0c;其实还是有很多一脉相承之处以及算法设计偏好的&#xff0c;总结主要为以下几个方面&#xff1a;…

【计算机视觉】二、图像形成:1、向量和矩阵的基本运算:线性变换与齐次坐标

文章目录 一、向量和矩阵的基本运算1、简单变换1. 平移变换2. 缩放变换3. 旋转变换4. 一般线性变换 2、齐次坐标0. 齐次坐标表示1. 2D点的齐次坐标变换2. 投影空间 ( x , y , w ) (x, y, w) (x,y,w)3. 2D直线的齐次坐标表示a. 直线的参数方程表示b. 直线的法向量和原点距离表示…

深度解析Elasticsearch索引数据量过大的优化与部署策略

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 1. 分片和副本策略 1.1分片策略 1.1.1 数据量 1.1.…

sqllab第二十一关通关笔记

知识点&#xff1a; 错误注入 最大长度为32超过需要利用截取函数分段读取cookie注入base64加密会保留符号的原始属性 通过admin admin进行登录发现和第二十关显示的内容一样&#xff0c;猜测应该还是cookie注入&#xff1b; 直接截取带有cookie的数据包&#xff0c;发现uname…

【计算机网络】概述

文章目录 一、Internet 因特网1.1 网络、互联网、因特网1.2 因特网的组成 二、三种交换方式2.1 电路交换 &#xff08;Circuit Switching&#xff09;2.2 *分组交换 &#xff08;Packet Switching&#xff09;2.3 报文交换 &#xff08;Message Switching&#xff09; 三、计算…

100W-150W电阻器-TO-247模压厚膜电阻(1)

EAK封装的TO-247功率电阻器为设计工程师提供稳定的晶体管式封装的大功率电阻器件&#xff0c;功率为100W-150W。这些电阻器专为需要精度和稳定性的应用而设计。该电阻器采用氧化铝陶瓷层设计&#xff0c;可将电阻元件和安装片分开。 EAK模压TO-247厚膜功率电阻器 这种结构提供了…

Redis基本使用

Redis基本使用 1.通用命令2.基本数据类型2.1 String2.2 Hash2.3 List2.4 Set2.5 SortedSet 3. SpringDataRedis3.1 简介3.2 快速代码示例3.3 序列化 1.通用命令 针对所有数据类型的操作可以在Redis官方文档查看。以下是通用的命令。 KEYS&#xff1a;查看符合模板的所有key D…

React——react 的基本使用

前提&#xff1a;安装全局的脚手架&#xff0c;通过create-creat-app 项目名&#xff0c;我们创建好一个新项目&#xff0c;cd进去&#xff0c;通过npm start去运行该项目 注意&#xff1a;简单看下demo的配置&#xff0c;在根目录我们可以看到&#xff0c;没有任何webpack的…

rviz上不显示机器人模型(模型只有白色)

文档中的是base_footprint&#xff0c;需要根据自己所设的坐标系更改&#xff0c;我的改为base_link 如何查看自己设的坐标系&#xff1a; 这些parent父坐标系就是 同时打开rviz后需要更改成base_link

20232831 2023-2024-2 《网络攻防实践》第2次作业

目录 20232831 2023-2024-2 《网络攻防实践》第2次作业1.实验内容2.实验过程3.学习中遇到的问题及解决4.学习感悟、思考等参考资料 20232831 2023-2024-2 《网络攻防实践》第2次作业 1.实验内容 &#xff08;1&#xff09;从www.csdn.net、www.163.com等中选择一个DNS域名进行…

结构设计模式 - 组合设计模式 - JAVA

组合设计模式 一. 介绍二.代码示例2.1 定义Component2.2 定义Leaf2.3 定义Composite 三. 参考案例 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 一. 介绍 由不同的对象组合成一个…

OSI(Open Systems Interconnection)模型和TCP/IP模型

OSI模型 OSI模型是一个概念模型&#xff0c;由国际标准化组织&#xff08;ISO&#xff09;在1984年提出&#xff0c;用于促进不同系统间的通信互联。OSI模型将网络通信的过程分为七层&#xff0c;每一层都有其特定的功能&#xff0c;从下至上依次是&#xff1a; 物理层&#x…