精华内容
下载资源
问答
  • Java创建数组的方法

    万次阅读 多人点赞 2018-10-13 22:43:01
    最近在学Java,一点小心得,希望和大家分享一下,第一次写文章,写的不好希望大家谅解,当然我也会尽力写好这篇文章!本章介绍的创建数组的各种方法,并对它们进行了对比和剖析,最后还扩展了一些知识。

    最近学Java,一点小心得,希望和大家分享一下,第一次写文章,写的不好希望大家谅解,当然我也会尽力写好这篇文章!

    Java创建数组的方法大致有三种

    说明:这里以int为数据类型,以arr为数组名来演示

    一、声明并赋值

    int[] arr = {1,2,4, …};
    注意这里的花括号不是语句块,而且而且花括号后的分号也不能省,…不是元素意思是可以指定多个元素

    二、声明数组名开辟空间并且赋值

    int[] arr;
    arr = new int[]{1,2,3, …};

    三、声明数组时指定元素个数然后赋值

    int[] arr1= new int[3];
    注意:最大元素下标为2,并且所有的元素值均为0
    赋值一般用for循环

    四、在以上的基础上创建多维数组

    1. int[][] arr = {{1,2,3},{4,5,6},{7,8,9}}; //每个子数组元素个数不要求均相同
    2. int[][] arr = new int[m][n]; //其中n可以省略,在创建的时候可以指定
    3. int[][][] arr = new int[m][n][q]; //同样其中n、q可以省略

    总结

    • 无论那种方法声明必须有 :数据类型 [ ] , 如:int[ ]
    • 创建多维数组时,new后面的第一个方括号中的元素数量总不能省略
    • “new 数据类型[]{}”创建数组时,其中花括号可以省去,但要在“[ ]”中填写数组的个数

    各个创建数组的方法使用演示如下

    方法一:

    int[] arr2 = {10,20,30};
      for(int element:arr2) {
       System.out.print(element+"\n");//其中 "\n" 是换行
      }
    

    输出结果:

    10
    20
    30
    

    方法二:

    char[] arr4 ;  //char型输入时要用单引号(')引着!
      arr4 = new char[] {'a','b','c'};
      for(char element:arr4) {
       System.out.print(element + "  ");
      }
    

    输出结果:

    a   b   c 
    

    方法三:

      int[] arr = new int[10];
         //换成i<10 或i<=9   因为 arr[10]不存在  强行调用会出错(溢出)!
      for(int i = 0;i<=9;i++) {
       arr[i]=i;
       System.out.print(arr[i]+"  ");
      }
    

    输出结果:

    0 1 2 3 4 5 6 7 8 9 
    

    方法四

    1.
    int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
    矩阵形式输出为:
    1 2 3
    4 5 6
    7 8 9
    
    1.
    int[][] arr = new int[m][n];
    在赋值时使用for循环
    for(int i=0;i<m;i++){
    	for(int j=0;j<n;j++){
    		arr[i][j] = int;	
    	}
    }
    若声明时省略n,赋值时须在内层循环中生成新一维数组
    for(int i=0;i<m;i++){
    	arr[i] = new int[数量];
    }
    

    二维以上的数组使用的不多,又因为使用方法同二维基本相同,所以在这里就不再演示了。

    内容扩展

    1. for each语句(增强性for循环)

    用于对数组或实现Iterator接口的列表(ArrayList、LinkedList)集合(Set)等容器对象进行遍历。

    格式:

    for (数据类型 : emelent){
     	System.out.println(emelent);
    }
    

    应用代码:

    int[] arr2 = {10,20,30};
      for(int element:arr2) {
       System.out.print(element+"\n");
      }
    

    运行结果:

    10
    20
    30
    

    2.length属性 与 length()方法

    二者区别:

    • length属性是针对Java中的数组来说的,要求数组的长度可以用其length属性
    • length()方法是针对字符串来说的,要求一个字符串的长度就要用Java的length()方法
    • Java中的size()方法是针对泛型集合(Set)或列表(List)说的,如果想看这个泛型容器中有多少元素,就调用此方法

    应用代码:

    for(int i=0;i<arr5.length;i++) {
       arr5[i]=i;
    }
    

    3.Arrays的toString方法

    作用: 将数组的元素生成字符串,数组的各个元素使用方括号括着 [ ]
    格式: Arrays.toString(数组名称)
    注意: 此方法不能用于直接获得二维数组
    应用代码:

    int[] arr = {111,222,333};
    System.out.println(Arrays.toString(arr));
    

    运行结果:

    [111, 222, 333]
    

    希望以上对大家有帮助!


    想了解作者更多,请移步我的个人网站,欢迎交流、留言~
    极客技术空间:https://elltor.com/

    展开全文
  • Java创建对象详解:Java创建对象的几种方法

    万次阅读 多人点赞 2019-05-10 20:01:32
    Java 对象的生命周期包括创建、使用和清除,本文详细介绍对象的创建,在 Java 语言中创建对象分显式创建与隐含创建两种情况。 显式创建对象 对象的显式创建方式有 4 种。 1. 使用 new 关键字创建对象 这是常用的创建...

    对象是对类的实例化。对象具有状态和行为,变量用来表明对象的状态,方法表明对象所具有的行为。Java 对象的生命周期包括创建、使用和清除,本文详细介绍对象的创建,在 Java 语言中创建对象分显式创建隐含创建两种情况。

    显式创建对象

    对象的显式创建方式有 4 种。

    1. 使用 new 关键字创建对象
    这是常用的创建对象的方法,语法格式如下:
    类名 对象名=new 类名();

    2. 调用 java.lang.Class 或者 java.lang.reflect.Constuctor 类的 newlnstance() 实例方法
    在 Java 中,可以使用 java.lang.Class 或者 java.lang.reflect.Constuctor 类的 newlnstance() 实例方法来创建对象,代码格式如下:
    java.lang.Class Class 类对象名称=java.lang.Class.forName(要实例化的类全称);
    类名 对象名=(类名)Class类对象名称.newInstance();

    调用 java.lang.Class 类中的 forName() 方法时,需要将要实例化的类的全称(比如 com.mxl.package.Student)作为参数传递过去,然后再调用 java.lang.Class 类对象的 newInstance() 方法创建对象。

    3. 调用对象的 clone() 方法
    该方法不常用,使用该方法创建对象时,要实例化的类必须继承 java.lang.Cloneable 接口。 调用对象的 clone() 方法创建对象的语法格式如下:
    类名对象名=(类名)已创建好的类对象名.clone();

    4. 调用 java.io.ObjectlnputStream 对象的 readObject() 方法

    下面创建一个示例演示常用的前三种对象创建方法。示例代码如下:

    public class Student implements Cloneable
    {   
        //实现 Cloneable 接口
        private String Name;    //学生名字
        private int age;    //学生年龄
        public Student(String name,int age)
        {    //构造方法
            this.Name=name;
            this.age=age;
        }
        public Student()
        {
            this.Name="name";
            this.age=0;
        }
        public String toString()
        {
            return"学生名字:"+Name+",年龄:"+age;
        }
        public static void main(String[] args)throws Exception
        {
            System.out.println("---------使用 new 关键字创建对象---------");
           
            //使用new关键字创建对象
            Student student1=new Student("小刘",22);
            System.out.println(student1);
            System.out.println("-----------调用 java.lang.Class 的 newInstance() 方法创建对象-----------");
           
            //调用 java.lang.Class 的 newInstance() 方法创建对象
            Class cl=Class.forName("Student");
            Student student2=(Student)cl.newInstance();
            System.out.println(student2);
            System.out.println("-------------------调用对象的 clone() 方法创建对象----------");
            //调用对象的 clone() 方法创建对象
            Student student3=(Student)student2.clone();
            System.out.println(student3);
        }
    }
    
    

    对上述示例的说明如下:

    使用 new 关键字或 Class 对象的 newInstance() 方法创建对象时,都会调用类的掏造方法。
    使用 Class 类的 newInstance() 方法创建对象时,会调用类的默认构造方法,即无参构造方法。
    使用 Object 类的 clone() 方法创建对象时,不会调用类的构造方法,它会创建一个复制的对象,这个对象和原来的对象具有不同的内存地址,但它们的属性值相同。
    如果类没有实现 Cloneable 接口,则 clone。方法会抛出 java.lang.CloneNotSupportedException 异常,所以应该让类实现 Cloneable 接口。

    程序执行结果如下:

    ---------使用 new 关键字创建对象---------
    学生名字:小刘,年龄:22
    -----------调用 java.lang.Class 的 newInstance() 方法创建对象-----------
    学生名字:name,年龄:0
    -------------------调用对象的done()方法创建对象----------
    学生名字:name,年龄:0
    

    隐含创建对象

    除了显式创建对象以外,在 Java 程序中还可以隐含地创建对象,例如下面几种情况。
    ①String strName=“strValue”,其中的“strValue”就是一个 String 对象,由 Java 虚拟机隐含地创建。
    ②字符串的“+”运算符运算的结果为一个新的 String 对象,示例如下:
    String str1=“Hello”;
    String str2=“Java”;
    String str3=str1+str2; //str3引用一个新的String对象
    ③当 Java 虚拟机加载一个类时,会隐含地创建描述这个类的 Class 实例。

    **提示:**类的加载是指把类的 .class 文件中的二进制数据读入内存中,把它存放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Class 对象,用来封装类在方法区内的数据结构。

    无论釆用哪种方式创建对象Java 虚拟机在创建一个对象时都包含以下步骤:

    1. 给对象分配内存。
    2. 将对象的实例变量自动初始化为其变量类型的默认值。
    3. 初始化对象,给实例变量赋予正确的初始值。

    注意: 每个对象都是相互独立的,在内存中占有独立的内存地址,并且每个对象都具有自己的生命周期,当一个对象的生命周期结束时,对象就变成了垃圾,由 Java 虚拟机自带的垃圾回收机制处理。

    展开全文
  • Java创建线程池的正确方法

    万次阅读 多人点赞 2018-11-10 11:17:57
    Executors的创建线程池的方法创建出来的线程池都实现了ExecutorService接口。常用方法有以下几个: a、newFiexedThreadPool(int Threads):创建固定数目线程的线程池。 b、newCachedThreadPool():创建一个可...

    Executors的创建线程池的方法,创建出来的线程池都实现了ExecutorService接口。常用方法有以下几个:

    a、newFiexedThreadPool(int Threads):创建固定数目线程的线程池。

    b、newCachedThreadPool():创建一个可缓存的线程池,调用execute 将重用以前构造的线程(如果线程可用)。如果没有可用的线程,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有 60 秒钟未被使用的线程。

    c、newSingleThreadExecutor()创建一个单线程化的Executor。

    d、newScheduledThreadPool(int corePoolSize)创建一个支持定时及周期性的任务执行的线程池,多数情况下可用来替代Timer类。

    看起来功能还是比较强大的,又用到了工厂模式、又有比较强的扩展性,重要的是用起来还比较方便,如:

    ExecutorService executor = Executors.newFixedThreadPool(nThreads) ;
    即可创建一个固定大小的线程池。

    但是为什么我说不建议大家使用这个类来创建线程池呢?

    Executors存在什么问题
    在阿里巴巴Java开发手册中提到,使用Executors创建线程池可能会导致OOM(OutOfMemory ,内存溢出),但是并没有说明为什么,那么接下来我们就来看一下到底为什么不允许使用Executors?

    我们先来一个简单的例子,模拟一下使用Executors导致OOM的情况

    public class ExecutorsDemo {
        private static ExecutorService executor = Executors.newFixedThreadPool(15);
        public static void main(String[] args) {
            for (int i = 0; i < Integer.MAX_VALUE; i++) {
                executor.execute(new SubThread());
            }
        }
    }
    
    class SubThread implements Runnable {
        @Override
        public void run() {
            try {
                Thread.sleep(10000);
            } catch (InterruptedException e) {
                //do nothing
            }
        }
    }


    通过指定JVM参数:-Xmx8m -Xms8m 运行以上代码,会抛出OOM:

    Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
        at java.util.concurrent.LinkedBlockingQueue.offer(LinkedBlockingQueue.java:416)
        at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1371)
        at com.hollis.ExecutorsDemo.main(ExecutorsDemo.java:16)

    以上代码指出,ExecutorsDemo.java的第16行,就是代码中的executor.execute(new SubThread());。

    Executors为什么存在缺陷
    通过上面的例子,我们知道了Executors创建的线程池存在OOM的风险,那么到底是什么原因导致的呢?我们需要深入Executors的源码来分析一下。

    其实,在上面的报错信息中,我们是可以看出蛛丝马迹的,在以上的代码中其实已经说了,真正的导致OOM的其实是LinkedBlockingQueue.offer方法。

    Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
        at java.util.concurrent.LinkedBlockingQueue.offer(LinkedBlockingQueue.java:416)
        at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1371)
        at com.hollis.ExecutorsDemo.main(ExecutorsDemo.java:16)

    翻看代码的话,也可以发现,其实底层确实是通过LinkedBlockingQueue实现的:

    public static ExecutorService newFixedThreadPool(int nThreads) {
            return new ThreadPoolExecutor(nThreads, nThreads,
                                          0L, TimeUnit.MILLISECONDS,
                                          new LinkedBlockingQueue<Runnable>());


    如果读者对Java中的阻塞队列有所了解的话,看到这里或许就能够明白原因了。

    Java中的BlockingQueue主要有两种实现,分别是ArrayBlockingQueue 和 LinkedBlockingQueue。

    ArrayBlockingQueue是一个用数组实现的有界阻塞队列,必须设置容量。

    LinkedBlockingQueue是一个用链表实现的有界阻塞队列,容量可以选择进行设置,不设置的话,将是一个无边界的阻塞队列,最大长度为Integer.MAX_VALUE。

    这里的问题就出在:**不设置的话,将是一个无边界的阻塞队列,最大长度为Integer.MAX_VALUE。**也就是说,如果我们不设置LinkedBlockingQueue的容量的话,其默认容量将会是Integer.MAX_VALUE。

    而newFixedThreadPool中创建LinkedBlockingQueue时,并未指定容量。此时,LinkedBlockingQueue就是一个无边界队列,对于一个无边界队列来说,是可以不断的向队列中加入任务的,这种情况下就有可能因为任务过多而导致内存溢出问题。

    上面提到的问题主要体现在newFixedThreadPool和newSingleThreadExecutor两个工厂方法上,并不是说newCachedThreadPool和newScheduledThreadPool这两个方法就安全了,这两种方式创建的最大线程数可能是Integer.MAX_VALUE,而创建这么多线程,必然就有可能导致OOM。

    创建线程池的正确姿势
    避免使用Executors创建线程池,主要是避免使用其中的默认实现,那么我们可以自己直接调用ThreadPoolExecutor的构造函数来自己创建线程池。在创建的同时,给BlockQueue指定容量就可以了。

    private static ExecutorService executor = new ThreadPoolExecutor(10, 10,
            60L, TimeUnit.SECONDS,
            new ArrayBlockingQueue(10));

    这种情况下,一旦提交的线程数超过当前可用线程数时,就会抛出java.util.concurrent.RejectedExecutionException,这是因为当前线程池使用的队列是有边界队列,队列已经满了便无法继续处理新的请求。但是异常(Exception)总比发生错误(Error)要好。

    除了自己定义ThreadPoolExecutor外。还有其他方法。这个时候第一时间就应该想到开源类库,如apache和guava等。

    作者推荐使用guava提供的ThreadFactoryBuilder来创建线程池。

    public class ExecutorsDemo {
    
        private static ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
            .setNameFormat("demo-pool-%d").build();
    
        private static ExecutorService pool = new ThreadPoolExecutor(5, 200,
            0L, TimeUnit.MILLISECONDS,
            new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
    
        public static void main(String[] args) {
    
            for (int i = 0; i < Integer.MAX_VALUE; i++) {
                pool.execute(new SubThread());
            }
        }
    }
    

    转载文章,备看备学!

    原文:https://blog.csdn.net/hollis_chuang/article/details/83743723

    展开全文
  • java List创建方法

    万次阅读 2013-12-24 15:00:45
    我想创建一个int类型的List,大小为13,代码如下: ...正确的创建方法如下: List list=new ArrayList(new Integer(13)); ---------------------------------------------------------------------

    我想创建一个int类型的List,大小为13,代码如下:

    List<int> list=new ArrayList<int>(13); //结果编译时出错,错误信息如下:

    Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    Syntax error on token "int", Dimensions expected after this token
    Syntax error on token "int", Dimensions expected after this token


    正确的创建方法如下:

    List<Integer> list=new ArrayList<Integer>(new Integer(13));

    ----------------------------------------------------------------------------------------------------------------------------

    错误原因:

    List是个接口,Java的List只能保存引用类型,不能保存值类型。

    int是值类型,Integer是引用类型。

    -----------------------------------------------------------------------------------------------------------------------------

    您的十分满意是我追求的宗旨。

    您的一点建议是我后续的动力。






    展开全文
  • java创建对象的方法

    万次阅读 2020-02-17 22:46:52
    2.运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。 3.调用对象的clone()方法。 4.运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法. ...
  • Java创建对象的5种方法

    千次阅读 多人点赞 2019-09-23 08:35:23
    将会列举5种方法创建 Java 对象,以及他们如何与构造函数交互,并且会有介绍如何去使用这些方法的示例。 作为一个 Java 开发人员,我们每天都会创建大量的 Java 对象,但是我们通常会使用依赖管理系统去创建这些...
  • java创建数组的方法

    千次阅读 2019-01-13 16:27:34
    *java中种创建数组的方法 */ public static void main(String[] args){ //第一种 int[] arr=new int[5]; arr[0]=10; arr[1]=11; arr[2]=12; arr[3]=13; arr[4]=14; //第二种 int[] ...
  • Java中如何创建方法

    千次阅读 2019-07-30 23:02:14
    Java中最常见的就是通过对象的方法来读取和设置对象以及做其他操作。 方法创建首先,我们要先声明方法的访问限制,如public、private等,然后可以选择性的设置非访问修饰符如,static、final等。之后我们要说明...
  • java创建进程的方法

    千次阅读 2019-05-01 11:04:21
    1.使用Runtime的exec(String cmdarray[])方法创建进程 代码如下: String [] cmd={"cmd","/c","start dir"}; Runtime rt = Runtime.getRuntime(); Process proc=rt.exec(cmd); 执行结果如下: 2.使用...
  • java创建数组的三种方法

    万次阅读 2019-07-10 20:43:45
    //创建数组的第一种方法 int[] arr=new int[6]; int intValue=arr[5]; //System.out.println(intValue); //创建数组的第二种方法 int[] x={1,2,3,4}; //System.out.println(x[1]); //...
  • JAVA语言创建链表的方法

    千次阅读 2018-03-28 11:08:54
    链表刚学习时是用c来学习...这里,我学习下用java来使用链表的方法: 首先,定义节点类 //链表节点 class Node{ protected Node next; protected int data; public Node(int data) { //构造器来赋值 // TODO Aut...
  • Java创建事件监听器的五种方法

    千次阅读 2018-11-06 09:04:30
    Java中处理事件的办法最原始的方法如下 一.使用内部类 一个个设置Button然后创建一个内部类, 用ActionPerformed来实现按钮事件内容; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent...
  • java创建类对象的各种方法

    千次阅读 2018-01-18 00:15:50
    最近听朋友提起面试题的时候,在加上整理复习汇总java基础知识,刚好写下来记录创建java对象的方法,又称为java类的实例化,有很多种,列举如下:一、使用Spring管理创建学过Spring框架的同学都知道,我们可以利用...
  • Java对象创建的流程

    千次阅读 2019-05-07 22:05:39
    文章目录Java对象创建的流程1.Java普通对象的创建1.1new指令1.2分配内存1.3初始化1.4对象的初始设置1.5\方法2.Java对象内存布局2.1对象头2.2实例数据2.3对齐填充 1.Java普通对象的创建 这里讨论的仅仅是普通Java...
  • (小白学javaJava 方法

    万次阅读 2021-07-06 19:57:44
    Java方法是语句的集合,它们在一起执行一个功能。 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 方法的优点 1.使程序变得更简短而清晰。 有利于程序维护。 ...
  • java 创建数组的三种方法

    万次阅读 2014-08-18 15:15:54
    java创建数组的三种方法

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,428,199
精华内容 971,279
关键字:

java方法的创建

java 订阅