Records In Java - Full Tutorial - The Best New Java Feature You're Not Using

Sdílet
Vložit
  • čas přidán 17. 04. 2022
  • How to use Records in Java!
    Complete Java course: codingwithjohn.thinkific.com/...
    Records are a new concept added to the Java language as a preview feature in Java 14, and in a full release in Java 16. In this intermediate Java programming tutorial, we will talk all about when you would want to use Java records, and exactly how to do it.
    If you're confused by records in Java, you're in the right place!
    Learn or improve your Java by watching it being coded live!
    Hi, I'm John! I'm a Lead Java Software Engineer and I've been in the programming industry for more than a decade. I love sharing what I've learned over the years in a way that's understandable for all levels of Java learners.
    Let me know what else you'd like to see!
    Links to any stuff in this description are affiliate links, so if you buy a product through those links I may earn a small commission.
    📕 THE best book to learn Java, Effective Java by Joshua Bloch
    amzn.to/36AfdUu
    📕 One of my favorite programming books, Clean Code by Robert Martin
    amzn.to/3GTPVhf
    🎧 Or get the audio version of Clean Code for FREE here with an Audible free trial
    www.audibletrial.com/johnclean...
    🖥️Standing desk brand I use for recording (get a code for $30 off through this link!)
    bit.ly/3QPNGko
    📹Phone I use for recording:
    amzn.to/3HepYJu
    🎙️Microphone I use (classy, I know):
    amzn.to/3AYGdbz
    Donate with PayPal (Thank you so much!)
    www.paypal.com/donate/?hosted...
    ☕Complete Java course:
    codingwithjohn.thinkific.com/...
    codingwithjohn.com

Komentáře • 539

  • @libertymedicalcommunicatio4908

    Congrats on almost reaching 100K. This one should put you over the top.

  • @Mahmoudalkasem1997
    @Mahmoudalkasem1997 Před 2 lety +74

    The best person on CZcams that explains java in such a great way

    • @pavelsakun2308
      @pavelsakun2308 Před 2 lety +2

      If you didn't see anyone better doesn't mean he is the best ;-) He is good anyway.

    • @Mahmoudalkasem1997
      @Mahmoudalkasem1997 Před 2 lety +6

      @@pavelsakun2308 this is my opinion and l am free to think whatever I want right ;)

  • @keionvergara7608
    @keionvergara7608 Před 2 lety +89

    you were the reason i got a 5 on my ap comp sci A exam!! you truly have impacted my education and taught me more than my highschool teacher did in 5 months !

  • @Nanagos
    @Nanagos Před 2 lety +9

    I recently found out about Records but there are just no good tutorials about it. I'm glad you made one now.

    • @CodingWithJohn
      @CodingWithJohn  Před 2 lety +1

      Thanks! Yeah there's surprisingly little out there so far. Probably just because it's pretty new.

  • @GreatProgrammerHsin
    @GreatProgrammerHsin Před 2 lety +18

    please never stop making videos, these are so helpful!

  • @iCybqr
    @iCybqr Před 2 lety +36

    Could you do a video on Consumer, Predicate, and Supplier? I mostly understand what they do, but not when to use them.

    • @YtubeUserr
      @YtubeUserr Před 6 měsíci +2

      if you are reading this John, please make this video happen! Thanks!

  • @pclclau
    @pclclau Před 2 lety +82

    At 5:00 you mention that Java generates a default, no-arg constructor *even if* you don't create other constructors. That isn't quite true, Java creates a no-arg constructor *only if* you don't create other constructors. This is why your fields get red underlines as soon as you manually create the no-arg constructor, because there would be a way to have final fields that aren't initialized as soon as the object is created. Before you manually created the no-arg constructor this wasn't a problem, because Java wouldn't generate one since you already had the previous one created.

    • @eufraniodiogo50
      @eufraniodiogo50 Před 2 lety +8

      That's absolutely true, maybe it was just a runtime exception(subclass of Exception) at his speech. lol

    • @KaraSuraDraw1
      @KaraSuraDraw1 Před 2 lety +3

      I don’t get what you mean. I feel like your comment just justified what he said. Or do you think he meant even if you have other constructors Java always generates a default no-arg constructor? I think he just put it there for visuals of a no-arg constructor. Because i got that what you said from the video.

    • @pclclau
      @pclclau Před 2 lety +8

      @@KaraSuraDraw1 He said that Java provides a no-arg constructor no matter what constructor you already have definded. That's not true.

    • @alfasolarenergy
      @alfasolarenergy Před 2 lety +2

      When you create an object of the Class two things happes: 1. MEMORY IS ALLOCATED, 2. THE CONSTRUCOR IS CALLED. By default Java offers a 0 argument construcotrs which are 0 for numeric types, and false for boolean and null. The moment we create our impemtation of constructor ( a constructor which initialize fields) the 0 arg one is no longer called.

    • @TechiiEngineer
      @TechiiEngineer Před 2 lety +1

      True , if you have created just an args-constructor ;
      You cant created object as : new Employee();
      That means Employee class doesn’t have no arg constructor ;
      You have to create one.

  • @arnddeshives147
    @arnddeshives147 Před 2 lety +17

    There is a lot of content like this out there, but you are so much better than the rest in terms of tempo, order, quality and presentation, thank you so much! I started studying CS half a year ago and your videos are 5x quicker at explaining the same thing than my prof. Although sometimes there is some depth missing, but it's good that your videos don't get lost in that, that's what makes it so good. Maybe it would be great if there was a playlist for in depth knowledge as well though.

  • @leeamraa
    @leeamraa Před 2 lety +13

    Quality, effective, efficient and much appreciated content.

  • @pradiptaspointofview1475
    @pradiptaspointofview1475 Před 2 lety +2

    Explained quite clearly with detailed examples. Excellent tutorial! This is what I needed to start working with Records in Java.

  • @BkSMedia
    @BkSMedia Před rokem +4

    I've been learning Java in my CS degree for the last three years, I had no idea records were a thing!!! So cool!

  • @sijanbhandari7569
    @sijanbhandari7569 Před 2 lety +1

    Thanks for teaching me more about records, I was always teaching my fellow programmers about this in my workplace.

  • @huskydreaming
    @huskydreaming Před 2 lety +10

    I am advanced in java but it is great to see someone explain it so concise. Amazing explanation on these types of videos. Keep it up!

  • @Markki28
    @Markki28 Před 2 lety +1

    awesome as always, thank you for sharing man, I am familiar with records but I'm not aware that I can do specific field validations directly into it, that's very useful thanks man

  • @simonrozendal7542
    @simonrozendal7542 Před 2 lety

    Hi John. Even when i write Java programs quite a while, i still learn new thing from you. Thank you, you are presenting good Java content. Kind regards, Simon Rozendal.

  • @randomuserrandom8613
    @randomuserrandom8613 Před 2 lety

    Thank you so much. This was very helpful and the way you explain things makes it so easy to understand them. Keep up the good work, John!

  • @MrLuMax5
    @MrLuMax5 Před 2 lety

    Great video. Especially for those who know the basics and are interested in new Java Features after J11. Keep these up!

  • @katisbetter2952
    @katisbetter2952 Před 2 lety +1

    Keep up with the good work, you’re helping a lot of people 🙏🏻

  • @nischalofchrist
    @nischalofchrist Před 2 lety +1

    Thank you, I've always wanted to learn about Records.

  • @argonwheatbelly637
    @argonwheatbelly637 Před rokem

    Guitars 🎸, drums 🥁, and programming. 💻 Yep! You're definitely part of my tribe. Excellent video! Keep it up.

  • @bischoffdev
    @bischoffdev Před 2 lety

    I thought I knew all about records (and I am using those extensively) but this is the first time I heard about the compact constructor! Thanks a lot!

  • @sameersafi6128
    @sameersafi6128 Před 2 lety +7

    The way of teaching is totally different.. thank you so much for the deep knowledge that you are sharing... kindly make tutorial on stream api in future

  • @emilmathew2257
    @emilmathew2257 Před 2 měsíci

    Have been following your videos for a while now. Thank you for the awesome content 😊

  • @jimjimjimjimjim6572
    @jimjimjimjimjim6572 Před 2 lety

    Nice pace, and super clear, cheers my man

  • @ccmawil20
    @ccmawil20 Před 2 lety

    Explanation is clean and clear. please publish more videos like this. Thanks

  • @eperrone
    @eperrone Před 2 lety

    Not a Java developer but I have to read Java and Groovy all the time. Your videos are great background to help me understand what I’m looking at. Great stuff.

  • @mohamedsaleh5970
    @mohamedsaleh5970 Před 2 lety

    You helped me understand concepts that was difficult to understand on my own.

  • @electricant55
    @electricant55 Před 2 lety +43

    Except for that neat overriding constructor, it seems like Lombok is still a more useful option, unless you can put annotations on the fields declared in record for things like JPA or JSON serialization

    • @Darya-pu6ik
      @Darya-pu6ik Před 2 lety

      what is Lombok?

    • @ThiagoHenriqueDS
      @ThiagoHenriqueDS Před 2 lety +14

      @@Darya-pu6ik It's a library that allows you to use annotations in order to create things like getters, setters, equals methods, etc.
      For example, instead of write getters and setters you just use the annotation @Data, @Getter or @Setter above a constructor:
      @Getter
      @Setter
      public Car(String color, String name) {
      }

    • @Darya-pu6ik
      @Darya-pu6ik Před 2 lety

      @@ThiagoHenriqueDS thanks, looks helpful!

    • @shivk498
      @shivk498 Před 2 lety +3

      Lombok is indeed very useful but it still a third party plugin. Java is usually known for its cumbersome syntax but such awesome improvements like records would make java lovers more excited.

    • @pavelsakun2308
      @pavelsakun2308 Před 2 lety +1

      Seeing comments like this makes me think other devs are spending a lot of time to generate POJOs/DTOs and that's hardly true. That kind of objects is being written once and the rest 99+% of time is spent for writing business logic, so even with what vanilla java and IDEs are providing I do not see HUGE problem of implementing them without record/lombok. The only exception here is readability, but...do you really often open classes named '*DTO" for reading? I really doubt.

  • @raz0229
    @raz0229 Před 2 lety +3

    You are so underrated! Hope you reach 1 mil subs soon

  • @RamGorre
    @RamGorre Před 2 lety +1

    That's an awesome no BS explanation. Too good.

  • @olivierbegassat851
    @olivierbegassat851 Před 8 měsíci

    Your exposition is always so direct and simple. I love it 🙂

  • @mastershonobi110
    @mastershonobi110 Před 2 lety +3

    Thanks John!!! Always looking for ways to improve and writing clearer/better code.

    • @mastershonobi110
      @mastershonobi110 Před 2 lety

      Side Note…are you using Java 17 or 16? B/c “records” is not supported in Java 11.

  • @Jody-nf2bz
    @Jody-nf2bz Před rokem

    Very well explained, readable size text, excellent class! Thank you!

  • @shankar7435
    @shankar7435 Před rokem

    Never thought learning Java would be such a pleasure. A decade ago, I was frustrated with the Java Reference book and left learning java and continued with my day job in DB language. Now, I am learning java without any issues with the help of youtube. Thanks to the youtube community.

  • @chenchi6623
    @chenchi6623 Před 8 měsíci

    I like the style of teaching, very clear examples and no bs, earned a sub...

  • @fazithfouseen1548
    @fazithfouseen1548 Před 2 lety +6

    Hi John, Please upload Microservices and spring boot tutorials as well

  • @mustapharaimilawal8053
    @mustapharaimilawal8053 Před 2 měsíci

    Thanks a lot for doing this tutorial. Clear, easy to follow explanation as always.

  • @maneshipocrates2264
    @maneshipocrates2264 Před 2 lety

    Thanks alot John. This talk should be included in the official doc.

  • @PratikKumar42
    @PratikKumar42 Před 2 lety +1

    Great video, these really helps alot.

  • @antonkimberg8914
    @antonkimberg8914 Před 2 lety +2

    Hi John,
    Thank you for your superb content. Me and other group of people from Estonia are learning Java and your channel helps us to understand hard material in a simple way.
    Could you please make a video tutorial about streams in future?
    Thank you in advance,
    Tony

  • @andres98
    @andres98 Před 2 lety

    I was waiting for this video so badly :))

  • @AbdelhameedGamal-ki7th
    @AbdelhameedGamal-ki7th Před 5 měsíci

    So simple and clear explanation. I really appreciate your help.

  • @ayberkctis
    @ayberkctis Před 2 lety +1

    Hey John!
    If i knew Records before, i would use them in my previous task in my company because they fitted my task perfectly!
    Thank you for your effort :)

  • @longtran12345678
    @longtran12345678 Před 2 lety +1

    your videos really help me to focus on Java again :)

  • @lucashenrique6076
    @lucashenrique6076 Před 2 lety +1

    Thanks for the Video John! Greetings from Brazil 😉

  • @bacon37460
    @bacon37460 Před 2 lety +1

    Nice feature, thanks John for sharing it with us.

  • @Naimadmdp
    @Naimadmdp Před rokem

    Nice content mate, thanks for share!!!

  • @JorgetePanete
    @JorgetePanete Před 2 lety

    Perfect tutorial, much appreciated!

  • @tuna5395
    @tuna5395 Před rokem +1

    Thanks bro you helped with my project !

  • @DMoots
    @DMoots Před dnem

    Thanks John, this video really set the Record straight for me!

  • @sandunicula6185
    @sandunicula6185 Před 2 lety +1

    Great presentation! Thanks!

  • @WisomofHal
    @WisomofHal Před 2 lety

    Wow, awesome video! There are many ways I can think of to use Records.

  • @givemepepsipls536
    @givemepepsipls536 Před 2 lety

    he best person on CZcams that explains java in such a great way

  • @haidaraibrahim9195
    @haidaraibrahim9195 Před 2 lety

    I've watched all of your videos and they r really really helpful and easy to understand, seriously.. u're an amazing teacher and I wish all success for u and ur channel.
    Small demand: I'd like to learn about Streams in ur way the next tutorial, if that's fine, however, any tutorial u make wod be awesome.
    Thx man, you're LaJend (J refers to "Java legend"🙂)

  • @hunelysium
    @hunelysium Před rokem

    Hello John,
    it's always great to listen to your explanations on Java! Thank you for your valuable wisdom!!
    On a side note, noticed your voice and the way you talk has changed since you become a father :)
    Hope you and your family well during this different times!
    Keep making thus great videos, always love watching them!

  • @jaspreet821
    @jaspreet821 Před 8 měsíci

    Great episode my man!! 😮😮

  • @davidfernandotorres3484

    Amazing bro! Thanks for the info

  • @jaimesastre6393
    @jaimesastre6393 Před 2 lety

    really cool!!!
    Spring had some simplification,
    but here it's much better and has also interesting options!
    Thanks 👍👍

  • @RicardoSilvaTripcall
    @RicardoSilvaTripcall Před 2 lety

    Great explanation !!! Congrats ....

  • @cverde1234
    @cverde1234 Před 2 lety +6

    This is really similar to records in C#. We don't have compact constructors though. I think compact constructors are really neat.

  • @guestmode867
    @guestmode867 Před 2 lety +1

    Tip: If you want to store mutable objects in records:
    public record EmployeeRecord (java.util.concurrent.atomic.AtomicReference name, int employeeNumber) {} /* Here, _only the value of AtomicReference name_ (a String) is mutable; the value can be changed with employeeRecord.name().set("John"); and can be gotten with employeeRecord.name().get(); */
    (or)
    import java.util.concurrent.atomic.*;
    public record EmployeeRecord (AtomicReference name, AtomicInteger employeeNumber) {} /* Here, _both_ the values stored by name and employeeNumber (String and _int_ respectively) are mutable. The value of employeeNumber can be changed by employeeRecord.employeeNumber().set(x); (x must be an int or an Integer (if it is an Integer, it will be unboxed)) and can be gotten with employeeRecord.employeeNumber().get(); */
    /* FAQ: employeeRecord.employeeNumber().get() returns a variable of type int (may autobox to Integer). If employeeNumber is to be directly of type Integer, it should be declared as java.util.concurrent.atomic.AtomicReference employeeNumber . */

  • @TakeshySun
    @TakeshySun Před 2 lety +5

    @
    Coding with John , Hi, could you please record a video about Java 8 features like Optional and Streams. It will be so wonderfully. And big thank you for short and really useful videos!

  • @Atom-Mercury
    @Atom-Mercury Před 10 měsíci

    Very well explained. Thank you kindly.

  • @budiardjo6610
    @budiardjo6610 Před 4 měsíci

    after i am learning about memory management, stack and heap and jvm internals i could really understanding this properly what a powerfull feature

  • @RahulSingh-qe4sw
    @RahulSingh-qe4sw Před rokem

    Thank you so much , explaination was very nice.

  • @B-Billy
    @B-Billy Před 11 měsíci

    That's a really good teaching... Thanks 🎉

  • @ting-yuhsu4229
    @ting-yuhsu4229 Před 2 lety

    This is amazing! Thank you :D

  • @MortenSlottHansen
    @MortenSlottHansen Před 11 měsíci

    Nice and precise explanation without any fuzz 🎉

  • @anantharamu80
    @anantharamu80 Před 2 lety

    Love this. Very informative.

  • @chacha-bm4jc
    @chacha-bm4jc Před 2 lety +2

    Thanks a lot John! Would be there any video about sealed classes? It is also quite cool feature

  • @ChristienChapman
    @ChristienChapman Před 2 lety

    Good tutorial. I will use this from now on, much more simple way to do the same thing. God bless you.

  • @KarolKasperek
    @KarolKasperek Před rokem

    u have the best java keyword's tutorials, ty

  • @bouaddiismail
    @bouaddiismail Před 2 lety +1

    great lesson as always , grettings from Morocco

  • @ayed-al-nator
    @ayed-al-nator Před rokem

    Beautiful video 💚 thank you 😊

  • @DevPieter
    @DevPieter Před 2 lety

    This is sick! I wanted to find this sooner 😥

  • @AHMED-ry2gy
    @AHMED-ry2gy Před 2 lety

    Hey John, Congrats on reaching 110K, please do videos on java streams, java sockets, Mockito and MVC in the future, thank you

  • @frankjuuh
    @frankjuuh Před 2 lety

    Love you, John. Best teacher.

  • @kirankumarsukumar
    @kirankumarsukumar Před rokem

    Omg. You are so amazing at teaching. Thanks Master Yoda

  • @janjonas270
    @janjonas270 Před 2 lety +8

    Holy crap, how have I never heard of this? No Java CZcamsr that I've came across has ever mentioned that records even exist. I've always thought they were similar to annotations, so I've never used them.
    This removes so much redundant boilerplate from typical one use-data storage classes.

    • @gronccoravioli
      @gronccoravioli Před 2 lety +3

      That's because they're a really new addition

    • @HrHaakon
      @HrHaakon Před 2 lety

      Why haven't you just used @Value and @Data until now?

  • @evagor730
    @evagor730 Před rokem

    Wonderful explanation! Thank you! Shorty and clear)

  • @overrim13
    @overrim13 Před 2 lety

    Thank you for explaining some unexplored topic

  • @BillyCha00
    @BillyCha00 Před 2 lety +1

    Hi John, you are the best!! please upload Microservices and spring boot tutorials :)

  • @raoufbenabdelwahed6362

    well explained as usual !

  • @kenway346
    @kenway346 Před 2 lety

    I randomly stumbled upon this video and ended up subscribing to your channel :)

  • @shivk498
    @shivk498 Před 2 lety

    Java is usually known for its cumbersome syntax but such awesome improvements like records would make java lovers more excited.

  • @matiasmoresi5040
    @matiasmoresi5040 Před rokem

    Mindblown by this feature!

  • @FLStudioTutorialz
    @FLStudioTutorialz Před 2 lety +1

    Awesome. Thanks.

  • @djpharaohoftime3200
    @djpharaohoftime3200 Před rokem

    Interesting feature well explained thank you.

  • @vladimirspasov5591
    @vladimirspasov5591 Před 2 lety +1

    Great explanation

  • @MrFluteboy1980
    @MrFluteboy1980 Před 10 měsíci

    This video reminds me so much of the mCoding video on python Data classes!

  • @javalady
    @javalady Před měsícem

    Wow that was cool, thank you 😍

  • @salimnegan7289
    @salimnegan7289 Před 2 lety

    Hi i am a french student , we started the poo this week , i think this vidéo gonna help me 😄

  • @darkworld8544
    @darkworld8544 Před 2 lety +1

    Hi John thank Q for ur valuable information sharing love from India 🇮🇳

  • @Speiger
    @Speiger Před 2 lety +33

    Looks like Records are like Lombock. I assume they have the same pitfalls you can run into if you are not careful.
    But this tutorial was really nice, I haven't touched these yet, but i see for myself already tons of usecases for this.
    Especially for like singleton function classes, where you have your builder and then the object that executes said code.
    Keep up the work!

    • @hellowill
      @hellowill Před 2 lety +1

      It's not as powerful as Lombok unfortunately

    • @Speiger
      @Speiger Před 2 lety +2

      ​@@hellowill But it does not have the same critical performance pitfalls like Lombok has.
      And to give context.
      In a performance sensitive context lombok has the ability to destroy your performance just based on how the variables are compared in a hashcode/equals function where the order can be important.

    • @hellowill
      @hellowill Před 2 lety

      @@Speiger Ah right. I guess I dont focus too much on performance critical workloads. I do wish records had better support for builders or so called 'withers'.

    • @Speiger
      @Speiger Před 2 lety

      @@hellowill Lets put it that way. For people who use lombok its not a great option. For everyone else it is a good way to reduce code and it does reduce the Licensing hell.

    • @emanueltrandafir8756
      @emanueltrandafir8756 Před 2 lety +1

      @Speiger, @Will - I personally believe java records and lombok are different features that can be used for different things. Records are similar to Lombok's @Value classess, indeed - but Lombok has a lot of other features to offer and it allows much more flexibility.

  • @jamfamily4287
    @jamfamily4287 Před rokem

    This is an extremely useful and time saving feature!

  • @AbdelkebirMalek
    @AbdelkebirMalek Před 2 lety

    I love your videos you're a Hero!
    Please, visitor pattern implementation 🙏

  • @yansoe2191
    @yansoe2191 Před rokem

    Hay John,
    Thank you for the great content. You really simplify this. Do you mind covering Executor Service (Multithreading)

  • @tanacing347
    @tanacing347 Před měsícem

    Gracias John!!!

  • @berihunhadis3960
    @berihunhadis3960 Před 2 lety

    thank you for sharing this nice tutorial, keep it up

  • @MrBrackets
    @MrBrackets Před rokem

    great video, thank you!